Использование if между остальными в SAS - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь создать 2 новые переменные (AGEGRP и AGEGRP2), используя AGE.Переменная AGE включает числовые возрасты, которые я хотел бы включить в диапазоны.

Вот мой код:

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; 

Это дает следующее:

AGE     AGEGRP         AGEGRP2
 5       <18             >=
 15      <18             >=
 20      >=18 to <65     >=
 1       <18             >=
 80      >=65            >=

Я подозреваю, что что-то не так с моими операторами между (<= __ <),Как я могу получить правильные диапазоны AGEGRP2?</p>

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Если вы не включите все ELSE, то последнее предложение else перезаписывает результаты предыдущих операторов IF.ЕСЛИ ... ТО ...;Иначе, если ... потом ...;ELSE ...;

Обязательно определите свои переменные перед их использованием.В противном случае SAS догадается, как определить их, основываясь на том, как они впервые используются.В вашем примере AGEGRP будет иметь длину $ 3, а AGEGRP2 будет иметь длину $ 2.

Добавьте эту строку перед запуском каскадов IF.

length AGEGRP AGEGRP2 $11;
0 голосов
/ 07 декабря 2018

Ваши проблемы с 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';

Это должно работать для вас.

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';
...