2015-10-12 61 views
0

我有存儲名稱的字符串,例如一個宏變量:創建數據從宏變量設定SAS

%令操作=添加減法除法乘法;

我想將宏中的每個元素(顯示爲觀察值)轉置爲數據集變量。因此數據集應該如下所示:

<obs> <operation> 
<1> add 
<2> subtract 
<3> divide 
<4> multiply 

回答

3

使用SCAN()函數。默認分隔符將適用於您的示例,否則您可以指定要使用的確切分隔符。

%let operation= add subtract divide multiply; 
data want ; 
    length obs 8 operation $20 ; 
    do obs=1 by 1 until (operation=' '); 
    operation=scan("&operation",obs); 
    if operation ne ' ' then output; 
    end; 
run; 
+0

感謝您的迴應,建立在我的問題上。假設我想要設置一個數組來指向'操作',我會按照以下方法來做:'set want(keep = operation);''array pointer(*)operation;' – Josh

+0

宏指令中的單詞是指SAS數據集中的變量名? –

+0

是的,他們是。我基本上把它當作一個「陣列」練習來對待。 – Josh

1

我仍然不知道你有什麼和你想要的東西。這個例子是人爲的,但可能會給你一些關於語法等的幫助。

%let operation = add subtract multiply divide; 

data operation; 
    length &operation 8; 
    array operation[*] &operation (2 3 10 4); 
    put 'NOTE: ' (operation[*])(=); 
    run; 

*data set of names; 
proc transpose data=operation(obs=0) out=names name=operation; 
    var &operation; 
    run; 
proc print; 
    run;