Re: [程式] SAS_如何將資料切割
因為 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
推
03/16 21:10, , 1F
03/16 21:10, 1F
→
03/16 21:12, , 2F
03/16 21:12, 2F
→
03/16 21:12, , 3F
03/16 21:12, 3F
→
03/16 21:14, , 4F
03/16 21:14, 4F
→
03/16 21:20, , 5F
03/16 21:20, 5F
推
03/17 06:36, , 6F
03/17 06:36, 6F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):