2016-08-01 17 views
0

온라인으로 매크로를 사용하여 여러 개의 Excel 파일을 단일 sas 데이터 세트로 가져옵니다. 그리고 그것은 아주 잘 작동합니다. 그러나 하나의 변수 "플레이트"를 추가하여 각 Excel 파일을 지정하려고합니다. 다음 매크로는 다음과 같습니다 가져 오기 후 추가 전의 변수 추가

%macro MultImp(dir=,range=,out=,n=); 

%let rc=%str(%'dir %")&dir.%str(\%" /A-D/B/ON%'); 
filename myfiles pipe %unquote(&rc); 

data list; 
length fname $256.; 
infile myfiles truncover; 
input myfiles $100.; 

fname=quote(upcase(cats("&dir",'\',myfiles))); 
out="&out"; 
drop myfiles; 
call execute(' 
%do i=1 %to &n.; 
proc import dbms=xlsx out= _test 
     datafile= '||fname||' replace ; 

     range="&range"; 


run; 

data _test; 
set _test; 
plate=&i; 
run; 

proc append data=_test base='||out||' force; run; 
proc delete data=_test; run; 
%end; 
'); 
run; 
filename myfiles clear; 

%mend; 

%MultImp(dir=U:\test,range=summary$.D10:Y200,out=test,n=30); 

가 나는이 call execute의 내부 루프를 수행하고 proc import 후 작은 데이터 단계를 실행할 수 있지만 proc append 전에 썼다. 하지만 작동하지 않습니다. 아무도 데이터 세트를 추가하기 전에이 변수를 어떻게 추가 할 수 있는지 알 수 있습니까? 미리 감사드립니다.

답변

0

을 추가 매크로 호출

proc delete data=out;run; 

전에 데이터 세트를 삭제합니다. 먼저 변수에 명령을 빌드 한 다음 CALL EXECUTE()에 전달하십시오.

N= 매개 변수가 무엇을하고 있는지 파악할 수 없어서 방금 제거했습니다.

%macro MultImp(dir=,range=,out=); 
data list; 
    infile "dir ""&dir"" /A-D/B/ON" pipe truncover ; 
    input filename $255.; 
    out="&out"; 
    plate+1; 
    length fname $600 cmd $3000; 
    fname=quote(catx('\',"&dir",filename)); 
    cmd=catx(' ','proc import dbms=xlsx out=_test replace' 
       ,'datafile=',fname 
       ,'; range="&range"; run;' 
       ,'data _test; plate=',plate,'; set _test; run;' 
       ,'proc append data=_test base=&out force; run;' 
       ,'proc delete data=_test; run;' 
     ) 
    ; 
    call execute(trim(cmd)); 
run; 
%mend multimp; 

proc delete data=test; run; 
%MultImp(dir=U:\test,range=summary$.D10:Y200,out=test); 
+0

우수! 대단히 감사합니다 !!! – lxcfuji

0

proc append에서 수행하는 파이프 (|)는 무엇입니까? 대부분 코드가 정확하기 때문에 기본 데이터를 삭제하기 만하면됩니다. 나는 파이프가 무엇을위한 것인지 아니면해야만하는지 확신 할 수 없다. 이중 파이프는 일반적으로 연결을 의미합니다. 즉 호출이 실행될 때 의미가 있습니다. 그러나 proc에 추가하지 않습니다.

은 수정 PROC 난 당신이 너무 열심히 생각

proc append data=_test base=&out force; run; 
관련 문제