[爆卦]SAS macro do loop是什麼?優點缺點精華區懶人包

為什麼這篇SAS macro do loop鄉民發文收入到精華區:因為在SAS macro do loop這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者hanjing (自知者明)站內Statistics標題[程式] 請問我的SAS迴圈是否有寫錯時...


[軟體程式類別]:
SAS
[程式問題]:
敘述統計

[軟體熟悉度]:
低(1~3個月)

[問題敘述]:
我想要寫proc means的迴圈
但因為對迴圈不熟悉,而書上對於迴圈的示範多是在資料處理的部份
所以我就依樣畫葫蘆把他用在proc means裡面

我要對emp這個變數進行proc means並求取該變數的sum值
由於分類變類太多了(240個分類),而且每一個分類變數之間並沒有關係
所以我要以更換分類變數的方法,重複計算每次的sum值

舉例(re1到 re240即不同的分類變數)
ID emp re1 re2 re3 ... ... re240
A 25 1 0 1 0
B 10 1 1 1 0
C 15 0 0 1 0

如果以re1做為分類變數 emp的sum值就是
re1=0 sum=15
re1=1 sum=25+10

若以re2做為分類變數 emp的sum值就是
re2=0 sum=25+15
re2=1 sum=10
以此類推

[程式範例]:
原來的作法是
proc means data=c maxdec=2 n mean sum;
var emp;
class re1 ;
by two_digit;

output out=C_re1 N=N mean=mean sum=sum ;
TITLE ’C_re1’;
;
run;
然後每次手動更換re1到re240...
於是我想說這樣用

%macro rep(i);
proc means data=c maxdec=2 n mean sum;
var emp;
class re&i ;

output out=C_re&i N=N mean=mean sum=sum ;
TITLE ’C_re&i’;

%mend rep;

%rep(1);
%rep(2);
%rep(3);

我覺得應該沒有錯
但是sas跑出
WARNING: Apparent symbolic reference I’ not resolved.
而且左邊的content's work
忽然出現了一個資料夾叫做sasmacr

想請問出了什麼問題
然後程式碼要怎麼修
感謝幫忙




--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.138.153.11
※ 編輯: hanjing 來自: 140.138.153.11 (04/26 17:20)
ASD332:title 中改用雙引號? " " 04/26 17:52
hanjing:好像沒什麼差 04/26 18:04
ASD332:改成這樣試看看 Title "C_re&i" ; 04/26 18:23
hanjing:嗯,改用雙引號之後,WARNING: Apparent symbolic reference 04/26 18:31
hanjing:這行消失了,但是左邊的欄位還是有sasmacr這個資料夾,而且 04/26 18:32
hanjing:要刪除資料夾時會出現..ERROR:you cannot delete 04/26 18:40
hanjing:work.sasmacr.catalog because work.sasmacr.catalog 04/26 18:41
hanjing:is in use by you in resource environment dms process 04/26 18:41
ASD332:那應該是你自訂 macro 後產生出來的 不用理它 04/26 18:55
ASD332:離開 sas 後會自動消失 04/26 18:55
hanjing:另外還有一個問題就是,最後一個產生的C_re&i會無法開啟 04/26 18:56
hanjing:例如 %rep(3);是最後一個的話,C_re3會無法開啟,我的想法是 04/26 18:58
hanjing:那就多用一個,像我最多有240個,所以就讓他到241這樣 04/26 18:59
tew:因為你寫了 Macro 他會出來 sasMacr 這樣的東西 儲存你的巨 04/26 19:18
hanjing:嗯,了解,所以我這樣用macro真的沒有錯嗎?可是為什麼還是會 04/26 20:09
hanjing:有最後一個%rep()的結果開不起來 04/26 20:10
ASD332:你這樣的寫法並無牽涉到 do-loop,所以不會產生你提到的241 04/26 21:46
ASD332:確認一下變項或檔案是否存在吧 04/26 21:47
hanjing:我確定變項是在的,如果假設%rep(4)是最後一個rep,只要開啟 04/27 09:42



我確定re4這個變項的確存在
但如果%rep(4)是最後一個rep的話,在proc means的程序跑完後
所產生的C_re4就會無法開啟,也無法刪除
這是對話框的畫面,可以幫我解答一下是不是程式寫的地方有問題
http://www.ppbox.com.tw/img/1272332202x-1937073909.jpg
※ 編輯: hanjing 來自: 140.138.153.11 (04/27 09:46)
ASD332:macro 裡的 proc means 最後加個 run ; 04/27 14:36
hanjing:嗯,還是一樣,會刪不掉 04/27 16:58
ASD332:重新啟動 sas 再跑一次看看... 04/27 17:23
kingbee:最後一行改用quit; 做結尾 04/28 17:10
hanjing:嗯~QUIT; 可以 感 謝幫忙 04/30 15:07
hanjing:嗯proc means的時候加quit可以,但到了data指令時用quit會 04/30 15:18
hanjing:出現ERROR 180-322: Statement is not valid or it is use 04/30 15:18
hanjing:out of proper order. 04/30 15:18
hanjing:雖然不知道為什麼,但在DATA指令下將quit改run就ok了 感謝 04/30 15:20
sneak: 重新啟動 sas 再跑 https://daxiv.com 01/02 15:06

你可能也想看看

搜尋相關網站