Sas 如何在宏中创建宏变量?
我想知道如何在SAS%宏语句块中创建SAS宏变量?当我的CALL SYMPUT或SELECT INTO语句位于%MACRO语句块中时,它们似乎不起作用Sas 如何在宏中创建宏变量?,sas,sas-macro,Sas,Sas Macro,我想知道如何在SAS%宏语句块中创建SAS宏变量?当我的CALL SYMPUT或SELECT INTO语句位于%MACRO语句块中时,它们似乎不起作用 %MACRO NONDATE_FORMAT_CHECK(varname=,output=); PROC SQL; CONNECT TO NETEZZA AS NET (SERVER=&server DATABASE=&database USER=&NBKID PASSW
%MACRO NONDATE_FORMAT_CHECK(varname=,output=);
PROC SQL;
CONNECT TO NETEZZA AS NET
(SERVER=&server
DATABASE=&database
USER=&NBKID
PASSWORD=&NBKPASSWD);
CREATE TABLE WORK.DT_FMT&output AS SELECT *
FROM CONNECTION TO NET
(SELECT 'FORMAT_IS_DATE' AS DT_FMT_INDICATOR
FROM &input_database&input_table
WHERE (SELECT COUNT(*)
FROM &input_database&input_table
WHERE SUBSTR(&varname,1,10) LIKE '____-__-__') > 0
LIMIT 1);
DISCONNECT FROM NET;
QUIT;
PROC SQL;
SELECT DT_FMT_INDICATOR INTO :DT_FMT_CHECK_&varname
FROM WORK.DT_FMT&output;
QUIT;
%MEND NONDATE_FORMAT_CHECK;
提前感谢。范围是您的问题。默认情况下,
CALL SYMPUT
和SELECT INTO
在本地符号表中创建一个宏变量(对于CALL SYMPUT
,如果它是非空的,但在宏中却是空的)
有关更多信息,请参阅
要解决此问题,最好在
PROC SQL
或CALL-SYMPUT
中赋值之前,在宏中使用%GLOBAL
语句,或者使用CALL-SYMPUTX
来指定范围。范围是您的问题。默认情况下,CALL SYMPUT
和SELECT INTO
在本地符号表中创建一个宏变量(对于CALL SYMPUT
,如果它是非空的,但在宏中却是空的)
有关更多信息,请参阅
要解决此问题,最好在
PROC SQL
或CALL SYMPUT
中赋值之前在宏中使用%GLOBAL
语句,或者使用CALL SYMPUTX
来指定范围。您正在创建宏变量,但宏在退出之前从未使用过它
您是否希望宏变量在宏结束后可用?如果是这样,您需要先创建它
%let DT_FMT_CHECK_george= ;
%NONDATE_FORMAT_CHECK(varname=george,output=fred);
或者在为其赋值之前将其设置为全局
%if not %symexist(DT_FMT_CHECK_&varname) %then %global DT_FMT_CHECK_&varname;
PROC SQL;
SELECT DT_FMT_INDICATOR INTO :DT_FMT_CHECK_&varname
FROM WORK.DT_FMT&output;
QUIT;
您正在创建宏变量,但宏在退出之前从未使用过它 您是否希望宏变量在宏结束后可用?如果是这样,您需要先创建它
%let DT_FMT_CHECK_george= ;
%NONDATE_FORMAT_CHECK(varname=george,output=fred);
或者在为其赋值之前将其设置为全局
%if not %symexist(DT_FMT_CHECK_&varname) %then %global DT_FMT_CHECK_&varname;
PROC SQL;
SELECT DT_FMT_INDICATOR INTO :DT_FMT_CHECK_&varname
FROM WORK.DT_FMT&output;
QUIT;