作者liton (歐吉桑留學生)
看板Statistics
標題Re: [問題] SAS保留變數方法
時間Wed Jul 15 00:58:39 2009
我不知道原po的最終目的是什麼
如果只是照字面上說的 我想版大那一句就夠了
這篇只是要提出一些從以下程式看到的問題
※ 引述《bugle (低點)》之銘言:
: ※ 引述《eigenvalue (somnambulist)》之銘言:
: : %MACRO SQL(num);
: : %do i = 1 %to #
: : PROC SQL;
: : CREATE TABLE WORK.STACY AS SELECT
: : ID,
: : PAY&i AS DJC&i → 這裡的話只會保留 i = 12
: : FROM WORK.STACY1; 也就是只有DJC12 一個變數
: : QUIT; 要如何完整保留12個變數
: : %end;
: : %MEND;
: : %SQL(12);
為什麼會只有i=12?
這問題有點冏
因為你資料連續蓋了11次當然只會有i=12
就算你用data set的語法
還是會犯同樣的問題
: 擺錯了
: PROC SQL;
: CREATE TABLE WORK.STACY AS SELECT
: ID,
: %MACRO SQL(num);
: %DO i = 1 %TO #
: PAY&i AS DJC&i %IF i<12 %THEN ,;;
: %END;
: %MEND;
: %SQL(12);
: FROM WORK.STACY1;
: QUIT;
Macro只是"文字的替換"
讀進去之後才去呼叫
首先的錯誤便是 SQL語法哪認得%Macro....
其次的問題便是你呼叫的是
: %MACRO SQL(num);
: %DO i = 1 %TO &NUM;
: PAY&i AS DJC&i %IF i<12 %THEN ,;;
: %END;
: %MEND;
: %SQL(12);
這段程式想做啥?
至於west1996:do loop應該只要包住PAY&i AS DJC&i這一行就好了
這個....能不能執行上面都提到了
--------------------------------------
不要執著於Macro
是因為你要解某個問題 而這個問題適合用Macro解
而不是故意要用Macro去解某個問題
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.167.184.158
→ west1996:不好意思,我不太了解您最後那一段的意思,因為macro 07/15 09:37
→ west1996:function裡面是可以包任何sas接受的statement的,所以包 07/15 09:38
→ west1996:SQL也沒有任何問題,雖然我昨天的推文裡面是漏掉了一個 07/15 09:39
→ west1996:逗號,但是整體概念應該是沒有錯的,另外此問題上用 07/15 09:41
→ west1996:macro似乎沒什麼不妥? 07/15 09:41
→ bugle:%macro的宣告請移到外部試試,並不是完全不能用 07/15 20:34
→ bugle:有必要回得這麼酸嗎? 07/15 20:35