I need help to calculate these 2 flags value.
Flag1 = first day of 3 consecutive days with observed severity “None”. A “Missing” grade in the middle of “None” grades disrupts the sequence and the count starts over at the next “None”. If never any symptoms on-study, or never 3 consecutive days with “None” after a grade > 0, set to 998.
Flag2 = If a symptom was reported with grade > “None”, set to last day a symptom was reported before 3 consecutive “None” days. If no symptom before end of diary, set to "No value".
SUBJECT | covday | SYCD | SYSEV | Flag1 | Flag2 |
715307978 | 0 | ABD | None | ||
715307978 | 1 | ABD | None | ||
715307978 | 2 | ABD | None | ||
715307978 | 3 | ABD | Mild | Y | |
715307978 | 4 | ABD | None | Y | |
715307978 | 5 | ABD | None | ||
715307978 | 6 | ABD | None | ||
715307978 | 7 | ABD | None | ||
715307978 | 8 | ABD | None | ||
715307978 | 9 | ABD | None | ||
715307978 | 0 | ANOSMIA | None | ||
715307978 | 1 | ANOSMIA | None | ||
715307978 | 2 | ANOSMIA | None | ||
715307978 | 3 | ANOSMIA | None | ||
715307978 | 4 | ANOSMIA | Mild | Y | |
715307978 | 5 | ANOSMIA | None | Y | |
715307978 | 6 | ANOSMIA | None | ||
715307978 | 7 | ANOSMIA | None | ||
715307978 | 8 | ANOSMIA | None | ||
715307978 | 9 | ANOSMIA | None | ||
715307978 | 0 | SOB | None | ||
715307978 | 1 | SOB | None | ||
715307978 | 2 | SOB | None | ||
715307978 | 3 | SOB | None | ||
715307978 | 4 | SOB | None | ||
715307978 | 5 | SOB | None | ||
715307978 | 6 | SOB | None | ||
715307978 | 7 | SOB | None | ||
715307978 | 8 | SOB | None | ||
715307978 | 9 | SOB | None |
OK . You want this ?
data have; infile datalines4 dlm='|' truncover dsd; input subject : $9. covday : best32. sycd : $7. sysev : $4. flag1 : $1. flag2 : $1.; datalines4; 715307978|0|ABD|None| | 715307978|1|ABD|None| | 715307978|2|ABD|None| | 715307978|3|ABD|Mild| |Y 715307978|4|ABD|None|Y| 715307978|5|ABD|None| | 715307978|6|ABD|None| | 715307978|7|ABD|None| | 715307978|8|ABD|None| | 715307978|9|ABD|None| | 715307978|0|ANOSMIA|None| | 715307978|1|ANOSMIA|None| | 715307978|2|ANOSMIA|None| | 715307978|3|ANOSMIA|None| | 715307978|4|ANOSMIA|Mild| |Y 715307978|5|ANOSMIA|None|Y| 715307978|6|ANOSMIA|None| | 715307978|7|ANOSMIA|None| | 715307978|8|ANOSMIA|None| | 715307978|9|ANOSMIA|None| | 715307978|10|ANOSMIA|Mild| |Y 715307978|11|ANOSMIA|None|Y| 715307978|12|ANOSMIA|None| | 715307978|13|ANOSMIA|None| | 715307978|0|SOB|None| | 715307978|1|SOB|None| | 715307978|2|SOB|None| | 715307978|3|SOB|None| | 715307978|4|SOB|None| | 715307978|5|SOB|None| | 715307978|6|SOB|None| | 715307978|7|SOB|None| | 715307978|8|SOB|None| | 715307978|9|SOB|None| | ;;;; data _have; n=0; do until(last.sysev); set have; by subject sycd sysev notsorted; n+1; if last.sycd then last_group=1; end; do until(last.sysev); set have; by subject sycd sysev notsorted; output; end; run; data want; merge _have _have(keep=subject sycd sysev n last_group rename=(subject=_s sycd=_c sysev=_sev n=_n last_group=_last_group) firstobs=2); if subject=lag(subject) and sysev='None' and lag(sysev) ne 'None' and n>2 and last_group then new_flag1='Y'; if subject=_s and sycd=_c and _sev='None' and sysev ne 'None' and _n>2 and _last_group then new_flag2='Y'; drop _: n last_group; run;
Please provide sample data that covers all the cases you describe. This will help to avoid misunderstandings.
Flag1 = first day of 3 consecutive days with observed severity “None”. A “Missing” grade in the middle of “None” grades disrupts the sequence and the count starts over at the next “None”. If never any symptoms on-study, or never 3 consecutive days with “None” after a grade > 0, set to 998.
Please also provide sample data as a working SAS data step as done below for the data you already posted.
data have;
infile datalines4
dlm='|'
truncover
dsd;
input
subject : $9.
covday : best32.
sycd : $7.
sysev : $4.
flag1 : $1.
flag2 : $1.;
datalines4;
715307978|0|ABD|None| |
715307978|1|ABD|None| |
715307978|2|ABD|None| |
715307978|3|ABD|Mild| |Y
715307978|4|ABD|None|Y|
715307978|5|ABD|None| |
715307978|6|ABD|None| |
715307978|7|ABD|None| |
715307978|8|ABD|None| |
715307978|9|ABD|None| |
715307978|0|ANOSMIA|None| |
715307978|1|ANOSMIA|None| |
715307978|2|ANOSMIA|None| |
715307978|3|ANOSMIA|None| |
715307978|4|ANOSMIA|Mild| |Y
715307978|5|ANOSMIA|None|Y|
715307978|6|ANOSMIA|None| |
715307978|7|ANOSMIA|None| |
715307978|8|ANOSMIA|None| |
715307978|9|ANOSMIA|None| |
715307978|0|SOB|None| |
715307978|1|SOB|None| |
715307978|2|SOB|None| |
715307978|3|SOB|None| |
715307978|4|SOB|None| |
715307978|5|SOB|None| |
715307978|6|SOB|None| |
715307978|7|SOB|None| |
715307978|8|SOB|None| |
715307978|9|SOB|None| |
;;;;
Thank you @Patrick and @Reeza.
In datset below, I need one observation per subject*symptom where
R_T1 = first day of 3 consecutive days with observed severity “None”. A “Missing” grade in the middle of “None” grades disrupts the sequence and the count starts over at the next “None”. If never any symptoms on-study, or never 3 consecutive days with “None” after a grade > 0, set to 998.
For example below, for sycd ABD, I need covday 15 as R_T1, for sycd ANOSMIA covday 17, for COUGH covday 17, and for SOB since there is never 3 consecutive none after Severe so I need value 998.
R_T0 = If a symptom was reported with grade > “None”, set to last day a symptom was reported in [0, R_T1] before 3 consecutive “None” days. If no symptom before end of diary, set to 998.
For example below, for sycd ABD, I need covday 14 as R_T1, for sycd ANOSMIA covday 15, for COUGH covday 18, and for SOB since there is never 3 consecutive none after Severe so I need value 998.
data have;
infile datalines4
dlm='|'
truncover
dsd;
input
subject : $9.
covday : best32.
sycd : $7.
sysev : $8.
sysevn : 1.;
datalines4;
775575874|0|ABD|None|0
775575874|1|ABD|None|0
775575874|2|ABD|None|0
775575874|3|ABD|None|0
775575874|4|ABD|None|0
775575874|5|ABD|None|0
775575874|6|ABD|None|0
775575874|7|ABD|None|0
775575874|8|ABD|None|0
775575874|9|ABD|None|0
775575874|10|ABD|None|0
775575874|11|ABD|None|0
775575874|12|ABD|None|0
775575874|13|ABD|None|0
775575874|14|ABD|Mild|1
775575874|15|ABD|None|0
775575874|16|ABD|None|0
775575874|17|ABD|None|0
775575874|18|ABD|None|0
775575874|19|ABD|None|0
775575874|20|ABD|None|0
775575874|0|ANOSMIA|None|0
775575874|1|ANOSMIA|None|0
775575874|2|ANOSMIA|None|0
775575874|3|ANOSMIA|None|0
775575874|4|ANOSMIA|None|0
775575874|5|ANOSMIA|None|0
775575874|6|ANOSMIA|None|0
775575874|7|ANOSMIA| |.
775575874|8|ANOSMIA|None|0
775575874|9|ANOSMIA|None|0
775575874|10|ANOSMIA|None|0
775575874|11|ANOSMIA|None|0
775575874|12|ANOSMIA|None|0
775575874|13|ANOSMIA|None|0
775575874|14|ANOSMIA| |.
775575874|15|ANOSMIA|Mild|1
775575874|16|ANOSMIA| |.
775575874|17|ANOSMIA|None|0
775575874|18|ANOSMIA|None|0
775575874|19|ANOSMIA|None|0
775575874|20|ANOSMIA|None|0
775575874|0|COUGH|None|0
775575874|1|COUGH|None|0
775575874|2|COUGH|None|0
775575874|3|COUGH|None|0
775575874|4|COUGH|None|0
775575874|5|COUGH|None|0
775575874|6|COUGH|None|0
775575874|7|COUGH|None|0
775575874|8|COUGH|None|0
775575874|9|COUGH|Mild|1
775575874|10|COUGH|Mild|1
775575874|11|COUGH|Mild|1
775575874|12|COUGH|Mild|1
775575874|13|COUGH|Mild|1
775575874|14|COUGH| |.
775575874|15|COUGH|Moderate|2
775575874|16|COUGH| |.
775575874|17|COUGH|Severe|3
775575874|18|COUGH|None|0
775575874|19|COUGH|None|0
775575874|20|COUGH|None|0
775575874|0|SOB|None|0
775575874|1|SOB|None|0
775575874|2|SOB|None|0
775575874|3|SOB|None|0
775575874|4|SOB|None|0
775575874|5|SOB|None|0
775575874|6|SOB|None|0
775575874|7|SOB|None|0
775575874|8|SOB|None|0
775575874|9|SOB|None|0
775575874|10|SOB|Mild|1
775575874|11|SOB|None|0
775575874|12|SOB|Mild|1
775575874|13|SOB|Mild|1
775575874|14|SOB| |.
775575874|15|SOB|Moderate|2
775575874|16|SOB| |.
775575874|17|SOB| |.
775575874|18|SOB|Moderate|2
775575874|19|SOB| |.
775575874|20|SOB|Severe|3
;;;;
data have;
infile datalines4
dlm='|'
truncover
dsd;
input
subject : $9.
covday : best32.
sycd : $7.
sysev : $8.
sysevn : 1.;
datalines4;
775575874|0|ABD|None|0
775575874|1|ABD|None|0
775575874|2|ABD|None|0
775575874|3|ABD|None|0
775575874|4|ABD|None|0
775575874|5|ABD|None|0
775575874|6|ABD|None|0
775575874|7|ABD|None|0
775575874|8|ABD|None|0
775575874|9|ABD|None|0
775575874|10|ABD|None|0
775575874|11|ABD|None|0
775575874|12|ABD|None|0
775575874|13|ABD|None|0
775575874|14|ABD|Mild|1
775575874|15|ABD|None|0
775575874|16|ABD|None|0
775575874|17|ABD|None|0
775575874|18|ABD|None|0
775575874|19|ABD|None|0
775575874|20|ABD|None|0
775575874|0|ANOSMIA|None|0
775575874|1|ANOSMIA|None|0
775575874|2|ANOSMIA|None|0
775575874|3|ANOSMIA|None|0
775575874|4|ANOSMIA|None|0
775575874|5|ANOSMIA|None|0
775575874|6|ANOSMIA|None|0
775575874|7|ANOSMIA| |.
775575874|8|ANOSMIA|None|0
775575874|9|ANOSMIA|None|0
775575874|10|ANOSMIA|None|0
775575874|11|ANOSMIA|None|0
775575874|12|ANOSMIA|None|0
775575874|13|ANOSMIA|None|0
775575874|14|ANOSMIA| |.
775575874|15|ANOSMIA|Mild|1
775575874|16|ANOSMIA| |.
775575874|17|ANOSMIA|None|0
775575874|18|ANOSMIA|None|0
775575874|19|ANOSMIA|None|0
775575874|20|ANOSMIA|None|0
775575874|0|COUGH|None|0
775575874|1|COUGH|None|0
775575874|2|COUGH|None|0
775575874|3|COUGH|None|0
775575874|4|COUGH|None|0
775575874|5|COUGH|None|0
775575874|6|COUGH|None|0
775575874|7|COUGH|None|0
775575874|8|COUGH|None|0
775575874|9|COUGH|Mild|1
775575874|10|COUGH|Mild|1
775575874|11|COUGH|Mild|1
775575874|12|COUGH|Mild|1
775575874|13|COUGH|Mild|1
775575874|14|COUGH| |.
775575874|15|COUGH|Moderate|2
775575874|16|COUGH| |.
775575874|17|COUGH|Severe|3
775575874|18|COUGH|None|0
775575874|19|COUGH|None|0
775575874|20|COUGH|None|0
775575874|0|SOB|None|0
775575874|1|SOB|None|0
775575874|2|SOB|None|0
775575874|3|SOB|None|0
775575874|4|SOB|None|0
775575874|5|SOB|None|0
775575874|6|SOB|None|0
775575874|7|SOB|None|0
775575874|8|SOB|None|0
775575874|9|SOB|None|0
775575874|10|SOB|Mild|1
775575874|11|SOB|None|0
775575874|12|SOB|Mild|1
775575874|13|SOB|Mild|1
775575874|14|SOB| |.
775575874|15|SOB|Moderate|2
775575874|16|SOB| |.
775575874|17|SOB| |.
775575874|18|SOB|Moderate|2
775575874|19|SOB| |.
775575874|20|SOB|Severe|3
;;;;
data have;
infile datalines4
dlm='|'
truncover
dsd;
input
subject : $9.
covday : best32.
sycd : $7.
sysev : $8.
sysevn : 1.;
datalines4;
775575874|0|ABD|None|0
775575874|1|ABD|None|0
775575874|2|ABD|None|0
775575874|3|ABD|None|0
775575874|4|ABD|None|0
775575874|5|ABD|None|0
775575874|6|ABD|None|0
775575874|7|ABD|None|0
775575874|8|ABD|None|0
775575874|9|ABD|None|0
775575874|10|ABD|None|0
775575874|11|ABD|None|0
775575874|12|ABD|None|0
775575874|13|ABD|None|0
775575874|14|ABD|Mild|1
775575874|15|ABD|None|0
775575874|16|ABD|None|0
775575874|17|ABD|None|0
775575874|18|ABD|None|0
775575874|19|ABD|None|0
775575874|20|ABD|None|0
775575874|0|ANOSMIA|None|0
775575874|1|ANOSMIA|None|0
775575874|2|ANOSMIA|None|0
775575874|3|ANOSMIA|None|0
775575874|4|ANOSMIA|None|0
775575874|5|ANOSMIA|None|0
775575874|6|ANOSMIA|None|0
775575874|7|ANOSMIA| |.
775575874|8|ANOSMIA|None|0
775575874|9|ANOSMIA|None|0
775575874|10|ANOSMIA|None|0
775575874|11|ANOSMIA|None|0
775575874|12|ANOSMIA|None|0
775575874|13|ANOSMIA|None|0
775575874|14|ANOSMIA| |.
775575874|15|ANOSMIA|Mild|1
775575874|16|ANOSMIA| |.
775575874|17|ANOSMIA|None|0
775575874|18|ANOSMIA|None|0
775575874|19|ANOSMIA|None|0
775575874|20|ANOSMIA|None|0
775575874|0|COUGH|None|0
775575874|1|COUGH|None|0
775575874|2|COUGH|None|0
775575874|3|COUGH|None|0
775575874|4|COUGH|None|0
775575874|5|COUGH|None|0
775575874|6|COUGH|None|0
775575874|7|COUGH|None|0
775575874|8|COUGH|None|0
775575874|9|COUGH|Mild|1
775575874|10|COUGH|Mild|1
775575874|11|COUGH|Mild|1
775575874|12|COUGH|Mild|1
775575874|13|COUGH|Mild|1
775575874|14|COUGH| |.
775575874|15|COUGH|Moderate|2
775575874|16|COUGH| |.
775575874|17|COUGH|Severe|3
775575874|18|COUGH|None|0
775575874|19|COUGH|None|0
775575874|20|COUGH|None|0
775575874|0|SOB|None|0
775575874|1|SOB|None|0
775575874|2|SOB|None|0
775575874|3|SOB|None|0
775575874|4|SOB|None|0
775575874|5|SOB|None|0
775575874|6|SOB|None|0
775575874|7|SOB|None|0
775575874|8|SOB|None|0
775575874|9|SOB|None|0
775575874|10|SOB|Mild|1
775575874|11|SOB|None|0
775575874|12|SOB|Mild|1
775575874|13|SOB|Mild|1
775575874|14|SOB| |.
775575874|15|SOB|Moderate|2
775575874|16|SOB| |.
775575874|17|SOB| |.
775575874|18|SOB|Moderate|2
775575874|19|SOB| |.
775575874|20|SOB|Severe|3
;;;;
data have;
infile datalines4
dlm='|'
truncover
dsd;
input
subject : $9.
covday : best32.
sycd : $7.
sysev : $8.
sysevn : 1.;
datalines4;
775575874|0|ABD|None|0
775575874|1|ABD|None|0
775575874|2|ABD|None|0
775575874|3|ABD|None|0
775575874|4|ABD|None|0
775575874|5|ABD|None|0
775575874|6|ABD|None|0
775575874|7|ABD|None|0
775575874|8|ABD|None|0
775575874|9|ABD|None|0
775575874|10|ABD|None|0
775575874|11|ABD|None|0
775575874|12|ABD|None|0
775575874|13|ABD|None|0
775575874|14|ABD|Mild|1
775575874|15|ABD|None|0
775575874|16|ABD|None|0
775575874|17|ABD|None|0
775575874|18|ABD|None|0
775575874|19|ABD|None|0
775575874|20|ABD|None|0
775575874|0|ANOSMIA|None|0
775575874|1|ANOSMIA|None|0
775575874|2|ANOSMIA|None|0
775575874|3|ANOSMIA|None|0
775575874|4|ANOSMIA|None|0
775575874|5|ANOSMIA|None|0
775575874|6|ANOSMIA|None|0
775575874|7|ANOSMIA| |.
775575874|8|ANOSMIA|None|0
775575874|9|ANOSMIA|None|0
775575874|10|ANOSMIA|None|0
775575874|11|ANOSMIA|None|0
775575874|12|ANOSMIA|None|0
775575874|13|ANOSMIA|None|0
775575874|14|ANOSMIA| |.
775575874|15|ANOSMIA|Mild|1
775575874|16|ANOSMIA| |.
775575874|17|ANOSMIA|None|0
775575874|18|ANOSMIA|None|0
775575874|19|ANOSMIA|None|0
775575874|20|ANOSMIA|None|0
775575874|0|COUGH|None|0
775575874|1|COUGH|None|0
775575874|2|COUGH|None|0
775575874|3|COUGH|None|0
775575874|4|COUGH|None|0
775575874|5|COUGH|None|0
775575874|6|COUGH|None|0
775575874|7|COUGH|None|0
775575874|8|COUGH|None|0
775575874|9|COUGH|Mild|1
775575874|10|COUGH|Mild|1
775575874|11|COUGH|Mild|1
775575874|12|COUGH|Mild|1
775575874|13|COUGH|Mild|1
775575874|14|COUGH| |.
775575874|15|COUGH|Moderate|2
775575874|16|COUGH| |.
775575874|17|COUGH|Severe|3
775575874|18|COUGH|None|0
775575874|19|COUGH|None|0
775575874|20|COUGH|None|0
775575874|0|SOB|None|0
775575874|1|SOB|None|0
775575874|2|SOB|None|0
775575874|3|SOB|None|0
775575874|4|SOB|None|0
775575874|5|SOB|None|0
775575874|6|SOB|None|0
775575874|7|SOB|None|0
775575874|8|SOB|None|0
775575874|9|SOB|None|0
775575874|10|SOB|Mild|1
775575874|11|SOB|None|0
775575874|12|SOB|Mild|1
775575874|13|SOB|Mild|1
775575874|14|SOB| |.
775575874|15|SOB|Moderate|2
775575874|16|SOB| |.
775575874|17|SOB| |.
775575874|18|SOB|Moderate|2
775575874|19|SOB| |.
775575874|20|SOB|Severe|3
;;;;
Assuming I understand your question.
data have;
infile datalines4
dlm='|'
truncover
dsd;
input
subject : $9.
covday : best32.
sycd : $7.
sysev : $4.
flag1 : $1.
flag2 : $1.;
datalines4;
715307978|0|ABD|None| |
715307978|1|ABD|None| |
715307978|2|ABD|None| |
715307978|3|ABD|Mild| |Y
715307978|4|ABD|None|Y|
715307978|5|ABD|None| |
715307978|6|ABD|None| |
715307978|7|ABD|None| |
715307978|8|ABD|None| |
715307978|9|ABD|None| |
715307978|0|ANOSMIA|None| |
715307978|1|ANOSMIA|None| |
715307978|2|ANOSMIA|None| |
715307978|3|ANOSMIA|None| |
715307978|4|ANOSMIA|Mild| |Y
715307978|5|ANOSMIA|None|Y|
715307978|6|ANOSMIA|None| |
715307978|7|ANOSMIA|None| |
715307978|8|ANOSMIA|None| |
715307978|9|ANOSMIA|None| |
715307978|0|SOB|None| |
715307978|1|SOB|None| |
715307978|2|SOB|None| |
715307978|3|SOB|None| |
715307978|4|SOB|None| |
715307978|5|SOB|None| |
715307978|6|SOB|None| |
715307978|7|SOB|None| |
715307978|8|SOB|None| |
715307978|9|SOB|None| |
;;;;
data want;
merge have have(keep=subject sycd sysev rename=(subject=_s sycd=_c sysev=_sev) firstobs=2);
if subject=lag(subject) and sysev='None' and lag(sysev) ne 'None' then new_flag1='Y';
if subject=_s and sycd=_c and _sev='None' and sysev ne 'None' then new_flag2='Y';
drop _:;
run;
Hi @Ksharp ,
I need one observation per subject*symptom where
R_T1 (Flag1) = first day of 3 consecutive days with observed severity “None”. A “Missing” grade in the middle of “None” grades disrupts the sequence and the count starts over at the next “None”. If never any symptoms on-study, or never 3 consecutive days with “None” after a grade > 0, set to 998.
For example below, for sycd ABD, I need covday 15 as R_T1, for sycd ANOSMIA covday 17, for COUGH covday 17, and for SOB since there is never 3 consecutive none after Severe so I need value 998.
R_T0 (Flag2)= If a symptom was reported with grade > “None”, set to last day a symptom was reported in [0, R_T1] before 3 consecutive “None” days. If no symptom before end of diary, set to 998.
For example below, for sycd ABD, I need covday 14 as R_T1, for sycd ANOSMIA covday 15, for COUGH covday 18, and for SOB since there is never 3 consecutive none after Severe so I need value 998.
Please check new dataset above that I posted.
Thank you for your help.
OK. My bad. You want "3 consecutive days with observed severity “None”. " . Try this :
data have; infile datalines4 dlm='|' truncover dsd; input subject : $9. covday : best32. sycd : $7. sysev : $4. flag1 : $1. flag2 : $1.; datalines4; 715307978|0|ABD|None| | 715307978|1|ABD|None| | 715307978|2|ABD|None| | 715307978|3|ABD|Mild| |Y 715307978|4|ABD|None|Y| 715307978|5|ABD|None| | 715307978|6|ABD|None| | 715307978|7|ABD|None| | 715307978|8|ABD|None| | 715307978|9|ABD|None| | 715307978|0|ANOSMIA|None| | 715307978|1|ANOSMIA|None| | 715307978|2|ANOSMIA|None| | 715307978|3|ANOSMIA|None| | 715307978|4|ANOSMIA|Mild| |Y 715307978|5|ANOSMIA|None|Y| 715307978|6|ANOSMIA|None| | 715307978|7|ANOSMIA|None| | 715307978|8|ANOSMIA|None| | 715307978|9|ANOSMIA|None| | 715307978|0|SOB|None| | 715307978|1|SOB|None| | 715307978|2|SOB|None| | 715307978|3|SOB|None| | 715307978|4|SOB|None| | 715307978|5|SOB|None| | 715307978|6|SOB|None| | 715307978|7|SOB|None| | 715307978|8|SOB|None| | 715307978|9|SOB|None| | ;;;; data _have; n=0; do until(last.sysev); set have; by subject sycd sysev notsorted; n+1; end; do until(last.sysev); set have; by subject sycd sysev notsorted; output; end; run; data want; merge _have _have(keep=subject sycd sysev n rename=(subject=_s sycd=_c sysev=_sev n=_n) firstobs=2); if subject=lag(subject) and sysev='None' and lag(sysev) ne 'None' and n>3 then new_flag1='Y'; if subject=_s and sycd=_c and _sev='None' and sysev ne 'None' and _n>3 then new_flag2='Y'; drop _: n; run;
Thank you @Ksharp. It is very helpful but I want "3 consecutive days with observed severity “None” after "Last Not-None (Missing, Mild, Moderate, or Severe)" severity.
@Aryyyan wrote:
Thank you @Ksharp. It is very helpful but I want "3 consecutive days with observed severity “None” after "Last Not-None (Missing, Mild, Moderate, or Severe)" severity.
As I noted a few days ago, that criteria is in your subject line but you weren't including it in your actual requirements.
OK . You want this ?
data have; infile datalines4 dlm='|' truncover dsd; input subject : $9. covday : best32. sycd : $7. sysev : $4. flag1 : $1. flag2 : $1.; datalines4; 715307978|0|ABD|None| | 715307978|1|ABD|None| | 715307978|2|ABD|None| | 715307978|3|ABD|Mild| |Y 715307978|4|ABD|None|Y| 715307978|5|ABD|None| | 715307978|6|ABD|None| | 715307978|7|ABD|None| | 715307978|8|ABD|None| | 715307978|9|ABD|None| | 715307978|0|ANOSMIA|None| | 715307978|1|ANOSMIA|None| | 715307978|2|ANOSMIA|None| | 715307978|3|ANOSMIA|None| | 715307978|4|ANOSMIA|Mild| |Y 715307978|5|ANOSMIA|None|Y| 715307978|6|ANOSMIA|None| | 715307978|7|ANOSMIA|None| | 715307978|8|ANOSMIA|None| | 715307978|9|ANOSMIA|None| | 715307978|10|ANOSMIA|Mild| |Y 715307978|11|ANOSMIA|None|Y| 715307978|12|ANOSMIA|None| | 715307978|13|ANOSMIA|None| | 715307978|0|SOB|None| | 715307978|1|SOB|None| | 715307978|2|SOB|None| | 715307978|3|SOB|None| | 715307978|4|SOB|None| | 715307978|5|SOB|None| | 715307978|6|SOB|None| | 715307978|7|SOB|None| | 715307978|8|SOB|None| | 715307978|9|SOB|None| | ;;;; data _have; n=0; do until(last.sysev); set have; by subject sycd sysev notsorted; n+1; if last.sycd then last_group=1; end; do until(last.sysev); set have; by subject sycd sysev notsorted; output; end; run; data want; merge _have _have(keep=subject sycd sysev n last_group rename=(subject=_s sycd=_c sysev=_sev n=_n last_group=_last_group) firstobs=2); if subject=lag(subject) and sysev='None' and lag(sysev) ne 'None' and n>2 and last_group then new_flag1='Y'; if subject=_s and sycd=_c and _sev='None' and sysev ne 'None' and _n>2 and _last_group then new_flag2='Y'; drop _: n last_group; run;
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.