Я пытаюсь отличить зарегистрированных субъектов, у которых подтверждена гипертония, но они не знают о своем статусе, и у которых нет гипертонии. Мой текущий код отображает только bpstatus 1 и 2, но мне не хватает bpstatus 3 для отображения. АГ= (1=гипертония) (0=нет гипертонии)... НАО(1=знаю о гипертонии) (2=не знаю о гипертонии)
data new
set mergedata;
HTN=.;
If SBP >= 140 or DBP >= 90 then HTN = 1;
else if 0 < SBP < 140 and 0 < DBP < 90 then HTN = 0;
run;
proc print data=new;
run;
data new2;
set new;
BPSTATUS=.;
*3-level variable BPSTASTUS;
*diagnosed first;
if HTN=1 or HAE2=1 then BPSTATUS=1;
*undiagnosed;
if HTN=1 and HAE2=2 then BPSTATUS=2;
*normal;
if HTN=2 and HAE2=2 then BPSTATUS=3;
run;
proc print data=new2;
run;
proc freq data=new2;
table bpstatus;
run;
---------
BPSTATUS
Freq % Cum Freq Cum %
1 2354 67.76 2354 67.76
2 1120 32.24 3474 100.00
Frequency Missing = 4424
В этом коде:
data new
set mergedata;
HTN=.;
If SBP >= 140 or DBP >= 90 then HTN = 1;
else if 0 < SBP < 140 and 0 < DBP < 90 then HTN = 0;
run;
Вы инициализируете HTN
отсутствующим, а затем устанавливаете его либо в 1, либо в 0 в зависимости от некоторых условий. В последующем коде вы проверяете это:
if HTN=2 and HAE2=2 then BPSTATUS=3;
Основываясь на логике вашей первой программы, HTN
никогда не будет равно 2, а это значит, что BPSTATUS
никогда не будет равно 3.
Проверьте свои данные. Есть ли пациенты с АГ = 2 и НАО2 = 2? Если нет, то то, что вы видите, верно.