/********************************************************************* Variables created: Monthly College Event Histories **variable name in program Variable name in Gator********** STATUS### SCH_COLLEGE_STATUS_YYYY.mm TERMG### SCH_COLLEGE_TERM_YYYY.mm DEGR### SCH_COLLEGE_DEGREE_YYYY.mm SCH_ID### SCH_COLLEGE_ID_YYYY.mm (the naming of college event history arrays STATUS###, TERMG###, DEGR###, and SCH_ID### counts January 1997 as month 0) ***********************************************************************/ /**Variable Names on the Gator Variable Names in the Program** YSCH-27337.01_2023 DIPLOMAL1 YSCH-27337.02_2023 DIPLOMAL2 YSCH-27337.03_2023 DIPLOMAL3 YSCH-25552.01_2023 TYPEL1a YSCH-17400.01_2023 TERML1a YSCH-26419.01_2023 TYPEL1 YSCH-26419.02_2023 TYPEL2 YSCH-26419.03_2023 TYPEL3 YSCH-26980.01_2023 TERML1 YSCH-26980.02_2023 TERML2 YSCH-26980.03_2023 TERML3 YSCH-20400.01.01~M_2023 SEMML11 YSCH-20400.01.01~Y_2023 SEMYL11 YSCH-20400.01.02~M_2023 SEMML12 YSCH-20400.01.02~Y_2023 SEMYL12 YSCH-20400.01.03~M_2023 SEMML13 YSCH-20400.01.03~Y_2023 SEMYL13 YSCH-20400.01.04~M_2023 SEMML14 YSCH-20400.01.04~Y_2023 SEMYL14 YSCH-20400.01.05~M_2023 SEMML15 YSCH-20400.01.05~Y_2023 SEMYL15 YSCH-20400.01.06~M_2023 SEMML16 YSCH-20400.01.06~Y_2023 SEMYL16 YSCH-20400.01.07~M_2023 SEMML17 YSCH-20400.01.07~Y_2023 SEMYL17 YSCH-20400.01.08~M_2023 SEMML18 YSCH-20400.01.08~Y_2023 SEMYL18 YSCH-20400.02.01~M_2023 SEMML21 YSCH-20400.02.01~Y_2023 SEMYL21 YSCH-20400.02.02~M_2023 SEMML22 YSCH-20400.02.02~Y_2023 SEMYL22 YSCH-20400.02.03~M_2023 SEMML23 YSCH-20400.02.03~Y_2023 SEMYL23 YSCH-20400.02.04~M_2023 SEMML24 YSCH-20400.02.04~Y_2023 SEMYL24 YSCH-20400.02.05~M_2023 SEMML25 YSCH-20400.02.05~Y_2023 SEMYL25 YSCH-20400.02.06~M_2023 SEMML26 YSCH-20400.02.06~Y_2023 SEMYL26 YSCH-20400.02.07~M_2023 SEMML27 YSCH-20400.02.07~Y_2023 SEMYL27 YSCH-20400.03.01~M_2023 SEMML31 YSCH-20400.03.01~Y_2023 SEMYL31 YSCH-20400.03.02~M_2023 SEMML32 YSCH-20400.03.02~Y_2023 SEMYL32 YSCH-21800.01.01_2023 FullPart_L11 YSCH-21800.01.02_2023 FullPart_L12 YSCH-21800.01.03_2023 FullPart_L13 YSCH-21800.01.04_2023 FullPart_L14 YSCH-21800.01.05_2023 FullPart_L15 YSCH-21800.01.06_2023 FullPart_L16 YSCH-21800.01.07_2023 FullPart_L17 YSCH-21800.01.08_2023 FullPart_L18 YSCH-21800.02.01_2023 FullPart_L21 YSCH-21800.02.02_2023 FullPart_L22 YSCH-21800.02.03_2023 FullPart_L23 YSCH-21800.02.04_2023 FullPart_L24 YSCH-21800.02.05_2023 FullPart_L25 YSCH-21800.02.06_2023 FullPart_L26 YSCH-21800.02.07_2023 FullPart_L27 YSCH-21800.03.01_2023 FullPart_L31 YSCH-21800.03.02_2023 FullPart_L32 NEWSCHOOL_SCHCODE.01_2023 CODE_L1 NEWSCHOOL_SCHCODE.02_2023 CODE_L2 NEWSCHOOL_SCHCODE.03_2023 CODE_L3 NEWSCHOOL_START1.01~M_2023 STARML11 NEWSCHOOL_START1.01~Y_2023 STARYL11 NEWSCHOOL_START1.02~M_2023 STARML21 NEWSCHOOL_START1.02~Y_2023 STARYL21 NEWSCHOOL_START1.03~M_2023 STARML31 NEWSCHOOL_START1.03~Y_2023 STARYL31 NEWSCHOOL_STOP1.01~M_2023 STOPML11 NEWSCHOOL_STOP1.01~Y_2023 STOPYL11 NEWSCHOOL_STOP1.02~M_2023 STOPML21 NEWSCHOOL_STOP1.02~Y_2023 STOPYL21 NEWSCHOOL_STOP1.03~M_2023 STOPML31 NEWSCHOOL_STOP1.03~Y_2023 STOPYL31 NEWSCHOOL_START2.01~M_2023 STARML12 NEWSCHOOL_START2.01~Y_2023 STARYL12 NEWSCHOOL_START2.02~M_2023 STARML22 NEWSCHOOL_START2.02~Y_2023 STARYL22 NEWSCHOOL_STOP2.01~M_2023 STOPML12 NEWSCHOOL_STOP2.01~Y_2023 STOPYL12 NEWSCHOOL_START3.01~M_2023 STARML13 NEWSCHOOL_START3.01~Y_2023 STARYL13 NEWSCHOOL_STOP3.01~M_2023 STOPML13 NEWSCHOOL_STOP3.01~Y_2023 STOPYL13 NEWSCHOOL_PERIODS.01_2023 PERIODL1 NEWSCHOOL_PERIODS.02_2023 PERIODL2 NEWSCHOOL_PERIODS.03_2023 PERIODL3 NEWSCHOOL_PUBID.01_2023 SCHID_L1 NEWSCHOOL_PUBID.02_2023 SCHID_L2 NEWSCHOOL_PUBID.03_2023 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 CV_INTERVIEW_CMONTH_2023 CMONTH_2023 CV_INTERVIEW_DATE~M_2023 Int2023_MO CV_INTERVIEW_DATE~Y_2023 Int2023_YR CVC_HGC_EVER_XRND CVC_HGC 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 <= 2024) 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 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_TERML1 OLD_TERML2 OLD_TERML3 OLD_IDL1 OLD_IDL2 OLD_IDL3; proc sort; by pubid; libname xin21; data two; merge xin21.inC_eventR21 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 xin21.inP_eventR21 xin21.inPE_eventR20(keep=pubid GRADECNT) two; by pubid; if Int2023_YR>0; doi=CMONTH_2023-205; GRADECNT0= GRADECNT; GRADECNT = GRADECNT + 1; array cmonth (*) cmonth_1997-cmonth_2011 cmonth_2013 cmonth_2015 cmonth_2017 cmonth_2019 cmonth_2021; 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 INT2021_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 INT2021_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; /* some useful constants */ TRUE = 1; FALSE = 0; NULL = -1; if (TERML1 > 0) OR (TERML2 > 0) OR (TERML3 > 0) THEN IN_COLL = 99; ELSE IN_COLL = 0; ARRAY TYPE {0:335} TYPE0-TYPE335; ARRAY GRADE {0:335} GRADE0-GRADE335; ARRAY DIPLOMA {0:335} DIPLO0-DIPLO335; ARRAY FULLPART {0:335} FULL0-FULL335; ARRAY STATUS {0:335} STATUS0-STATUS335; ARRAY SCHOOLID {0:335} SCH_ID0-SCH_ID335; ARRAY DEBUGING {0:335} DEBUG0-DEBUG335; START_MN = 1; START_YR = 1997; START = 0; END = 335; 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_L1, STARML13, STARYL13, STOPML13, STOPYL13, TERML1, BEG_L13, END_L13); %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 = 21) 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, END_L13, SCHID_L1); %FILGRADE (GRADE, CODE_L1, SEMML12, SEMYL12, TERML1, END_L11, END_L12, END_L13, SCHID_L1); %FILGRADE (GRADE, CODE_L1, SEMML13, SEMYL13, TERML1, END_L11, END_L12, END_L13, SCHID_L1); %FILGRADE (GRADE, CODE_L1, SEMML14, SEMYL14, TERML1, END_L11, END_L12, END_L13, SCHID_L1); %FILGRADE (GRADE, CODE_L1, SEMML15, SEMYL15, TERML1, END_L11, END_L12, END_L13, SCHID_L1); %FILGRADE (GRADE, CODE_L1, SEMML16, SEMYL16, TERML1, END_L11, END_L12, END_L13, SCHID_L1); %FILGRADE (GRADE, CODE_L1, SEMML17, SEMYL17, TERML1, END_L11, END_L12, END_L13, SCHID_L1); %FILGRADE (GRADE, CODE_L1, SEMML18, SEMYL18, TERML1, END_L11, END_L12, END_L13, SCHID_L1); %FILGRADE (GRADE, CODE_L2, SEMML21, SEMYL21, TERML2, END_L21, END_L22, NULL, SCHID_L2); %FILGRADE (GRADE, CODE_L2, SEMML22, SEMYL22, TERML2, END_L21, END_L22, NULL, SCHID_L2); %FILGRADE (GRADE, CODE_L2, SEMML23, SEMYL23, TERML2, END_L21, END_L22, NULL, SCHID_L2); %FILGRADE (GRADE, CODE_L2, SEMML24, SEMYL24, TERML2, END_L21, END_L22, NULL, SCHID_L2); %FILGRADE (GRADE, CODE_L2, SEMML25, SEMYL25, TERML2, END_L21, END_L22, NULL, SCHID_L2); %FILGRADE (GRADE, CODE_L2, SEMML26, SEMYL26, TERML2, END_L21, END_L22, NULL, SCHID_L2); %FILGRADE (GRADE, CODE_L2, SEMML27, SEMYL27, TERML2, END_L21, END_L22, NULL, SCHID_L2); %FILGRADE (GRADE, CODE_L3, SEMML31, SEMYL31, TERML3, END_L31, NULL, NULL, SCHID_L3); %FILGRADE (GRADE, CODE_L3, SEMML32, SEMYL32, TERML3, END_L31, NULL, NULL, SCHID_L3); /* 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); 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_L13, END_L13, 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_L13, END_L13, 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_L13, END_L13, 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_L13, END_L13, 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_L13, END_L13, 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; ******************* incorportate the prior info; data four; merge xin21.inPE_eventR20 (keep=pubid stat: term: deg: id:) three; by pubid; if Int2023_YR>0; ARRAY TYPE {0:335} TYPE0-TYPE335; ARRAY GRADE {0:335} GRADE0-GRADE335; ARRAY DIPLOMA {0:335} DIPLO0-DIPLO335; ARRAY FULLPART {0:335} FULL0-FULL335; ARRAY STATUS {0:335} STATUS0-STATUS335; ARRAY SCHOOLID {0:335} SCH_ID0-SCH_ID335; ARRAY TERMGRAD {0:335} TERMG0-TERMG335; ARRAY COLL_DEG {0:335} DEGR0-DEGR335; %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 to current round; array STAT (0:309) 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_202012 STAT_202101-STAT_202112 STAT_202201-STAT_202210; array TERM (0:309) 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_202012 TERM_202101-TERM_202112 TERM_202201-TERM_202210; array DEG (0:309) 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_202012 DEG_202101-DEG_202112 DEG_202201-DEG_202210; array ID (0:309) 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_202012 ID_202101-ID_202112 ID_202201-ID_202210; 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; *CHANGES FROM EVENTR19.SAS; 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. */ 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;