gpt4 book ai didi

SAS 宏引用 : pass equals sign as macro argument

转载 作者:行者123 更新时间:2023-12-04 21:43:03 25 4
gpt4 key购买 nike

我正在编写一个宏,在某些时候调用一些 proc SQL 代码。我希望用户能够指定任意 proc sql 选项(例如 inobs=100 可能是我的宏的输入参数之一)。

我很难引用具有相等“=”字符的参数。

问题之一是我还应该检查宏参数是否为空,如果不为空,则只有在sql语句中添加指定的选项。

下面是一个示例非工作测试,它不起作用并抛出

ERROR: The keyword parameter INOBS was not defined with the macro.



我已经阅读了这个( http://www2.sas.com/proceedings/sugi28/011-28.pdf )和其他 SUGI,并尝试了许多可能的方法来引用和调用宏。

如果有人可以提供以下功能的工作示例,将不胜感激。
options mprint mlogic;

data have;
length x $8;
input x;
datalines;
one
two
three
;

proc sql inobs=2;
create table sql_output as
select *
from have;
quit;


%macro pass_parameter_with_equal_sign(table=, sqlOptions=);
proc sql
%if "%left(%trim(&sqlOptions.))" ne "" %then %do;
&sqlOptions.
%end;
/* the semicolon to end the proc sql statement */
;
create table macro_output as
select *
from have;
quit;
%mend;

%pass_parameter_with_equal_sign(table=have, sqlOptions=%str(inobs=2))

title "SQL output:";
proc print data=sql_output; run;
title "Macro output:";
proc print data=macro_output; run;

最佳答案

如果删除 %if条件如下它应该工作:

%macro pass_parameter_with_equal_sign(table=, sqlOptions=);
proc sql
&sqlOptions.
/* the semicolon to end the proc sql statement */
;
create table macro_output as
select *
from have;
quit;
%mend;
%if您使用的是检查是否 &sqlOptions不是空白,如果您按原样使用它,这应该无关紧要,因为它的无条件使用将给出:
proc sql inobs=2; /* in the case of &sqlOptions=inobs=2 */

或者如果没有为 &sqlOptions 提供值那么你应该看到:
proc sql; /* i.e. no options specified */

所以它应该在有或没有参数的情况下工作。

关于SAS 宏引用 : pass equals sign as macro argument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33903421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com