2016-08-01 11 views
0

複数のExcelファイルを単一のsasデータセットにインポートするためにオンラインで見つかったマクロを使用しています。そしてそれはとてもうまくいく。しかし、私はまた、1つの変数 "プレート"を追加して各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

を追加する前に

は、データセットを削除します。最初に変数にコマンドを構築し、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 delete data=out;run; 

変更はprocの私はあなたがあまりにも懸命に仕事をしていると思う

proc append data=_test base=&out force; run; 
関連する問題