Macros 在SAS数据步骤中有条件地选择数据集
我想根据具体情况在两个数据集之间进行选择。我认为正确的要么进入错误的状态,要么我进入无限循环。我想在宏中完成所有这些,并在条件为真时离开循环Macros 在SAS数据步骤中有条件地选择数据集,macros,do-loops,Macros,Do Loops,我想根据具体情况在两个数据集之间进行选择。我认为正确的要么进入错误的状态,要么我进入无限循环。我想在宏中完成所有这些,并在条件为真时离开循环 %MACRO M; %DO %UNTIL (ICU_LAST=FALSE); /* REMOVE ANY "LAST" RECORDS THAT ARE IN ICU AS THEY WILL NOT HAVE A LLOC ASSOCIATED WITH THEM */ DATA LAST_TEST1; FALSE = 0
%MACRO M;
%DO %UNTIL (ICU_LAST=FALSE);
/* REMOVE ANY "LAST" RECORDS THAT ARE IN ICU AS THEY WILL NOT HAVE A LLOC ASSOCIATED WITH THEM */
DATA LAST_TEST1;
FALSE = 0;
TRUE = 1;
FORMAT SEEN 8.;
RETAIN SEEN;
RETAIN RECNO;
IF SEEN=. THEN SEEN = FALSE;
IF SEEN = FALSE THEN
DO;
SET TESTTABLE_ENUMERATE END = LAST;
SEEN = TRUE;
END;
ELSE
SET RM_LAST_ICU END = LAST;
IF LAST THEN
ENDRECNO = 'LAST';
RUN;
/* IF THE LAST RECORD FOR EACH ACCOUNT IS AN ICU UNIT THEN DELETE IT AS THERE WILL BE NO ORDER OR ADMIT DATES ASSOCIATED WITH IT */
DATA RM_LAST_ICU;
FORMAT ICU_LAST 8.;
IF ICU_LAST = . THEN ICU_LAST = FALSE;
SET LAST_TEST1;
IF LOCATIONNURSEUNITCODEDESC IN (&ICU_LIST.) AND ENDRECNO = 'LAST' THEN
DO;
DELETE;
ICU_LAST = TRUE;
END;
ELSE
ICU_LAST = FALSE;
RUN;
%END;
%MEND;
%M;
如何将数据值转换为宏变量,以便宏逻辑可以测试它们?目前,您已经编写了一个无限循环,因为一个以大写字母开头的字符串i永远不能等于一个以大写字母f开头的字符串。不确定您的意思是什么,Tom,以“i”开头的字符串在哪里?我在哪里设置它等于“f”?换句话说,如果我在宏中循环一次,然后使用第一个数据集并将seen gets设置为true,然后在后续循环中使用第二个数据集问题的一部分是我调用(设置)一个尚未创建的数据集,即RM_LAST_Iu,因此在运行时,当它尝试处理代码时,它正在寻找RM_LAST_ICU数据集,该数据集在以下数据步骤之前不会被创建。我解决了我的问题。。。我在宏外部创建了一个同名的空表(RM_LAST_ICU),然后调用宏proc sql;proc-sql;创建表rm_last_icu(var1,var2,…varn);退出只有当七个字符的常量字符串
ICU\u TEST
等于五个字符的常量字符串FALSE
时,%DO循环才会停止。这显然是不可能的。