【发布时间】:2017-01-19 22:04:53
【问题描述】:
我想编写一个代码,在特定条件下将执行不同的 proc tabulate。问题出在宏内部的某个地方。没有改变一切都很好。 代码的想法很简单,但这是我第一次做这样的事情。根据数据 makro 中的 x 值,将执行不同的宏。不知道宏里面应该怎么定义变量。
data makro;
set number;
if number < 20 then x=1;
else x=2;
run;
proc format;
value temp 70- HIGH='red';
run;
PROC SQL;
CREATE TABLE Stat_for_&cel AS
SELECT distinct t1.&zmienna,
t1.&cel,
t2.number,
(COUNT(t1.cid)) AS ILE
FROM zrodlo.abt_app t1 left join ile_zmiennych t2 on t1.&zmienna=t2.&zmienna where t1.&zmienna not is missing
GROUP BY t1.&zmienna,
t1.&cel
ORDER BY t1.&zmienna DESC;
QUIT;
%macro tabelka1(Statystyka_dla_cel,&ILE,&cel,&zmienna);
proc format;
value temp 70- HIGH='red';
run;
PROC TABULATE
DATA= &&Stat_for_&cel format=commax10.2 ;
VAR &&ILE;
CLASS &&zmienna/ MISSING;
CLASS &&cel/ MISSING;
TABLE
/* Row Dimension */
&&cel,
/* Column Dimension */
&&ILE* ColPctSum* &&zmienna*[style=[background=temp.]];
RUN;
%mend tabelka1;
data makro_2;
set makro;
if x=1 then call execute ('%tabelka1');
run;
编辑:从“答案”中添加信息,因为它不是答案。
代码应该这样工作。 &Cel 和 &zmienna 只是我想在 proc 制表过程中使用的变量,它们是在代码开头手动定义的。当“数字”
我相信,主要问题在 %macro tabelka1 内部。我不知道我应该如何在宏中实现变量 &cel 和 &zmienna。
【问题讨论】:
-
很遗憾,您的问题不够清楚,无法理解您要寻求帮助的具体内容。
-
示例输入和输出数据会有所帮助。如果 MAKRO 中有多个满足条件 X=1 的观察值,您是否要多次运行宏?或者,如果任何观察结果 X=1,您是否只想运行一次?或者也许只有当所有观测值都有 X=1 时?
-
这是我如何编写宏的示例。在代码的底部有执行宏的示例代码。注意cmets中的参数列表和用法。