If statement IF-THEN语句中的多个条件/变量

If statement IF-THEN语句中的多个条件/变量,if-statement,sas,If Statement,Sas,我有一个数据集,它有两个变量,我正试图从中创建新的组。第一个变量是宗教性,第二个变量是反宗教性,两者都是数值变量。我正在尝试创建一个小组,将其分为9个小组,具有低/中/高宗教性和低/中/高反宗教性 DATA LYING1; SET LYING; IF RELIGIOSITY = (1 OR 2) AND Av_anti <=3 THEN Rel_Anti = "LowR,LowA"; IF RELIGIOSITY = (1 OR 2) AND Av_anti (>3

我有一个数据集,它有两个变量,我正试图从中创建新的组。第一个变量是宗教性,第二个变量是反宗教性,两者都是数值变量。我正在尝试创建一个小组,将其分为9个小组,具有低/中/高宗教性和低/中/高反宗教性

DATA LYING1;
SET LYING;
    IF RELIGIOSITY = (1 OR 2) AND Av_anti <=3 THEN Rel_Anti = "LowR,LowA";
    IF RELIGIOSITY = (1 OR 2) AND Av_anti (>3 AND <=7) THEN Rel_Anti = "LowR,MidA";
    IF RELIGIOSITY = (1 OR 2) AND Av_anti >7 THEN Rel_Anti = "LowR,HighA";
    IF RELIGIOSITY = (3 OR 4 OR 5) AND Av_anti <=3 THEN Rel_Anti = "MidR,LowA";
    IF RELIGIOSITY = (3 OR 4 OR 5) AND Av_anti (>3 AND <=7) THEN Rel_Anti = "MidR,MidA";
    IF RELIGIOSITY = (3 OR 4 OR 5) AND Av_anti >7 THEN Rel_Anti = "MidR,HighA";
    IF RELIGIOSITY = (6 OR 7) AND Av_anti <=3 THEN Rel_Anti = "HighR,LowA";
    IF RELIGIOSITY = (6 OR 7) AND Av_anti (>3 AND <=7) THEN Rel_Anti = "HighR,MidA";
    IF RELIGIOSITY = (6 OR 7) AND Av_anti >7 THEN Rel_Anti = "HighR,HighA";
    ELSE Rel_Anti = "Error";
RUN;

问题是,我已经检查了这个变量,它的拼写正确,并且在被调用的数据集中列出了它。我不知道SAS为什么不把它当作变量?我似乎在逻辑运算符方面也遇到了一些问题>,您的比较/范围中的SAS语法无效。 您应该使用IN运算符检查是否包含在值列表中,然后将每个变量与每次比较的边界进行比较。i、 e.不是 不是:

但是:

或:

以下几点应该行得通。我还认为您打算使用else if而不是all if,否则您的最后一个条件会将all设置为Error或LowR/MidA

DATA LYING1;
SET LYING;
    IF RELIGIOSITY in (1, 2) AND Av_anti <=3 THEN Rel_Anti = "LowR,LowA";
    ELSE IF RELIGIOSITY in  (1, 2) AND (Av_anti >3 AND AV_anti<=7) THEN Rel_Anti = "LowR,MidA";
    ...
    ELSE Rel_Anti = "Error";
RUN;
更好的解决方案可能是:

Data lying1;
    set lying;
    IF RELIGIOSITY in (1, 2) then P1='LowR';
    else IF RELIGIOSITY in (3, 4, 5) then P1='MidR';
    else IF RELIGIOSITY in (6,7) then P1='HighR';
    else P1='Error';

    if av_anti<=3 then P2='LowA';
    else if  3<av_anti<=7 then P2='MidA';
    else if AV_Anti>7 then 'HighA';
    else P2='Error';

    Rel_Anti=catx(",", P1, P2);
run;

比较/范围中的SAS语法无效。 您应该使用IN运算符检查是否包含在值列表中,然后将每个变量与每次比较的边界进行比较。i、 e.不是 不是:

但是:

或:

以下几点应该行得通。我还认为您打算使用else if而不是all if,否则您的最后一个条件会将all设置为Error或LowR/MidA

DATA LYING1;
SET LYING;
    IF RELIGIOSITY in (1, 2) AND Av_anti <=3 THEN Rel_Anti = "LowR,LowA";
    ELSE IF RELIGIOSITY in  (1, 2) AND (Av_anti >3 AND AV_anti<=7) THEN Rel_Anti = "LowR,MidA";
    ...
    ELSE Rel_Anti = "Error";
RUN;
更好的解决方案可能是:

Data lying1;
    set lying;
    IF RELIGIOSITY in (1, 2) then P1='LowR';
    else IF RELIGIOSITY in (3, 4, 5) then P1='MidR';
    else IF RELIGIOSITY in (6,7) then P1='HighR';
    else P1='Error';

    if av_anti<=3 then P2='LowA';
    else if  3<av_anti<=7 then P2='MidA';
    else if AV_Anti>7 then 'HighA';
    else P2='Error';

    Rel_Anti=catx(",", P1, P2);
run;
DATA LYING1;
SET LYING;
    IF RELIGIOSITY in (1, 2) AND Av_anti <=3 THEN Rel_Anti = "LowR,LowA";
    ELSE IF RELIGIOSITY in  (1, 2) AND (Av_anti >3 AND AV_anti<=7) THEN Rel_Anti = "LowR,MidA";
    ...
    ELSE Rel_Anti = "Error";
RUN;
Data lying1;
    set lying;
    IF RELIGIOSITY in (1, 2) then P1='LowR';
    else IF RELIGIOSITY in (3, 4, 5) then P1='MidR';
    else IF RELIGIOSITY in (6,7) then P1='HighR';
    else P1='Error';

    if av_anti<=3 then P2='LowA';
    else if  3<av_anti<=7 then P2='MidA';
    else if AV_Anti>7 then 'HighA';
    else P2='Error';

    Rel_Anti=catx(",", P1, P2);
run;