Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macros 在SAS数据步骤中有条件地选择数据集_Macros_Do Loops - Fatal编程技术网

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循环才会停止。这显然是不可能的。