2016-10-20 124 views
0
data AXPM061204200; 
set a; 
call execute ("data work.data_"||strip(put(_ric,$13.))||"_"||strip(put(date,yymmddn8.))||"; 
       set work.a;if date="||date||" and _ric="||input(_ric,$13.)||";run;"); 
run; 

私は、複数の日付(20120103から20121205まで)と契約(_ric = AXPM061204200.c、AXPC061204200.cなど)の大きなデータセットを持っています。SAS-大きなデータセットを特定の要件で分割するにはどうすればよいですか?

"call exectue"を使用してデータセットを分割しようとしましたが、ここでは自分のコードです。日付で分割することはできますが、契約名(_ric)で失敗します。エラーは次のとおりです。変数AXPM061203800が初期化されていません。どうすればこの問題を解決できますか?

答えて

2

あなたのコードはDomPazz補正後のokですが送信されますが、それはうまく最適化されていません。

ソースデータを何度も読み込みますが、このデータセットを2回だけ読み取ることは可能です。

この解決方法を確認し、両方のコードのパフォーマンスを比較してください。

%macro split; 
proc sql; 
    create table tmp as 
    select distinct date, _ric 
    from work.a; 

    select count(*) 
    into :obs 
    from work.tmp; 

    %let obs=&obs.; 

    select date, _ric, catx("_", "work.data", substr(_ric, 1, 13), put(date, yymmddn8.)) 
    into :date1-:date&obs., :ric1-:ric&obs., :setname1-:setname&obs. 
    from work.tmp; 
quit; 

data 
%do i = 1 %to &obs.; 
    &&setname&i 
%end; 
; 
    set work.a; 
select; 
%do i = 1 %to &obs.; 
    when(_ric = "&&ric&i" and date = &&date&i) output &&setname&i; 
%end; 
end; 
%mend split; 

%split 
+0

ありがとう!私はマクロがうまくいかないので、通常はマクロを使わないようにします。しかし、私はより効率的なようにあなたの方法を試してみましょう! – Neal801

+0

こんにちは、あなたのコードには何らかのエラーがあるかもしれません。 SASはエラーを報告しました。 " – Neal801

+0

こんにちは、あなたのコードには何らかのエラーがあるかもしれません。 警告:データセットWORK.DATA_AXPA061203500_20120103が不完全な可能性があります。このステップが停止されたとき、0度の観察 と106の変数があった。 警告:このステップが停止されたため、データ・セットWORK.DATA_AXPA061203500_20120103は置き換えられませんでした。 – Neal801

1

あなたの問題はここにある:SAS

if ... and _ric=AXPC061204200.c 

に解決されます

" and _ric="||input(_ric,$13.)||" 

AXPC061204200.cが可変であり、それはそれが何であるかを知らないことを不平を言っていると思います。

変更(追加'に気づく私が追加)

" and _ric='"||input(_ric,$13.)||"' 

あなたはSAS

if ... and _ric=`AXPC061204200.c` 
+0

多くのありがとうございます!!!!!できます!!もう少し小さな質問があります。 _ricが123などの数値変数である場合、この状況でこの数値変数をどのように採用できますか? SASに日付変数であることを伝えるために日付を使用することができれば、SASに数値変数であることを伝える「コード」がありますか? – Neal801

+0

'' 'を削除してから、' 'put(_ric、best。)' '関数を使って数値変数の値を書き込みます。必要に応じてフォーマットを変更することができます。 'put(var、format)'は、指定された書式を使って数値変数をテキストに変換します。 – DomPazz

関連する問題