我是 SAS 的新手,在 do 循环中阅读 SAS if 语句,我仍然对如何解决循环问题感到困惑。我也不知道在这里使用宏。
代码被赋予 belòow:
if DIA_PRINCd=001
or DIA_UNOd =001
or DIA_DUEd =001
or DIA_TREd =001
or DIA_QUATTROd=001
or DIA_CINQUEd =001
or DIA_PRINCd=002
or DIA_UNOd =002
or DIA_DUEd =002
or DIA_TREd =002
or DIA_QUATTROd=002
or DIA_CINQUEd=002
--------------------
---------------------
or DIA_PRINCd=142
or DIA_UNOd=142
or DIA_DUEd=142
or DIA_TREd=142
or DIA_QUATTROd=142
or DIA_CINQUEd=142
;
跑;
我可以知道如何在 SAS 中使用循环来解决此问题吗?
看起来正在测试同一组变量以用于各种诊断代码,例如001
、002
、...142
作为子集if
的标准。
or
运算符意味着,如果单个子句为真,则应出现该子集。
您可以为DIA_*
创建一个变量数组,并循环要测试的代码。 在循环中,WHICHN
函数调用会告诉您数组中的任何变量是否与代码匹配。 如果诊断值实际上是字符类型"001"
,请使用WHICHC
。
例:
array diagnoses dia_:;
found = 0;
do code = 001, 002, ..., 142; /* list of codes to check */
found = whichn(code, of diagnoses(*)); /* check if present */
if found then leave; /* stop checking at earliest find */
end;
if found; /* subsetting if. At least one of the variables matched one of the codes */
WHICHN
和WHICHC
函数隐式循环传递给它的值(即来自of array-name(*)
中变量的值)