【发布时间】:2019-09-17 11:38:23
【问题描述】:
我继承了下面的块似乎没有解决的宏。宏应该根据日期值有条件地选择逻辑操作。如果满足 %if 条件,它们应该打印 %put 语句中提到的宏变量,这些变量又成为 if 条件的一部分。如果满足条件 %if %length(&datein.)=10 OR %length(ST_&date.)=10,它将打印第一个 %put 语句,否则将打印第二个 %put 语句。同样的逻辑适用于第二个 %if 语句。
宏应该在数据步骤中运行。逻辑运算符 AND 被视为变量,我收到一条注释注意:变量 AND 未初始化。
我试图通过添加下面代码中提到的左括号和右括号来平衡 if 条件。试图改变 if 条件的结构以分隔第一个和第二个条件,但似乎不起作用。我假设逻辑运算符 AND 不能像在 %if %then %else 语句中那样使用。
%macro test_date(date=, comp1=, comp2=, label=);
if &datein. ne "" and ST_&date. ne "" then do;
if (%if %length(&datein.)=10 OR %length(ST_&date.)=10 %then %put ST_&date._10 &comp1. datein_10; %else %put ST_&date._19 &comp1. datein_19;
AND %if %length(&datein.)=10 OR %length(ED_&date.)=10 %then %put datein_10 &comp2. ED_&date._10; %else %put datein_19 &comp2. ED_&date._19;)
then EPOCH=&label.;
end;
%mend test_date;
%test_date(date=SCREEN, comp1= le, comp2= le, label='SCREEN');
【问题讨论】:
-
这对我来说没有多大意义。它是
if、then、else和epoch(而不是%if、%then、%else和%let epoch),所以我认为它应该在数据步骤中运行?内部 if 中的内容写入日志,并且在数据步骤运行时不会解析为 true 或 false。And不能在语句中排在第一位。ST_&date似乎是外部 if 中的数据步骤变量和内部 if 中的字符串。这应该怎么做? -
抱歉没有说清楚。我已经更新了我的问题。
-
你希望宏做什么?您希望宏生成什么 SAS 代码?
-
显示您尝试使用此宏生成的数据步骤的其余部分。
-
如果满足 %if 条件,他们应该打印 %put 语句中提到的宏变量,这些变量又成为 if 条件的一部分。这段代码 sn-p 是庞大代码的一部分,会很乏味。
标签: if-statement sas sas-macro