簡體   English   中英

如何在循環SAS中的數據步驟中為宏分配值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM