我想在SAS DI中構建自定義轉換。這種轉換將對輸入數據集中的列「起作用」,產生所需的輸出。爲了簡單起見,我們假設轉換將使用input_col1
來計算output_col1
,input_col2
來計算output_col2
,依此類推直到指定的列數(例如2)。如何在SAS中動態選擇索引賦值變量?
在代碼選項部分自定義轉換用戶能夠指定(通過提示)要對其執行操作的列的名稱;例如,用戶可以指定input_col1
應該引用輸入數據集中名爲「order_datetime」的列,併爲input_col2
制定類似的規範,否則將該提示留空。
這裏是我用來生成自定義轉換的輸出代碼:
data cust_trans;
set &_INPUT0;
i=1;
do while(i<3);
call symputx('index',i);
result = myfunc("&&input_col&index");
output_col&index = result; /*what is proper syntax here?*/
i = i+1;
end;
run;
這裏myfunc
指的是我使用PROC鈣鎂磷肥的正常工作取得了自定義的功能。
自定義轉換工作正常,如果我不嘗試考慮變量數量的輸入欄的作用於(即,如果我用"&&input_col&i"
,而不是"&&input_col&index"
,只是使用在輸出表中的列result
)。
不過,我在與試圖使這種方法更具活力的兩個問題:
我得到包含線以下警告
result = myfunc("&&input_col&index")
:警告:表觀象徵參考INDEX未解決。
- 我不知道如何分配到所需的輸出列動態發生;即,取決於do循環的迭代,我希望將輸出值分配給相應的輸出列。
我覺得這個解決方案必須在專家中衆所周知,但我找不到任何解釋如何做到這一點的解釋。
任何幫助,非常感謝!
感謝@Joe提供了非常及時和徹底的答案。這解決了我的問題。至於關於將名稱傳遞給過程的問題,這部分是爲這個問題製作一個最小工作示例的人工製品,部分原因是該過程確實需要表名和列名。不重要。再次,非常感謝! – Rookatu