你需要編寫一個函數式的宏,如果你做你上面做什麼,這是不很容易做到(可能的,但不是充分的容易成爲值得做的事情)。
宏不是天生的功能,它們只是您在其他地方編寫和重複使用的代碼。所以你不能真的在等號的右邊調用一個宏,除非它包含的唯一的非宏代碼在等號的右邊是有效的代碼。
在這種情況下,我同意format
作爲解決方案。您需要使用proc format
中的cntlin
選項,並且您需要在運行數據步驟之前創建該格式。最少需要fmtname
,start
,label
。通常也包括type
。對於「其他」,hlo="o"
行也是一個好主意。
data for_fmt;
set parametric_table;
retain fmtname 'PARAMETF' type 'N'; *or 'C' and include a $ if character;
rename
original_Value = start
transformed_value = label
;
output;
if _n_=1 then do;
hlo='o';
call missing(original_value);
transformed_value = .; *or ' ' or whatever you want a non-match to return;
output;
end;
run;
proc format cntlin=for_fmt;
quit;
確保你沒有重複start
值,但除此之外,這是你最好的辦法爲你描述。然後你有
data transformation;
set transformation;
new_value = input(put(old_value,PARAMETF.),BEST12.); *or whatever depending on what you are doing. Format makes CHAR value always, so `input` to convert to number.;
run;
這裏沒有宏需要,雖然你當然可以(而且,我應該說)應該有一個通用的宏來創建這樣的格式。
來源
2016-11-21 17:41:01
Joe
不確定爲什麼選票很近,這個問題很清楚。如果您對語言一無所知,請不要投票結束,這不是一個絕對明確的案例。 – Joe