Как использовать l oop в следующей задаче? - PullRequest
2 голосов
/ 16 февраля 2020

Я хочу l oop через некоторые переменные и создать девять новых переменных, которые равны 1, если первые три переменные равны «433» или «434». Я использую следующий код, но он показывает 1 для всего, может кто-то помочь

data icd_dim;
set asg3;
array icd (9) $ ICD9_DGNS_CD_1-ICD9_DGNS_CD_9;
array flag_icd (9) flag_icd_1-flag_icd_9;
do i = 1 to 9;
if icd(i)=substr(icd(i),1,3)="433" OR "434" then flag_icd(i)=1; end;
run;

Ответы [ 2 ]

1 голос
/ 16 февраля 2020

Оператор in: является оператором сравнения префиксов для символьных значений. Вам также может понадобиться имя переменной флага, которое будет более наглядным для диагноза.

occlusion_flag(i) = icd(i) in: ('433', '434');
1 голос
/ 16 февраля 2020

Вы ищете оператор IN для сравнения одного значения со списком значений. Ваш текущий код проверяет, является ли "433" True или False. Поскольку оно не пустое, оно рассматривается как True.

Вы хотите:

if substr(icd(i),1,3) in ("433" "434") then flag_icd(i)=1; 

Или для устранения пропущенных значений просто присвойте результат теста переменной и получите либо 1 (true) или 0 (false).

flag_icd(i) =  substr(icd(i),1,3) in ("433" "434") ;
...