[程式] 如何用 SAS 的 macro 跑交互作用?

看板Statistics作者 (pp)時間13年前 (2011/06/13 15:55), 編輯推噓3(309)
留言12則, 3人參與, 最新討論串1/1
因為變數會很多,所以用 varlist 來代表變數及其交互作用 %let varlist1= x1 y1; %let varlist2= x1 y1 x1*y1; %let varlist3= x1 y1 x1*y1 x1*z1 y1*z1 z1*y1*z1; %macro function(var); proc genmod; class &var; model y=&var /dist=poisson link=log; run; %mend; %function(&varlist1) <--這行可以正確執行 %function(&varlist2) <--這行是 syntax error %function(&varlist3) <-- Syntax error 請問要如何把交互作用項放進去 macro 裡面呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.240.145.6

06/13 17:01, , 1F
你是用哪一個procedure? reg? glm?
06/13 17:01, 1F

06/13 17:02, , 2F
建議把完整的code貼上來
06/13 17:02, 2F

06/13 17:37, , 3F
抱歉,是用 genmod 跑 poisson
06/13 17:37, 3F

06/13 17:52, , 4F
第二個解析第一次出來其實變成%function(x x*y)就不合理
06/13 17:52, 4F

06/13 17:53, , 5F
會辨識到額外的符號 *
06/13 17:53, 5F

06/13 18:01, , 6F
試試看一開始的%let=後面用%bquote()來保護後面的字串
06/13 18:01, 6F

06/13 18:07, , 7F
不對,我剛試了一下,就算不加用原本的程式碼也是可以跑
06/13 18:07, 7F

06/13 18:07, , 8F
的@@
06/13 18:07, 8F

06/13 18:08, , 9F
你要不要先試一下不要用macro語法直接跑跑看有交互作用的
06/13 18:08, 9F

06/13 18:08, , 10F
其中一個model,搞不好問題根本不是出在macro上面....
06/13 18:08, 10F

06/13 20:38, , 11F
謝謝你,我找到錯誤的地方了,就是在 class 裡面用了 &var
06/13 20:38, 11F
※ 編輯: pgychen 來自: 111.240.147.30 (06/13 20:39)

06/13 20:40, , 12F
不跑交互作用,都不會執行錯誤。謝謝你 west1996
06/13 20:40, 12F
文章代碼(AID): #1DzS9PVV (Statistics)