作者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
1F:推 men0523:先谢谢你的协助^^ 03/16 21:10
2F:→ men0523:我放上去跑了之後,他在proc sort还是出现error: 03/16 21:12
3F:→ men0523:Expected semicolon not found. The macro will not be c 03/16 21:12
4F:→ men0523:omplied.error:a dummy macro willbe complied. 03/16 21:14
5F:→ KnightX:这个 ERROR 看起来像是你有改程式然後改不完全的样子 @@ 03/16 21:20
6F:推 men0523:真的是我...成功了,非常感谢你!!! 03/17 06:36