/* Variables created: Monthly College Event Histories SCH_COLLEGE_STATUS_YYYY.mm SCH_COLLEGE_TERM_YYYY.mm SCH_COLLEGE_DEGREE_YYYY.mm SCH_COLLEGE_ID_YYYY.mm */ ************************************************************************; /**Variable Names on the Gator Variable Names in the Program***; YSCH-27337.01_2021 DIPLOMAL1 YSCH-27337.02_2021 DIPLOMAL2 YSCH-27337.03_2021 DIPLOMAL3 YSCH-25552.01_2021 TYPEL1a YSCH-17400.01_2021 TERML1a YSCH-26419.01_2021 TYPEL1 YSCH-26419.02_2021 TYPEL2 YSCH-26980.01_2021 TERML1 YSCH-26980.02_2021 TERML2 YSCH-20400.01.01~M_2021 SEMML11 YSCH-20400.01.01~Y_2021 SEMYL11 YSCH-20400.01.02~M_2021 SEMML12 YSCH-20400.01.02~Y_2021 SEMYL12 YSCH-20400.01.03~M_2021 SEMML13 YSCH-20400.01.03~Y_2021 SEMYL13 YSCH-20400.01.04~M_2021 SEMML14 YSCH-20400.01.04~Y_2021 SEMYL14 YSCH-20400.01.05~M_2021 SEMML15 YSCH-20400.01.05~Y_2021 SEMYL15 YSCH-20400.01.06~M_2021 SEMML16 YSCH-20400.01.06~Y_2021 SEMYL16 YSCH-20400.01.07~M_2021 SEMML17 YSCH-20400.01.07~Y_2021 SEMYL17 YSCH-20400.01.08~M_2021 SEMML18 YSCH-20400.01.08~Y_2021 SEMYL18 YSCH-20400.01.09~M_2021 SEMML19 YSCH-20400.01.09~Y_2021 SEMYL19 YSCH-20400.01.10~M_2021 SEMML110 YSCH-20400.01.10~Y_2021 SEMYL110 YSCH-20400.01.11~M_2021 SEMML111 YSCH-20400.01.11~Y_2021 SEMYL111 YSCH-20400.01.12~M_2021 SEMML112 YSCH-20400.01.12~Y_2021 SEMYL112 YSCH-20400.02.01~M_2021 SEMML21 YSCH-20400.02.01~Y_2021 SEMYL21 YSCH-20400.02.02~M_2021 SEMML22 YSCH-20400.02.02~Y_2021 SEMYL22 YSCH-20400.02.03~M_2021 SEMML23 YSCH-20400.02.03~Y_2021 SEMYL23 YSCH-20400.02.04~M_2021 SEMML24 YSCH-20400.02.04~Y_2021 SEMYL24 YSCH-20400.02.05~M_2021 SEMML25 YSCH-20400.02.05~Y_2021 SEMYL25 YSCH-20400.02.06~M_2021 SEMML26 YSCH-20400.02.06~Y_2021 SEMYL26 YSCH-20400.02.07~M_2021 SEMML27 YSCH-20400.02.07~Y_2021 SEMYL27 YSCH-20400.02.08~M_2021 SEMML28 YSCH-20400.02.08~Y_2021 SEMYL28 YSCH-21800.01.01_2021 FullPart_L11 YSCH-21800.01.02_2021 FullPart_L12 YSCH-21800.01.03_2021 FullPart_L13 YSCH-21800.01.04_2021 FullPart_L14 YSCH-21800.01.05_2021 FullPart_L15 YSCH-21800.01.06_2021 FullPart_L16 YSCH-21800.01.07_2021 FullPart_L17 YSCH-21800.01.08_2021 FullPart_L18 YSCH-21800.01.09_2021 FullPart_L19 YSCH-21800.01.10_2021 FullPart_L110 YSCH-21800.01.11_2021 FullPart_L111 YSCH-21800.01.12_2021 FullPart_L112 YSCH-21800.02.01_2021 FullPart_L21 YSCH-21800.02.02_2021 FullPart_L22 YSCH-21800.02.03_2021 FullPart_L23 YSCH-21800.02.04_2021 FullPart_L24 YSCH-21800.02.05_2021 FullPart_L25 YSCH-21800.02.06_2021 FullPart_L26 YSCH-21800.02.07_2021 FullPart_L27 YSCH-21800.02.08_2021 FullPart_L28 NEWSCHOOL_SCHCODE.01_2021 CODE_L1 NEWSCHOOL_SCHCODE.02_2021 CODE_L2 NEWSCHOOL_SCHCODE.03_2021 CODE_L3 NEWSCHOOL_START1.01~M_2021 STARML11 NEWSCHOOL_START1.01~Y_2021 STARYL11 NEWSCHOOL_START1.02~M_2021 STARML21 NEWSCHOOL_START1.02~Y_2021 STARYL21 NEWSCHOOL_START1.03~M_2021 STARML31 NEWSCHOOL_START1.03~Y_2021 STARYL31 NEWSCHOOL_STOP1.01~M_2021 STOPML11 NEWSCHOOL_STOP1.01~Y_2021 STOPYL11 NEWSCHOOL_STOP1.02~M_2021 STOPML21 NEWSCHOOL_STOP1.02~Y_2021 STOPYL21 NEWSCHOOL_STOP1.03~M_2021 STOPML31 NEWSCHOOL_STOP1.03~Y_2021 STOPYL31 NEWSCHOOL_START2.01~M_2021 STARML12 NEWSCHOOL_START2.01~Y_2021 STARYL12 NEWSCHOOL_START2.02~M_2021 STARML22 NEWSCHOOL_START2.02~Y_2021 STARYL22 NEWSCHOOL_STOP2.01~M_2021 STOPML12 NEWSCHOOL_STOP2.01~Y_2021 STOPYL12 NEWSCHOOL_PERIODS.01_2021 PERIODL1 NEWSCHOOL_PERIODS.02_2021 PERIODL2 NEWSCHOOL_PERIODS.03_2021 PERIODL3 NEWSCHOOL_PUBID.01_2021 SCHID_L1 NEWSCHOOL_PUBID.02_2021 SCHID_L2 NEWSCHOOL_PUBID.03_2021 SCHID_L3 CV_INTERVIEW_CMONTH_1997 CMONTH_1997 CV_INTERVIEW_DATE_M_1997 INT1997_MO CV_INTERVIEW_DATE_Y_1997 INT1997_YR CV_INTERVIEW_CMONTH_1998 CMONTH_1998 CV_INTERVIEW_DATE~M_1998 INT1998_MO CV_INTERVIEW_DATE~Y_1998 INT1998_YR CV_INTERVIEW_CMONTH_1999 CMONTH_1999 CV_INTERVIEW_DATE~M_1999 INT1999_MO CV_INTERVIEW_DATE~Y_1999 INT1999_YR CV_INTERVIEW_CMONTH_2000 CMONTH_2000 CV_INTERVIEW_DATE~M_2000 INT2000_MO CV_INTERVIEW_DATE~Y_2000 INT2000_YR CV_INTERVIEW_CMONTH_2001 CMONTH_2001 CV_INTERVIEW_DATE~M_2001 INT2001_MO CV_INTERVIEW_DATE~Y_2001 INT2001_YR CV_INTERVIEW_CMONTH_2002 CMONTH_2002 CV_INTERVIEW_DATE~M_2002 Int2002_MO CV_INTERVIEW_DATE~Y_2002 Int2002_YR CV_INTERVIEW_CMONTH_2003 CMONTH_2003 CV_INTERVIEW_DATE~M_2003 Int2003_MO CV_INTERVIEW_DATE~Y_2003 Int2003_YR CV_INTERVIEW_CMONTH_2004 CMONTH_2004 CV_INTERVIEW_DATE~M_2004 Int2004_MO CV_INTERVIEW_DATE~Y_2004 Int2004_YR CV_INTERVIEW_CMONTH_2005 CMONTH_2005 CV_INTERVIEW_DATE~M_2005 Int2005_MO CV_INTERVIEW_DATE~Y_2005 Int2005_YR CV_INTERVIEW_CMONTH_2006 CMONTH_2006 CV_INTERVIEW_DATE~M_2006 Int2006_MO CV_INTERVIEW_DATE~Y_2006 Int2006_YR CV_INTERVIEW_CMONTH_2007 CMONTH_2007 CV_INTERVIEW_DATE~M_2007 Int2007_MO CV_INTERVIEW_DATE~Y_2007 Int2007_YR CV_INTERVIEW_CMONTH_2008 CMONTH_2008 CV_INTERVIEW_DATE~M_2008 Int2008_MO CV_INTERVIEW_DATE~Y_2008 Int2008_YR CV_INTERVIEW_CMONTH_2009 CMONTH_2009 CV_INTERVIEW_DATE~M_2009 Int2009_MO CV_INTERVIEW_DATE~Y_2009 Int2009_YR CV_INTERVIEW_CMONTH_2010 CMONTH_2010 CV_INTERVIEW_DATE~M_2010 Int2010_MO CV_INTERVIEW_DATE~Y_2010 Int2010_YR CV_INTERVIEW_CMONTH_2011 CMONTH_2011 CV_INTERVIEW_DATE~M_2011 Int2011_MO CV_INTERVIEW_DATE~Y_2011 Int2011_YR CV_INTERVIEW_CMONTH_2013 CMONTH_2013 CV_INTERVIEW_DATE~M_2013 Int2013_MO CV_INTERVIEW_DATE~Y_2013 Int2013_YR CV_INTERVIEW_CMONTH_2015 CMONTH_2015 CV_INTERVIEW_DATE~M_2015 Int2015_MO CV_INTERVIEW_DATE~Y_2015 Int2015_YR CV_INTERVIEW_CMONTH_2017 CMONTH_2017 CV_INTERVIEW_DATE~M_2017 Int2017_MO CV_INTERVIEW_DATE~Y_2017 Int2017_YR CV_INTERVIEW_CMONTH_2019 CMONTH_2019 CV_INTERVIEW_DATE~M_2019 Int2019_MO CV_INTERVIEW_DATE~Y_2019 Int2019_YR CV_INTERVIEW_CMONTH_2021 CMONTH_2021 CV_INTERVIEW_DATE~M_2021 Int2021_MO CV_INTERVIEW_DATE~Y_2021 Int2021_YR The program also use the college event history variables created prior to the current round: SCH_COLLEGE_STATUS_YYYY.mm STAT_YYYYmm SCH_COLLEGE_TERM_YYYY.mm TERM_YYYYmm SCH_COLLEGE_DEGREE_YYYY.mm DEG_YYYYmm SCH_COLLEGE_ID_YYYY.mm ID_YYYYmm ************************************************************************** *************************************************************************/ options pagesize=256 linesize=140 nocenter; /* Macro returns the month number counting from Jan. 1997 (month 0) */ %MACRO MONTHCNT (MONTH, YEAR, RESULT); &RESULT = -1; if (&MONTH > 0) and (&MONTH <= 12) and (&YEAR > 0) and (&YEAR <= 2022) then &RESULT = (&MONTH - START_MN) + ((&YEAR - START_YR) * 12); if (&RESULT > END) OR (&RESULT < START) then &RESULT = -1; if (&MONTH = FIRST) AND (&YEAR = FIRST) then &RESULT = START; if (&MONTH = LAST) AND (&YEAR = LAST) then &RESULT = END; %MEND MONTHCNT; /* Macro returns the date (month and year) */ %MACRO MONTDATE (MONTHCNT, MONTH, YEAR); &MONTH = -1; &YEAR = -1; if (&MONTHCNT >= START) and (&MONTHCNT <= END) then do; &YEAR = int(&MONTHCNT / 12) + START_YR; &MONTH = &MONTHCNT - ((&YEAR - START_YR) * 12) + 1; end; %MEND MONTDATE; /* What month did the respondent's term end.*/ %MACRO MONTHEND (START_MO, START_YR, TERM, ENDING); %MONTHCNT (&START_MO, &START_YR, &ENDING); /*** Fall/Winter/Spring Summer term 1 A Semester system 4 months 2 months 2 A Quarter system 2 months 1 month 3 A Trimester system 3 months 2 months 4 Other term system 1 month 1 month */ if (&ENDING > 0 and &start_mo not in (6, 7)) then do; if (&TERM = 1) then &ENDING = &ENDING + 4 - 1; if (&TERM = 2) then &ENDING = &ENDING + 2 - 1; if (&TERM = 3) then &ENDING = &ENDING + 3 - 1; if &TERM = 4 or &TERM = 999 or &TERM<0 then &ENDING = &ENDING + 1 - 1; end; /* If summer session, recalculate ending because summer session is shorter */ if &ENDING>0 and (&START_MO = 6 or &START_MO = 7) then do; %MONTHCNT (&START_MO, &START_YR, &ENDING); if (&TERM = 1) then &ENDING = &ENDING + 2 - 1; if (&TERM = 2) then &ENDING = &ENDING + 1 - 1; if (&TERM = 3) then &ENDING = &ENDING + 2 - 1; if &TERM = 4 or &TERM = 999 or &TERM<0 then &ENDING = &ENDING + 1 - 1; end; %MEND MONTHEND; /* Macro that provides how many months are in a term */ %MACRO SIZETERM (TERM, SIZE); &SIZE = -1; if (&TERM = 1) then &SIZE = 4; if (&TERM = 2) then &SIZE = 2; if (&TERM = 3) then &SIZE = 3; if (&TERM = 4) then &SIZE = 1; %MEND SIZETERM; /* Macro */ %MACRO CR_Date (CODE, START_MO, START_YR, STOP_MO, STOP_YR, TERM, BEGIN, ENDING); &BEGIN = -1; &ENDING = -1; if (&CODE = TWOYEAR_COLLEGE) OR (&CODE = FOURYEAR_COLLEGE) OR (&CODE = GRADUATE_SCHOOL) then do; %MONTHCNT (&START_MO, &START_YR, &BEGIN); %MONTHCNT (&STOP_MO, &STOP_YR, &ENDING); %MONTHEND (&START_MO, &START_YR, &TERM, EST_ENDING); if (EST_ENDING ^= -1) and (&ENDING ^= -1) then gap = abs(&ENDING - EST_ENDING); else gap = 0; if (&ENDING = -1) and (EST_ENDING >= 0) then &ENDING = EST_ENDING; if (gap > 1) then error_flag = TRUE; end; %MEND CR_Date; /* Macro to fill the output array */ %MACRO FILL (OUTARRAY, BEGIN, ENDING, FILLCODE); AlreadyFilled = TRUE; IF (&BEGIN ^= -1) and (&ENDING ^= -1) and (&BEGIN <= &ENDING) and (&FILLCODE >= 0) then do I = &BEGIN to &ENDING; if (&OUTARRAY {I} <= 0) then AlreadyFilled = FALSE; end; cntr = 0; IF (&BEGIN ^= -1) and (&ENDING ^= -1) and (&BEGIN <= &ENDING) and (&FILLCODE >= 0) then do I = &BEGIN to &ENDING; do; if (overlap = TRUE) and (&OUTARRAY {I} > 0) and (&FILLCODE > 0) and not((&OUTARRAY {I}=1) and (&FILLCODE=1)) then overcnt = overcnt + 1; &OUTARRAY {I} = &FILLCODE; end; end; %MEND FILL; /* Macro to fill the Grade array */ %MACRO FILGRADE (OUTARRAY, CODE, SEMESTER_MONTH, SEMESTER_YEAR, SEM_LENGTH, ROSTER1_STOP, ROSTER2_STOP, ROSTER3_STOP, ID); %MONTHCNT (&SEMESTER_MONTH, &SEMESTER_YEAR, SEMESTER_START); %MONTHEND (&SEMESTER_MONTH, &SEMESTER_YEAR, &SEM_LENGTH, SEMESTER_END); ROSTER_END = &ROSTER1_STOP; IF (ROSTER_END ^= -1) and (&ROSTER2_STOP ^= -1) and (&ROSTER2_STOP > ROSTER_END) then ROSTER_END = &ROSTER2_STOP; IF (ROSTER_END = -1) and (&ROSTER2_STOP ^= -1) then ROSTER_END = &ROSTER2_STOP; IF (ROSTER_END ^= -1) and (&ROSTER3_STOP ^= -1) and (&ROSTER3_STOP > ROSTER_END) then ROSTER_END = &ROSTER3_STOP; IF (ROSTER_END = -1) and (&ROSTER3_STOP ^= -1) then ROSTER_END = &ROSTER3_STOP; if (ROSTER_END = .) then ROSTER_END = -1; IF (SEMESTER_START ^= -1) and (SEMESTER_END ^= -1) and (SEMESTER_START > SEMESTER_END) then SEMESTER_START = SEMESTER_END; IF (SEMESTER_END ^= -1) and (ROSTER_END ^= -1) and (SEMESTER_END > ROSTER_END) then SEMESTER_END = ROSTER_END; if (&CODE = N_ENROLL) then SEMESTER_START = -1; IF (SEMESTER_START ^= -1) and (SEMESTER_END ^= -1) then do I = SEMESTER_START to SEMESTER_END; do; &OUTARRAY {I} = GRADECNT; DEBUGING {I} = &ID + (GRADECNT / 100); end; end; IF (SEMESTER_START ^= -1) and (SEMESTER_END ^= -1) then GRADECNT = GRADECNT + 1; %MEND FILGRADE; /* Some respondents have incorrect start dates. */ %MACRO FIXSTART (FIX_M, FIX_Y, START_M, START_Y, TERM); if (&START_M < 0) and (&FIX_M > 0) and (&TERM > 0) then &START_M = &FIX_M; if (&START_Y < 0) and (&FIX_Y > 0) and (&TERM > 0) then &START_Y = &FIX_Y; if (&START_M > 0) and (&START_Y > 0) and (&FIX_M > 0) and (&FIX_Y > 0) and (&START_M ^= &FIX_M) and (&START_Y ^= &FIX_Y) then do; &START_M = &FIX_M; &START_Y = &FIX_Y; end; %MEND FIXSTART; /* Some respondents have incorrect ending dates. */ %MACRO FIXEND (TERM, STOPM_ROSTER, STOPY_ROSTER, STARTM_LOOP, STARTY_LOOP, START1_MO, START1_YR, START2_MO, START2_YR, START3_MO, START3_YR, START4_MO, START4_YR, START5_MO, START5_YR, START6_MO, START6_YR, START7_MO, START7_YR, START8_MO, START8_YR, START9_MO, START9_YR); %MONTHEND (&STARTM_LOOP, &STARTY_LOOP, &TERM, LOOP_END); %MONTHCNT (&STOPM_ROSTER, &STOPY_ROSTER, ROSTER_END); if (LOOP_END ^= -1) and (ROSTER_END ^= -1) then shortness = ROSTER_END - LOOP_END; else shortness = 0; if (shortness > 1) then do; %SIZETERM (&TERM, TERMSIZE); num_semesters = (shortness / termsize) + 1; do I = 1 to num_semesters; %MONTDATE (loop_end+1, NEWMONTH, NEWYEAR); if (&START1_MO < 0) and (NEWMONTH > 0) then do; &START1_MO = NEWMONTH; &START1_YR = NEWYEAR; end; else if (&START2_MO < 0) and (NEWMONTH > 0) then do; &START2_MO = NEWMONTH; &START2_YR = NEWYEAR; end; else if (&START3_MO < 0) and (NEWMONTH > 0) then do; &START3_MO = NEWMONTH; &START3_YR = NEWYEAR; end; else if (&START4_MO < 0) and (NEWMONTH > 0) then do; &START4_MO = NEWMONTH; &START4_YR = NEWYEAR; end; else if (&START5_MO < 0) and (NEWMONTH > 0) then do; &START5_MO = NEWMONTH; &START5_YR = NEWYEAR; end; else if (&START6_MO < 0) and (NEWMONTH > 0) then do; &START6_MO = NEWMONTH; &START6_YR = NEWYEAR; end; else if (&START7_MO < 0) and (NEWMONTH > 0) then do; &START7_MO = NEWMONTH; &START7_YR = NEWYEAR; end; else if (&START8_MO < 0) and (NEWMONTH > 0) then do; &START8_MO = NEWMONTH; &START8_YR = NEWYEAR; end; else if (&START9_MO < 0) and (NEWMONTH > 0) then do; &START9_MO = NEWMONTH; &START9_YR = NEWYEAR; end; loop_end = loop_end + TERMSIZE; if (LOOP_END > END) then LOOP_END = END - TERMSIZE - 1; end; end; %MEND FIXEND; /* Macro to make sure the semesters go in order. */ %MACRO FIX_SEMS (OUTARRAY); SEM_CNT = 99; DO I = START to END; if ((&OUTARRAY {I} > 0) and (&OUTARRAY {I} < SEM_CNT)) then SEM_CNT = &OUTARRAY {I}; END; TRIGGER = SEM_CNT; DO I = START to END; if ((&OUTARRAY {I} > 0) and (TRIGGER ^= &OUTARRAY {I})) then DO; TRIGGER = &OUTARRAY {I}; if (SEM_CNT < 97) then SEM_CNT = SEM_CNT + 1; END; if (&OUTARRAY {I} > 0) and (&OUTARRAY {I} ^= 99) then &OUTARRAY {I} = SEM_CNT; END; if (SEM_CNT ^= 99) then GRADECNT = SEM_CNT + 1; %MEND FIX_SEMS; /* Macro to combine info. NOTE: If either part is missing then neither part is included. */ %MACRO COMBINE (LEFT, RIGHT, OUTARRAY); do I = START to END; if (&LEFT {I} >= 0) and (&RIGHT {I} >= 0) THEN &OUTARRAY {I} = &LEFT {I} * 100 + &RIGHT {I}; ELSE if (&LEFT {I} = -4) and (&RIGHT {I} = -4) THEN &OUTARRAY {I} = -4; ELSE &OUTARRAY {I} = -1; end; %MEND COMBINE; /*******************************************************************/ data one; infile ; input PUBID OLD_TYPEL1 OLD_TYPEL2 OLD_TYPEL3 OLD_TYPEL4 OLD_TYPEL5 OLD_TERML1 OLD_TERML2 OLD_TERML3 OLD_TERML4 OLD_TERML5 OLD_IDL1 OLD_IDL2 OLD_IDL3 OLD_IDL4 OLD_IDL5; proc sort; by pubid; libname xinf20 libname xin20 data two; merge xin20.inC_eventR20 one; by pubid; ARRAY OLD_TYPE [1:5] OLD_TYPEL1-OLD_TYPEL5; ARRAY OLD_TERM [1:5] OLD_TERML1-OLD_TERML5; ARRAY OLD_ID [1:5] OLD_IDL1-OLD_IDL5; %MACRO CARRY_UP (TERM, TYPE, ID, LOOP); if ((&TERM = -4) or (&TYPE = -4)) then do i = 1 to 5; if (OLD_ID {i} = &ID) then do; if (&TYPE = -4) then &TYPE = OLD_TYPE {i}; if (&TERM = -4) then &TERM = OLD_TERM {i}; end; end; if ((&TERM = -5) and (&TYPE = -5)) then do; &ID = OLD_ID {&Loop}; &TYPE = OLD_TYPE {&Loop}; &TERM = OLD_TERM {&Loop}; end; %MEND CARRY_UP; %CARRY_UP (TERML1, TYPEL1, SCHID_L1, 1); %CARRY_UP (TERML2, TYPEL2, SCHID_L2, 2); %CARRY_UP (TERML3, TYPEL3, SCHID_L3, 3); file; put PUBID TYPEL1 TYPEL2 TYPEL3 TERML1 TERML2 TERML3 SCHID_L1 SCHID_L2 SCHID_L3; run; data three; merge xin20.inP_eventR1820 (drop=dli:) xinf20.inPE_eventR19_f(keep=pubid GRADECNT) two; by pubid; if Int2021_YR>0; doi=CMONTH_2021-205; GRADECNT0= GRADECNT; GRADECNT = GRADECNT + 1; array cmonth (*) cmonth_1997-cmonth_2011 cmonth_2013 cmonth_2015 cmonth_2017 cmonth_2019; array intm (*) INT1997_MO INT1998_MO INT1999_MO INT2000_MO INT2001_MO INT2002_MO INT2003_MO INT2004_MO INT2005_MO INT2006_MO INT2007_MO INT2008_MO INT2009_MO INT2010_MO INT2011_MO INT2013_MO INT2015_MO INT2017_MO INT2019_MO; array inty (*) INT1997_YR INT1998_YR INT1999_YR INT2000_YR INT2001_YR INT2002_YR INT2003_YR INT2004_YR INT2005_YR INT2006_YR INT2007_YR INT2008_YR INT2009_YR INT2010_YR INT2011_YR INT2013_YR INT2015_YR INT2017_YR INT2019_YR; do i=1 to dim(cmonth); if cmonth(i)>0 then do; dli_rnd=i; dlim=cmonth(i)+1-205; dli_m=intm(i); dli_y=inty(i); end; end; ***; TRUE = 1; FALSE = 0; NULL = -1; if (TERML1 > 0) OR (TERML2 > 0) OR (TERML3 > 0) OR (TERML4 > 0) OR (TERML5 > 0) THEN IN_COLL = 99; ELSE IN_COLL = 0; ARRAY TYPE {0:311} TYPE0-TYPE311; ARRAY GRADE {0:311} GRADE0-GRADE311; ARRAY DIPLOMA {0:311} DIPLO0-DIPLO311; ARRAY FULLPART {0:311} FULL0-FULL311; ARRAY STATUS {0:311} STATUS0-STATUS311; ARRAY SCHOOLID {0:311} SCH_ID0-SCH_ID311; ARRAY DEBUGING {0:311} DEBUG0-DEBUG311; START_MN = 1; START_YR = 1997; START = 0; END = 311; FIRST = 9998; LAST = 9999; /* Status Flags */ N_ENROLL = 1; TWOYEAR_COLLEGE = 2; FOURYEAR_COLLEGE = 3; GRADUATE_SCHOOL = 4; /* Type of school */ PUBLIC = 10; PRIVATE = 20; RELIGOUS = 30; UNKNOWN = 40; %MACRO FIX_CODE (INPUT); if (&INPUT < 4) then OUT = N_ENROLL; if (&INPUT = 4) then OUT = TWOYEAR_COLLEGE; if (&INPUT = 5) then OUT = FOURYEAR_COLLEGE; if (&INPUT = 6) then OUT = GRADUATE_SCHOOL; &INPUT = OUT %MEND FIX_CODE; %FIX_CODE (CODE_L1); %FIX_CODE (CODE_L2); %FIX_CODE (CODE_L3); if (DIPLOMAL1 in (2, 7, 8, 9, 11, 12, 13, 99, 995, 999)) then CODE_L1 = N_ENROLL; if (DIPLOMAL2 in (2, 7, 8, 9, 11, 12, 13, 99, 995, 999)) then CODE_L2 = N_ENROLL; if (DIPLOMAL3 in (2, 7, 8, 9, 11, 12, 13, 99, 995, 999)) then CODE_L3 = N_ENROLL; if (DIPLOMAL1 in (-1, -2, -3)) then DIPLOMAL1 = UNKNOWN; if (DIPLOMAL2 in (-1, -2, -3)) then DIPLOMAL2 = UNKNOWN; if (DIPLOMAL3 in (-1, -2, -3)) then DIPLOMAL3 = UNKNOWN; %MACRO FIX_KIND (INPUT); if (&INPUT < -2) then &INPUT = -1; if (&INPUT = -1) or (&INPUT = -2) then &INPUT = UNKNOWN; if (&INPUT = 1) then &INPUT = PUBLIC; if (&INPUT = 2) then &INPUT = PRIVATE; %MEND FIX_KIND; %FIX_KIND (TYPEL1); %FIX_KIND (TYPEL2); %FIX_KIND (TYPEL3); %CR_Date (CODE_L1, STARML11, STARYL11, STOPML11, STOPYL11, TERML1, BEG_L11, END_L11); %CR_Date (CODE_L1, STARML12, STARYL12, STOPML12, STOPYL12, TERML1, BEG_L12, END_L12); %CR_Date (CODE_L2, STARML21, STARYL21, STOPML21, STOPYL21, TERML2, BEG_L21, END_L21); %CR_Date (CODE_L2, STARML22, STARYL22, STOPML22, STOPYL22, TERML2, BEG_L22, END_L22); %CR_Date (CODE_L3, STARML31, STARYL31, STOPML31, STOPYL31, TERML3, BEG_L31, END_L31); /* Some 1st terms start after the roster says school begins. */ %MACRO FixTermDate (CODE, ROSTER_MO, ROSTER_YR, TERM_MO, TERM_YR, ID); ROSTER_DATE = -1; TERM_DATE = -1; ROUND = -1; if (&CODE = TWOYEAR_COLLEGE) OR (&CODE = FOURYEAR_COLLEGE) OR (&CODE = GRADUATE_SCHOOL) then do; %MONTHCNT (&ROSTER_MO, &ROSTER_YR, ROSTER_DATE); %MONTHCNT (&TERM_MO, &TERM_YR, TERM_DATE); GAP = TERM_DATE - ROSTER_DATE; ROUND = int(&ID / 100); if (ROUND = 19) AND (GAP > 0) and (GAP <= 3) then do; &TERM_MO = &ROSTER_MO; &TERM_YR = &ROSTER_YR; end; end; %MEND FixTermDate; %FixTermDate (CODE_L1, STARML11, STARYL11, SEMML11, SEMYL11, SCHID_L1); %FixTermDate (CODE_L2, STARML21, STARYL21, SEMML21, SEMYL21, SCHID_L2); %FixTermDate (CODE_L3, STARML31, STARYL31, SEMML31, SEMYL31, SCHID_L3); do I = dlim to doi; TYPE {I} = -1; GRADE {I} = -1; STATUS {I} = -1; SCHOOLID{I} = -1; DIPLOMA {I} = -1; FULLPART{I} = -1; DEBUGING{I} = -1; end; /* Build the Grade Array */ %FILGRADE (GRADE, CODE_L1, SEMML11, SEMYL11, TERML1, END_L11, END_L12, NULL, SCHID_L1); %FILGRADE (GRADE, CODE_L1, SEMML12, SEMYL12, TERML1, END_L11, END_L12, NULL, SCHID_L1); %FILGRADE (GRADE, CODE_L1, SEMML13, SEMYL13, TERML1, END_L11, END_L12, NULL, SCHID_L1); %FILGRADE (GRADE, CODE_L1, SEMML14, SEMYL14, TERML1, END_L11, END_L12, NULL, SCHID_L1); %FILGRADE (GRADE, CODE_L1, SEMML15, SEMYL15, TERML1, END_L11, END_L12, NULL, SCHID_L1); %FILGRADE (GRADE, CODE_L1, SEMML16, SEMYL16, TERML1, END_L11, END_L12, NULL, SCHID_L1); %FILGRADE (GRADE, CODE_L1, SEMML17, SEMYL17, TERML1, END_L11, END_L12, NULL, SCHID_L1); %FILGRADE (GRADE, CODE_L1, SEMML18, SEMYL18, TERML1, END_L11, END_L12, NULL, SCHID_L1); %FILGRADE (GRADE, CODE_L1, SEMML19, SEMYL19, TERML1, END_L11, END_L12, NULL, SCHID_L1); %FILGRADE (GRADE, CODE_L1, SEMML110, SEMYL110, TERML1, END_L11, END_L12, NULL, SCHID_L1); %FILGRADE (GRADE, CODE_L1, SEMML111, SEMYL111, TERML1, END_L11, END_L12, NULL, SCHID_L1); %FILGRADE (GRADE, CODE_L1, SEMML112, SEMYL112, TERML1, END_L11, END_L12, NULL, SCHID_L1); %FILGRADE (GRADE, CODE_L2, SEMML21, SEMYL21, TERML2, END_L21, NULL, NULL, SCHID_L2); %FILGRADE (GRADE, CODE_L2, SEMML22, SEMYL22, TERML2, END_L21, NULL, NULL, SCHID_L2); %FILGRADE (GRADE, CODE_L2, SEMML23, SEMYL23, TERML2, END_L21, NULL, NULL, SCHID_L2); %FILGRADE (GRADE, CODE_L2, SEMML24, SEMYL24, TERML2, END_L21, NULL, NULL, SCHID_L2); %FILGRADE (GRADE, CODE_L2, SEMML25, SEMYL25, TERML2, END_L21, NULL, NULL, SCHID_L2); %FILGRADE (GRADE, CODE_L2, SEMML26, SEMYL26, TERML2, END_L21, NULL, NULL, SCHID_L2); %FILGRADE (GRADE, CODE_L2, SEMML27, SEMYL27, TERML2, END_L21, NULL, NULL, SCHID_L2); %FILGRADE (GRADE, CODE_L2, SEMML28, SEMYL28, TERML2, END_L21, NULL, NULL, SCHID_L2); /* Fill in graduate students records */ MISSING_TERM = 99; if (DIPLOMAL1 in (4, 5, 6)) then DO; %FILL (GRADE, BEG_L11, END_L11, MISSING_TERM); %FILL (GRADE, BEG_L12, END_L12, MISSING_TERM); *%FILL (GRADE, BEG_L13, END_L13, MISSING_TERM); end; if (DIPLOMAL2 in (4, 5, 6)) then DO; %FILL (GRADE, BEG_L21, END_L21, MISSING_TERM); %FILL (GRADE, BEG_L22, END_L22, MISSING_TERM); end; if (DIPLOMAL3 in (4, 5, 6)) then DO; %FILL (GRADE, BEG_L31, END_L31, MISSING_TERM); *%FILL (GRADE, BEG_L32, END_L32, MISSING_TERM); end; %FIX_SEMS (GRADE); /* Build the Status Array */ overlap = TRUE; overcnt = 0; %FILL (STATUS, BEG_L11, END_L11, CODE_L1); %FILL (STATUS, BEG_L12, END_L12, CODE_L1); %FILL (STATUS, BEG_L21, END_L21, CODE_L2); %FILL (STATUS, BEG_L22, END_L22, CODE_L2); %FILL (STATUS, BEG_L31, END_L31, CODE_L3); overlap = FALSE; coll_lap = FALSE; if (overcnt > 0) then coll_lap = TRUE; /* Build the Type (Private/Public/Parochial) Array */ %FILL (TYPE, BEG_L11, END_L11, TYPEL1); %FILL (TYPE, BEG_L12, END_L12, TYPEL1); %FILL (TYPE, BEG_L21, END_L21, TYPEL2); %FILL (TYPE, BEG_L22, END_L22, TYPEL2); %FILL (TYPE, BEG_L31, END_L31, TYPEL3); /* Create the ID */ %FILL (SCHOOLID, BEG_L11, END_L11, SCHID_L1); %FILL (SCHOOLID, BEG_L12, END_L12, SCHID_L1); %FILL (SCHOOLID, BEG_L21, END_L21, SCHID_L2); %FILL (SCHOOLID, BEG_L22, END_L22, SCHID_L2); %FILL (SCHOOLID, BEG_L31, END_L31, SCHID_L3); /* What type of degree were they getting? */ %FILL (DIPLOMA, BEG_L11, END_L11, DIPLOMAL1); %FILL (DIPLOMA, BEG_L12, END_L12, DIPLOMAL1); %FILL (DIPLOMA, BEG_L21, END_L21, DIPLOMAL2); %FILL (DIPLOMA, BEG_L22, END_L22, DIPLOMAL2); %FILL (DIPLOMA, BEG_L31, END_L31, DIPLOMAL3); /* Was R Going to College Full or Part Time */ %FILL (FULLPART, BEG_L11, END_L11, FULLPART_L11); %FILL (FULLPART, BEG_L12, END_L12, FULLPART_L11); %FILL (FULLPART, BEG_L21, END_L21, FULLPART_L21); %FILL (FULLPART, BEG_L22, END_L22, FULLPART_L21); %FILL (FULLPART, BEG_L31, END_L31, FULLPART_L31); Do I = dlim to doi; if (FULLPART {I} <= 0) and (Diploma {I} > 0) THEN FULLPART {I} = 3; End; Match = 0; Do I = dlim to doi; Debuging {I} = int(Debuging {I}); If (Debuging {I} ^= SchoolID {I}) and (Debuging {I} ^= -1) and (SchoolID {I} ^= -1) then match = 1; End; *******************try to incorportate the prior info; data four; merge xinf20.inPE_eventR19_f (keep= pubid stat: term: deg: id:) three; by pubid; if Int2021_YR>0; ARRAY TYPE {0:311} TYPE0-TYPE311; ARRAY GRADE {0:311} GRADE0-GRADE311; ARRAY DIPLOMA {0:311} DIPLO0-DIPLO311; ARRAY FULLPART {0:311} FULL0-FULL311; ARRAY STATUS {0:311} STATUS0-STATUS311; ARRAY SCHOOLID {0:311} SCH_ID0-SCH_ID311; ARRAY TERMGRAD {0:311} TERMG0-TERMG311; ARRAY COLL_DEG {0:311} DEGR0-DEGR311; %MACRO GET_LEFT (IN, LEFT); if (&IN = -1) THEN &LEFT = -1; ELSE if (&IN = -4) THEN &LEFT = -4; ELSE &LEFT = int (&IN / 100); %MEND GET_LEFT; %MACRO GET_RGHT (IN, RIGHT); if (&IN = -1) THEN &RIGHT = -1; ELSE if (&IN = -4) THEN &RIGHT = -4; ELSE &RIGHT = &IN - (int (&IN / 100) * 100); %MEND GET_RGHT; %MACRO PUT_LEFT (IN, LEFT); if (&IN > 0) THEN DO; RIGHT = &IN - (int (&IN / 100) * 100); &IN = &LEFT * 100 + RIGHT; END; %MEND PUT_LEFT; %MACRO PUT_RGHT (IN, RIGHT); if (&IN > 0) THEN DO; LEFT = int (&IN / 100); &IN = LEFT * 100 + &RIGHT; END; %MEND PUT_RGHT; %MACRO COMBINE (LEFT, RIGHT, OUTARRAY); do I = START to END; if (&LEFT {I} >= 0) and (&RIGHT {I} >= 0) THEN &OUTARRAY {I} = &LEFT {I} * 100 + &RIGHT {I}; ELSE if &LEFT {I} in (. -4) and &RIGHT {I} in (.-4) THEN &OUTARRAY {I} = -4; ELSE &OUTARRAY {I} = -1; end; %MEND COMBINE; Do I = START to END; if (STATUS {I} in (2,3,4)) and (GRADE {I} < 0) Then GRADE {I} = 99; end; %COMBINE (FULLPART, DIPLOMA, COLL_DEG); %COMBINE (TYPE, GRADE, TERMGRAD); *********************************** event history prior current round; array STAT (0:282) STAT_199701-STAT_199712 STAT_199801-STAT_199812 STAT_199901-STAT_199912 STAT_200001-STAT_200012 STAT_200101-STAT_200112 STAT_200201-STAT_200212 STAT_200301-STAT_200312 STAT_200401-STAT_200412 STAT_200501-STAT_200512 STAT_200601-STAT_200612 STAT_200701-STAT_200712 STAT_200801-STAT_200812 STAT_200901-STAT_200912 STAT_201001-STAT_201012 STAT_201101-STAT_201112 STAT_201201-STAT_201212 STAT_201301-STAT_201312 STAT_201401-STAT_201412 STAT_201501-STAT_201512 STAT_201601-STAT_201612 STAT_201701-STAT_201712 STAT_201801-STAT_201812 STAT_201901-STAT_201912 STAT_202001-STAT_202007; array TERM (0:282) TERM_199701-TERM_199712 TERM_199801-TERM_199812 TERM_199901-TERM_199912 TERM_200001-TERM_200012 TERM_200101-TERM_200112 TERM_200201-TERM_200212 TERM_200301-TERM_200312 TERM_200401-TERM_200412 TERM_200501-TERM_200512 TERM_200601-TERM_200612 TERM_200701-TERM_200712 TERM_200801-TERM_200812 TERM_200901-TERM_200912 TERM_201001-TERM_201012 TERM_201101-TERM_201112 TERM_201201-TERM_201212 TERM_201301-TERM_201312 TERM_201401-TERM_201412 TERM_201501-TERM_201512 TERM_201601-TERM_201612 TERM_201701-TERM_201712 TERM_201801-TERM_201812 TERM_201901-TERM_201912 TERM_202001-TERM_202007; array DEG (0:282) DEG_199701-DEG_199712 DEG_199801-DEG_199812 DEG_199901-DEG_199912 DEG_200001-DEG_200012 DEG_200101-DEG_200112 DEG_200201-DEG_200212 DEG_200301-DEG_200312 DEG_200401-DEG_200412 DEG_200501-DEG_200512 DEG_200601-DEG_200612 DEG_200701-DEG_200712 DEG_200801-DEG_200812 DEG_200901-DEG_200912 DEG_201001-DEG_201012 DEG_201101-DEG_201112 DEG_201201-DEG_201212 DEG_201301-DEG_201312 DEG_201401-DEG_201412 DEG_201501-DEG_201512 DEG_201601-DEG_201612 DEG_201701-DEG_201712 DEG_201801-DEG_201812 DEG_201901-DEG_201912 DEG_202001-DEG_202007; array ID (0:282) ID_199701-ID_199712 ID_199801-ID_199812 ID_199901-ID_199912 ID_200001-ID_200012 ID_200101-ID_200112 ID_200201-ID_200212 ID_200301-ID_200312 ID_200401-ID_200412 ID_200501-ID_200512 ID_200601-ID_200612 ID_200701-ID_200712 ID_200801-ID_200812 ID_200901-ID_200912 ID_201001-ID_201012 ID_201101-ID_201112 ID_201201-ID_201212 ID_201301-ID_201312 ID_201401-ID_201412 ID_201501-ID_201512 ID_201601-ID_201612 ID_201701-ID_201712 ID_201801-ID_201812 ID_201901-ID_201912 ID_202001-ID_202007; do i=start to (dlim-1); status(i)=stat(i); termgrad(i)=term(i); coll_deg(i)=deg(i); schoolid(i)=id(i); end; do i=dlim to doi; IF (STATUS {I} = -1) then do; STATUS {I} = N_ENROLL; termgrad(i)=-4; coll_deg(i)=-4; schoolid(i)=-4; end; end; /* The college data have a lot of spurious transitions. This code combines single month terms at end of a school year with previous school year terms. */ do i=(dlim-1) to doi; temp_value = TERMGRAD {I-1}; %get_rght (temp_value, prev_semester); temp_value = TERMGRAD {I+1}; %get_rght (temp_value, next_semester); temp_value = TERMGRAD {I}; %get_rght (temp_value, curr_semester); if (prev_semester = MISSING_TERM) then prev_semester = -1; if (next_semester = MISSING_TERM) then next_semester = -1; if (curr_semester = MISSING_TERM) then curr_semester = -1; if (((STATUS {I} = TWOYEAR_COLLEGE) OR (STATUS {I} = FOURYEAR_COLLEGE) OR (STATUS {I} = GRAD_SCHOOL)) and ((STATUS {I-1} = TWOYEAR_COLLEGE) OR (STATUS {I-1}= FOURYEAR_COLLEGE) OR (STATUS {I-1}= GRAD_SCHOOL)) and (prev_semester > 0) and (next_semester < 0) and (curr_semester > prev_semester)) & schoolid(i-1)=schoolid(i) then do; %put_rght (temp_value, prev_semester); TERMGRAD {I} = temp_value; end; end; SEM_CNT=GRADECNT0; TRIGGER=GRADECNT0; DO I=dlim to doi; temp_value = TERMGRAD {I}; %get_rght (temp_value, curr_semester); if (curr_semester = MISSING_TERM) then curr_semester = -1; if (((STATUS {I} = TWOYEAR_COLLEGE) OR (STATUS {I} = FOURYEAR_COLLEGE) OR (STATUS {I} = GRAD_SCHOOL)) and (curr_semester > 0) and (TRIGGER ^= curr_semester)) then DO; TRIGGER = curr_semester; SEM_CNT = SEM_CNT + 1; END; if ((STATUS {I} = N_ENROLL) and (STATUS {I-1} = N_ENROLL)) then TRIGGER = -1; if (((STATUS {I} = TWOYEAR_COLLEGE) OR (STATUS {I} = FOURYEAR_COLLEGE) OR (STATUS {I} = GRAD_SCHOOL)) and (curr_semester > 0)) then do; %put_rght (temp_value, SEM_CNT); TERMGRAD {I} = temp_value; end; END; GRADECNT_F=SEM_CNT; /**********************************/ /* IMPUTE MISSING SCHOOLING. */ /**********************************/ FULL_TIMER = 1; PART_TIMER = 2; MISS_TIMER = 3; /* Some of the college data is missing the type of school. If a respondent told the survey the type of school in a previous round, that information is not carried forward into the roster. This fixes the issue. */ Do I = dlim to doi; type_school = TermGrad {I}; %get_left (type_school, theType); if (theType = UNKNOWN) then Found = FALSE; Do J = START to (I-1); if (SchoolId {I} = SchoolId {J}) and (Found = FALSE) THEN do; Found = TRUE; tmp_type = TermGrad {J}; %get_left (tmp_type, tmp_result); if ((tmp_result = PUBLIC) OR (tmp_result = PRIVATE) OR (tmp_result = RELIGOUS)) THEN do; %put_left (type_school, tmp_result); TermGrad {I} = type_school; end; end; end; end; /* Some of the college data is missing full or part time status. The problem is the full or part time status can be in the middle of data since the survey only asks the question about full and part time status after a term is completed. This imputation code makes the assumption that once a person is in school they never change their f/p status, which is not a great assumption but is the best I can do given the data limitations. */ Do I = dlim to doi; time_school = COLL_DEG {I}; %get_left (time_school, thetime); if (thetime = MISS_TIMER) then Found = FALSE; Do J = START to End; if (SchoolId {I} = SchoolId {J}) and (Found = FALSE) THEN do; tmp_time = COLL_DEG {J}; %get_left (tmp_time, tmp_result); if ((tmp_result = FULL_TIMER) OR (tmp_result = PART_TIMER)) THEN do; Found = TRUE; %put_left (time_school, tmp_result); COLL_DEG {I} = time_school; end; end; end; end; ***** flags; if dlim>=5 then do i=dlim; %get_rght (TERMGRAD {I-5}, tdlim_4); %get_rght (TERMGRAD {I-4}, tdlim_3); %get_rght (TERMGRAD {I-3}, tdlim_2); %get_rght (TERMGRAD {I-2}, tdlim_1); %get_rght (TERMGRAD {I-1}, tdlim0); %get_rght (TERMGRAD {I}, tdlim1); %get_rght (TERMGRAD {I+1}, tdlim2); %get_rght (TERMGRAD {I+2}, tdlim3); %get_rght (TERMGRAD {I+3}, tdlim4); end; else flag02=0; if 00 and doi>0 then do i=dlim to doi; if STATUS{I} not in (1 2 3 4 -3) then flg0=i; if STATUS{I}>1 & ( (TERMGRAD {I}<=1000 & TERMGRAD {I} ne -3) or (COLL_DEG{I}<=100 & COLL_DEG{I} ne -3) or (SCHOOLID{I}<=100 & SCHOOLID{I} ne -3) ) then flg1=i; if STATUS{I}>1 & ( (TERMGRAD {I}<=1000) or (COLL_DEG{I}<=100) or (SCHOOLID{I}<=100) ) then flg11=i; if STATUS{I}=1 & ( TERMGRAD {I} ne -4 or COLL_DEG{I} ne -4 or SCHOOLID{I} ne -4 ) then flg2=i; if STATUS{I}=-4 & ( TERMGRAD {I} ne -4 or COLL_DEG{I} ne -4 or SCHOOLID{I} ne -4 ) then flg3=i; if STATUS{I}=-3 & ( TERMGRAD {I} ne -3 or COLL_DEG{I} ne -3 or SCHOOLID{I} ne -3 ) then flg4=i; end; ************************************ cleap up to generate only the current round info; do I = START to (dlim-1); STATUS {I} = -4; SCHOOLID {I} = -4; TERMGRAD{I} = -4; COLL_DEG {I} = -4; end; do I = dlim TO doi; if (STATUS {I} = 1) then do; SCHOOLID {I} = -4; TERMGRAD{I} = -4; COLL_DEG {I} = -4; end; end; do I = (doi+1) TO END; STATUS {I} = -4; SCHOOLID {I} = -4; TERMGRAD{I} = -4; COLL_DEG {I} = -4; end; ***************************************** generate the final data set; data xinf20.outR20; set four; keep pubid STATUS4-STATUS309 TERMG36-TERMG308 DEGR36-DEGR308 SCH_ID36-SCH_ID308; run;