Re: [程式] SAS_如何將資料切割

看板Statistics作者 (........)時間12年前 (2013/03/16 20:16), 編輯推噓2(204)
留言6則, 2人參與, 最新討論串2/2 (看更多)
因為 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
我放上去跑了之後,他在proc sort還是出現error:
03/16 21:12, 2F

03/16 21:12, , 3F
Expected semicolon not found. The macro will not be c
03/16 21:12, 3F

03/16 21:14, , 4F
omplied.error:a dummy macro willbe complied.
03/16 21:14, 4F

03/16 21:20, , 5F
這個 ERROR 看起來像是你有改程式然後改不完全的樣子 @@
03/16 21:20, 5F

03/17 06:36, , 6F
真的是我...成功了,非常感謝你!!!
03/17 06:36, 6F
文章代碼(AID): #1HH6Aa8T (Statistics)
文章代碼(AID): #1HH6Aa8T (Statistics)