SAS - 通过将文本连接到当前宏变量动态创建宏变量
SAS - Dynamically creating macro variable via concatenation of text to a current macro variable
我想创建一个宏变量。宏变量名称需要通过将文本连接到一个已经存在的变量在它已经解析之后来制作。具体来说,我想在 PROC SQL 块中使用 INTO: 执行此操作。这是一个片段来解释我想做什么。
%macro MyMacro(process);
PROC SQL;
SELECT
COUNT(*) INTO: &process._new_text
FROM
DataSetHere
;QUIT;
%mend MyMacro;
如果我调用这个宏并将单词 "cat" 传递给 process,我现在想要 declared/initialized 一个名为 cat_new_text,只要 &cat_new_text 就应该 return 在该查询中选择的 COUNT(*)参考。
我阅读了一些内容,研究了使用多个 & 符号,首先尝试在引号内解决 &process - 没有什么能真正解决我的确切问题。有谁知道完成此任务的明确方法吗?
提前致谢!
您的代码看起来不错,而且似乎可以完全按照您的描述进行操作。
但是,如果您尝试 "access" 宏外的新宏变量,例如
%MyMacro(cat);
%put &cat._new_text.;
那么它确实不起作用,因为该变量是在您的宏中本地创建的,并且不存在于该宏的范围之外。
要解决这个问题,您只需在宏定义中添加一个 %global
语句:
%macro MyMacro(process);
%global &process._new_text;
PROC SQL;
SELECT COUNT(*)
INTO: &process._new_text
FROM DataSetHere
;
QUIT;
%mend MyMacro;
我想创建一个宏变量。宏变量名称需要通过将文本连接到一个已经存在的变量在它已经解析之后来制作。具体来说,我想在 PROC SQL 块中使用 INTO: 执行此操作。这是一个片段来解释我想做什么。
%macro MyMacro(process);
PROC SQL;
SELECT
COUNT(*) INTO: &process._new_text
FROM
DataSetHere
;QUIT;
%mend MyMacro;
如果我调用这个宏并将单词 "cat" 传递给 process,我现在想要 declared/initialized 一个名为 cat_new_text,只要 &cat_new_text 就应该 return 在该查询中选择的 COUNT(*)参考。
我阅读了一些内容,研究了使用多个 & 符号,首先尝试在引号内解决 &process - 没有什么能真正解决我的确切问题。有谁知道完成此任务的明确方法吗?
提前致谢!
您的代码看起来不错,而且似乎可以完全按照您的描述进行操作。 但是,如果您尝试 "access" 宏外的新宏变量,例如
%MyMacro(cat);
%put &cat._new_text.;
那么它确实不起作用,因为该变量是在您的宏中本地创建的,并且不存在于该宏的范围之外。
要解决这个问题,您只需在宏定义中添加一个 %global
语句:
%macro MyMacro(process);
%global &process._new_text;
PROC SQL;
SELECT COUNT(*)
INTO: &process._new_text
FROM DataSetHere
;
QUIT;
%mend MyMacro;