作者KnightX (........)
看板Statistics
標題Re: [程式] SAS_如何將資料切割
時間Sat Mar 16 20:16:33 2013
因為 SAS macro variable 有長度限制,可能不夠塞下你資料內的所有 ID,
所以我就繞個路改寫成以下:
%macro a;
proc sort data=A; by ID; run;
data B;
set A;
by ID;
if _N_ = 1 then N = 0;
if first.ID then N + 1;
run;
proc sql noprint;
select max(N) into: N_MAX from B;
quit;
%do i = 1 %to &N_MAX;
proc sql noprint;
select distinct ID into :NAME separated by ' '
from B
where N = &i;
quit;
data _&NAME;
set A;
where ID = &NAME;
run;
%end;
%mend a;
應該就可以成功了...
※ 引述《men0523 (冒失鬼)》之銘言:
: 現在我想要切割成依照ID不同各存成不同的資料,如
: data 123;set A;if ID^=123 then delete;run;
: data 234;set A;if ID^=234 then delete;run;
: 但由於ID非常多,所以無法像以上這樣不停的作,然後我又查了以下寫法或許可行:
: proc sql noprint;select distinct ID into: tname separated by ' ' from A;quit;
: %macro a;%let i=1;%let name=%scan(&tname,&i);%do %while (&name^=());
: data _&name;set A(where=(ID="&name"));run;
: %let i=%eval(&i+1);%let name=%scan(&tname,&i);%end;%mend a;
: 但就出現了以下
: ERROR: The length of the value of the macro variable TNAME (65540) exceeds
: the maximum length (65534). The value has been truncated to 65534 characters.
: 請各位幫我看看我應該要怎麼修正才能順利跑出我的資料,謝謝:)
: [程式範例]:
: -----------------------------------------------------------------------------
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.241.51.210
推 men0523:先謝謝你的協助^^ 03/16 21:10
→ men0523:我放上去跑了之後,他在proc sort還是出現error: 03/16 21:12
→ men0523:Expected semicolon not found. The macro will not be c 03/16 21:12
→ men0523:omplied.error:a dummy macro willbe complied. 03/16 21:14
→ KnightX:這個 ERROR 看起來像是你有改程式然後改不完全的樣子 @@ 03/16 21:20
推 men0523:真的是我...成功了,非常感謝你!!! 03/17 06:36