SAS-如何按特定要求拆分大型数据集?

时间:2016-10-20 16:05:30

标签: split sas

deleteThisList

我有一个大型数据集,它包含多个日期(从20120103到20121205)和合同(_ric = AXPM061204200.c,AXPC061204200.c等)。

我尝试使用"调用exectue"拆分数据集,这是我的代码。它只能按日期拆分,但在合同名称(_ric)中失败。错误是:变量AXPM061203800未初始化。我怎么能解决这个问题。

2 个答案:

答案 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`
相关问题