【发布时间】:2018-07-13 20:09:37
【问题描述】:
是否可以使这种形式的宏工作?
%macro tableMath(input1,input2);
%local result;
proc sql; ---some code here using inputs--- quit;
proc sql; ---more code here--- quit;
proc sql;
select something into: result
quit;
&result
%mend;
我想对数据集的每次观察运行一些相当复杂的逻辑,并且在我之前使用过的任何其他语言中,这样做的方法是将其封装在一个函数中,该函数每次调用时都会返回一个结果- - 但是,我不确定如何在 SAS 中执行此逻辑。
编辑:input1 和 input2 将是数据集的列,结果将用于在程序的另一部分的其他宏中创建新列。我不需要特定的代码解决方案我只是不明白你应该如何执行传统的函数逻辑,你需要在 SAS 中返回值......
【问题讨论】:
-
stackoverflow.com/questions/33817518/… 在这个问题中,你不能使用没有 % 的任何东西,否则它会污染处理流并且你不会得到正确的返回值。这是否意味着您实际上不能在需要返回值的宏中使用 PROC SQL 或 DATA 步骤??
-
有一些方法可以从宏中返回一个值。也有编写“函数式宏”的方法,但它们不是真正的函数。宏语言是一种预处理器,因此如果您有调用宏的 PROC SQL 代码,则宏将在 SQL 代码执行之前执行。如果您可以举一个小例子说明您希望如何使用您的功能,那将使这个问题更具体/更容易回答。
-
您可以尝试使用数据步骤来编码您的复杂逻辑,这将为它迭代的每一行返回一个结果。之后,如果结果符合您希望的标准,请使用
call execute()运行某个步骤。正如昆汀所说,有很多方法......但你必须对我们更具体一点。 -
I want to run some fairly complicated logic on each observation of a dataset如果您是 SAS 新手,我会说解释一下这个逻辑。通常它并不像看起来那么复杂,或者在 SAS 中可以使用更好的方法,即使只是几个步骤。