簡體   English   中英

SAS-如何按特定要求拆分大型數據集?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM