[英]SAS- How to split a large dataset by certain requirements?
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等)的大型數據集。
我試圖使用“ call exectue”來分割數據集,這是我的代碼。 它只能按日期拆分,但不能輸入合同名稱(_ric)。 錯誤為:變量AXPM061203800未初始化。 我該如何解決這個問題。
經過DomPazz校正后,您的代碼還可以,但是優化效果不佳。
您可以多次讀取源數據,但是只能讀取兩次該數據集。
簽出此解決方案,並比較兩個代碼的性能。
%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
您的問題在這里:
" and _ric="||input(_ric,$13.)||"
那將解決
if ... and _ric=AXPC061204200.c
SAS認為AXPC061204200.c
是一個變量,並且抱怨它不知道它是什么。
更改為(注意額外的'
我添加了”)
" and _ric='"||input(_ric,$13.)||"'
您將發送SAS
if ... and _ric=`AXPC061204200.c`
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.