0
我正在使用%SYMEXIST來檢查宏變量是否存在,然後根據結果繼續或跳過。這聽起來很簡單,但SAS迄今爲止嘗試的所有方法都出現錯誤。使用%SYMEXIST時導致空格錯誤
& num_tables是根據特定條件從數據集創建的宏。
proc sql noprint;
select distinct data_name into :num_tables separated by ' '
from TP_data
where trim(upcase(Data_Name)) in
(select distinct(trim(upcase(Data_Name))) from Check_table
where COALESCE(Num_Attri_DR,0)-COALESCE(Num_Attri_Data,0) = 0
and Name_Missing_Column eq ' ' and Var_Name eq ' ');
quit;
如果這個宏var沒有解析或沒有創建(沒有從數據集中選擇行),我想跳過。當我用,
%if %symexist(num_tables) %then %do;
SAS給出錯誤消息「宏變量名X必須以字母開頭或下劃線」。所以我嘗試使用以下所有方法刪除前導空格:
%let num_tables = &num_tables; /* approach 1 */
%let num_tables = %sysfunc(trim(&num_tables)) /* approach 2 */
%let num_tables = %trim(&num_tables) /* approach 3 */
但是這些都沒有奏效。我仍然收到錯誤「MACRO變量名稱X必須以字母或下劃線開頭」
哪裏「X」從何而來「?你實際做'如果%% symexist(num_tables)'也許? – Joe
我忘了替換num_tables的X,只是想使其通用性。另外,我我的代碼是%if%symexist(num_tables)%then%do; – rom
這與您提供的錯誤不一致;'%if%symexist(num_tables)'是合法的語法在任何SAS會話中,您在'方法'中所做的任何事情都沒有意義 - 它們都修改num_tables的內容,而不是名稱本身。 – Joe