看板 Statistics 關於我們 聯絡資訊
我不知道原po的最終目的是什麼 如果只是照字面上說的 我想版大那一句就夠了 這篇只是要提出一些從以下程式看到的問題 ※ 引述《bugle (低點)》之銘言: : ※ 引述《eigenvalue (somnambulist)》之銘言: : : %MACRO SQL(num); : : %do i = 1 %to &num; : : 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 &NUM; : 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