[英]How to assign a value to a macro in datastep in a loop SAS
所以我正在嘗試做這樣的事情:
data temp1;
set temp;
do i=1 to 10;
call symput("var1", i);
end;
array x(*) x_&var1 to x_&var10;
....................
run;
我正在嘗試將i的值(1到10)分配給宏變量var1。 在同一數據步驟中,我將使用var1索引數組。
您可以將call symput
更改為此:
call symput(compress('var'||put(i,8.)), put(i,8.));
我還把put()
包裹在第二個參數上,以使用symput
來清除日志消息。
(不過,這看起來似乎很奇怪。如果您動態地創建許多宏變量,則可以重新考慮整體策略並提出更簡單的方法。)
編輯 :內特(Nate)很好地了解了在同一數據symput
無法使用symput
創建的SAS變量。 如果仍然想使用此解決方案,則可以在“ temp1”步驟之前將symput
循環移到_null_
datastep中。
這里有幾個問題。
一種是不能同時使用調用symput創建宏變量並在同一數據步驟中引用它,因此除非將其拆分為多個數據步驟,否則調用symput的任何變化都無法解決。
另一個是,在編寫代碼時(以及在描述中),您將要重寫10次“ var1”……您不是要&var1嗎? ,&var2。 ,...,&var10。 ? 如果是這樣,我會建議類似:
call symput('var'||left(i),i);
最后,如果只需要這些宏變量用於數組聲明,為什么還要在這里完全使用宏變量? 為什么不簡單地將x_1寫到x_10? 也許如果您向我們提供有關您要完成的目標的更多信息,我們可以為您提出更好的策略。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.