If statement 在SAS中使用if-between-else

If statement 在SAS中使用if-between-else,if-statement,sas,If Statement,Sas,我正在尝试使用AGE创建两个新变量(AGEGRP和AGEGRP2)。年龄变量包括数字年龄,我想将其划分为不同的范围 这是我的密码: DATA MYTEST; SET test; if (AGE < 18) then AGEGRP = '<18'; if (18 <= AGE < 65) then AGEGRP = '>=18 to <65'; else if (AGE >= 65) then AGEGRP = '>=65'; if (AGE

我正在尝试使用AGE创建两个新变量(AGEGRP和AGEGRP2)。年龄变量包括数字年龄,我想将其划分为不同的范围

这是我的密码:

DATA MYTEST; 
SET test; 
if (AGE < 18) then AGEGRP = '<18';
if (18 <= AGE < 65) then AGEGRP = '>=18 to <65'; 
else if (AGE >= 65) then AGEGRP = '>=65';
if (AGE < 2) then AGEGRP2 = '<2';
if (2 <= AGE < 12) then AGEGRP2 = '>=2 to <12'; 
if (12 <= AGE < 18) then AGEGRP2 = '>=12 to <18';
else if (AGE >= 18) then AGEGRP2 = '<=18';
RUN; 
PROC PRINT DATA = MYTEST; 
RUN; 
datamytest;
集合测试;
如果(年龄<18岁),则AGEGRP='=18至=65';

如果(年龄<2),那么AGEGRP2='=2到=12到您的问题在于if/ELSE if。你没有把他们正确地锁在一起

if (AGE < 18) then AGEGRP = '<18'; * Codes less than 18;

*codes 18 to 65;
if (18 <= AGE < 65) then AGEGRP = '>=18 to <65'; 

*anything else (including < 18) is recoded;
else if (AGE >= 65) then AGEGRP = '>=65';
如果(年龄<18岁),则AGEGRP='=18至=65';
这应该对你有用

if (AGE < 18) then AGEGRP = '<18'; * Codes less than 18;

*codes 18 to 65;
else if (18 <= AGE < 65) then AGEGRP = '>=18 to <65'; 

*anything else (including < 18) is recoded;
else if (AGE >= 65) then AGEGRP = '>=65';
如果(年龄<18岁),则AGEGRP='=18至=65';

您的问题在于IF/ELSE IF。你没有把他们正确地锁在一起

if (AGE < 18) then AGEGRP = '<18'; * Codes less than 18;

*codes 18 to 65;
if (18 <= AGE < 65) then AGEGRP = '>=18 to <65'; 

*anything else (including < 18) is recoded;
else if (AGE >= 65) then AGEGRP = '>=65';
如果(年龄<18岁),则AGEGRP='=18至=65';
这应该对你有用

if (AGE < 18) then AGEGRP = '<18'; * Codes less than 18;

*codes 18 to 65;
else if (18 <= AGE < 65) then AGEGRP = '>=18 to <65'; 

*anything else (including < 18) is recoded;
else if (AGE >= 65) then AGEGRP = '>=65';
如果(年龄<18岁),则AGEGRP='=18至=65';

如果没有包含所有的
ELSE
,那么最后一个ELSE子句将覆盖前面If语句的结果。如果。。。然后。。。;否则如果。。。然后。。。;否则

确保在使用变量之前定义它们。否则,SAS将根据它们首次使用的方式猜测如何定义它们。在您的示例中,AGEGRP的长度为$3,AGEGRP2的长度为$2

在开始IF级联之前添加此行

length AGEGRP AGEGRP2 $11;

如果未包含所有的
ELSE
,则最后一个ELSE子句将覆盖前面If语句的结果。如果。。。然后。。。;否则如果。。。然后。。。;否则

确保在使用变量之前定义它们。否则,SAS将根据它们首次使用的方式猜测如何定义它们。在您的示例中,AGEGRP的长度为$3,AGEGRP2的长度为$2

在开始IF级联之前添加此行

length AGEGRP AGEGRP2 $11;

否问题是错误地使用if和else if。在最后一个
else if
中,为什么逻辑条件
年龄>=18
映射到
'否问题是错误地使用if和else if。在最后一个
else if
中,为什么逻辑条件
年龄>=18
映射到
'谢谢您的回答。使用您的方法,我让AGEGRP工作,但没有AGEGRP2。对于第二组if/else if,我需要添加什么吗?对第二组执行相同的操作。@Tom我执行了相同的操作,并将所有非第一组if更改为else if,但对于AGEGRP2,我仍然获得了所有'>='。在定义为长度$2的字符变量中,不能容纳超过2个字符。确保在使用变量之前定义它们。否则,SA必须根据它们首次使用的方式猜测如何定义它们。在本例中,将值设置为长度为2的字符串。谢谢您的回答。使用您的方法,我让AGEGRP工作,但没有AGEGRP2。对于第二组if/else if,我需要添加什么吗?对第二组执行相同的操作。@Tom我执行了相同的操作,并将所有非第一组if更改为else if,但对于AGEGRP2,我仍然获得了所有'>='。在定义为长度$2的字符变量中,不能容纳超过2个字符。确保在使用变量之前定义它们。否则,SA必须根据它们首次使用的方式猜测如何定义它们。在本例中,通过将值设置为长度为2的字符串。