deleteThisList
我有一个大型数据集,它包含多个日期(从20120103到20121205)和合同(_ric = AXPM061204200.c,AXPC061204200.c等)。
我尝试使用"调用exectue"拆分数据集,这是我的代码。它只能按日期拆分,但在合同名称(_ric)中失败。错误是:变量AXPM061203800未初始化。我怎么能解决这个问题。
答案 0 :(得分:2)
在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
答案 1 :(得分:1)
你的问题在这里:
" and _ric="||input(_ric,$13.)||"
那将解决
if ... and _ric=AXPC061204200.c
SAS认为AXPC061204200.c
是一个变量,并抱怨它不知道它是什么。
更改为(注意我添加的额外'
)
" and _ric='"||input(_ric,$13.)||"'
您将发送SAS
if ... and _ric=`AXPC061204200.c`