作者hanjing (自知者明)
站內Statistics
標題[程式] 請問我的SAS迴圈是否有寫錯
時間Mon Apr 26 17:19:16 2010
[軟體程式類別]:
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)
1F:→ ASD332:title 中改用雙引號? " " 04/26 17:52
2F:→ hanjing:好像沒什麼差 04/26 18:04
3F:→ ASD332:改成這樣試看看 Title "C_re&i" ; 04/26 18:23
4F:→ hanjing:嗯,改用雙引號之後,WARNING: Apparent symbolic reference 04/26 18:31
5F:→ hanjing:這行消失了,但是左邊的欄位還是有sasmacr這個資料夾,而且 04/26 18:32
6F:→ hanjing:要刪除資料夾時會出現..ERROR:you cannot delete 04/26 18:40
7F:→ hanjing:work.sasmacr.catalog because work.sasmacr.catalog 04/26 18:41
8F:→ hanjing:is in use by you in resource environment dms process 04/26 18:41
9F:→ ASD332:那應該是你自訂 macro 後產生出來的 不用理它 04/26 18:55
10F:→ ASD332:離開 sas 後會自動消失 04/26 18:55
11F:→ hanjing:另外還有一個問題就是,最後一個產生的C_re&i會無法開啟 04/26 18:56
12F:→ hanjing:例如 %rep(3);是最後一個的話,C_re3會無法開啟,我的想法是 04/26 18:58
13F:→ hanjing:那就多用一個,像我最多有240個,所以就讓他到241這樣 04/26 18:59
14F:推 tew:因為你寫了 Macro 他會出來 sasMacr 這樣的東西 儲存你的巨 04/26 19:18
15F:→ hanjing:嗯,了解,所以我這樣用macro真的沒有錯嗎?可是為什麼還是會 04/26 20:09
16F:→ hanjing:有最後一個%rep()的結果開不起來 04/26 20:10
17F:→ ASD332:你這樣的寫法並無牽涉到 do-loop,所以不會產生你提到的241 04/26 21:46
18F:→ ASD332:確認一下變項或檔案是否存在吧 04/26 21:47
19F:→ 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)
20F:→ ASD332:macro 裡的 proc means 最後加個 run ; 04/27 14:36
21F:→ hanjing:嗯,還是一樣,會刪不掉 04/27 16:58
22F:→ ASD332:重新啟動 sas 再跑一次看看... 04/27 17:23
23F:→ kingbee:最後一行改用quit; 做結尾 04/28 17:10
24F:→ hanjing:嗯~QUIT; 可以 感 謝幫忙 04/30 15:07
25F:→ hanjing:嗯proc means的時候加quit可以,但到了data指令時用quit會 04/30 15:18
26F:→ hanjing:出現ERROR 180-322: Statement is not valid or it is use 04/30 15:18
27F:→ hanjing:out of proper order. 04/30 15:18
28F:→ hanjing:雖然不知道為什麼,但在DATA指令下將quit改run就ok了 感謝 04/30 15:20