//REL NE 6.2.14 The impact of accelerated college credit programs on educational //attainment in Rhode Island //=========================================================== //=========================================================== ////Install packages for missing data analysis and propensity score matching ssc install mdesc ssc install psmatch2 clear all capture log close version 14 //Set file path for your computer cd "XXXXX" //CLEAN THE DATA FILES ///////////////////////////////////////////////////// // POSTSECONDARY DATA ///////////////////////////////////////////////////// // Import student high school data . import delimited "E:\6.2.14\Raw Data\20200515_Individual_Level_HS.csv", varnames(1) // drop variables that will be re-computed from college datasets drop enr_rem_math_ever - graduated_4yr_ins // Identify and drop pure duplicates. unab vlist : _all sort `vlist' quietly by `vlist': gen dup_all = cond(_N==1,0,_n) tab dup_all keep if dup_all == 0 | dup_all == 2 drop dup_all //identify duplicates on student ID and year sort anonid school_year quietly by anonid school_year : gen dup_id_yr = cond(_N == 1, 0, _n) tab dup_id_yr drop dup_id_yr //identify duplicates based on a subset of variables including id, school year, cohort, grade, school code// sort anonid school_year cohort grade school_code quietly by anonid school_year cohort grade school_code: gen dup = cond(_N == 1, 0, _n) tab dup save "full_data",replace drop if dup > 0 save "HS_1", replace //Create identifier for students who meet study cohort criteria ****Criteria: Student is in grade 9 for FIRST time in the appropriate year for their cohort ****Student does not have an earlier record in a grade higher than 9 ****Student was enrolled for at least 30 days (ADA >= 30) in the grade 9 record clear use "HS_1" keep anonid school_year grade tab grade egen sy = group(school_year) drop school_year reshape wide grade , i( anonid ) j(sy) ////indicator to select only students who were in grade 9 for the first time in the years 2012-2013, 2013-2014, 2014-2015, or 2015-2016// gen grade_9_present = 0 replace grade_9_present = 1 if grade3 == 9 | grade4 == 9| grade5 == 9 | grade6 == 9 replace grade_9_present = 0 if grade1 == 9 | grade2 == 9 tab grade_9_present ////Recode a new version of the cohort variable that has values for the on-time graduation year instead of the cohort number //// cohort 4 - 2019 graduation, cohort 3 - 2018, cohort 2 - 2017, 1- 2016) // ///Create an indicator grade_8_present: has a grade 8 enrollment record in the year before the first grade 9 record.///// gen cohort_grad_year = "" gen grade_8_present = 0 replace cohort_grad_year = "cohort1_2016" if grade3 == 9 & grade1 != 9 & grade2 != 9 replace grade_8_present = 1 if cohort_grad_year == "cohort1_2016" & grade2 == 8 replace cohort_grad_year = "cohort2_2017" if grade4 == 9 & grade1 != 9 & grade2 != 9 & grade3 != 9 replace grade_8_present = 1 if cohort_grad_year == "cohort2_2017" & grade3 == 8 replace cohort_grad_year = "cohort3_2018" if grade5 == 9 & grade1 != 9 & grade2 != 9 & grade3 != 9 & grade4 != 9 replace grade_8_present = 1 if cohort_grad_year == "cohort3_2018" & grade4 == 8 replace cohort_grad_year = "cohort4_2019" if grade6 == 9 & grade1 != 9 & grade2 != 9 & grade3!= 9 & grade4 != 9 & grade5 != 9 replace grade_8_present = 1 if cohort_grad_year == "cohort4_2019" & grade5 == 8 tab cohort_grad_year tab grade_8_present keep anonid grade_8_present grade_9_present cohort_grad_year save "grade_cohort", replace clear use "HS_1" merge m:1 anonid using "grade_cohort" tab grade_8_present tab grade_9_present // Create indicators of reasons for excluding cases egen sy = group(school_year) gen temp_disyr = 0 replace temp_disyr = 1 if grade > 9 & sy < 3 & cohort_grad_year == "cohort1_2016" replace temp_disyr = 1 if grade > 9 & sy < 4 & cohort_grad_year == "cohort2_2017" replace temp_disyr = 1 if grade > 9 & sy < 5 & cohort_grad_year == "cohort3_2018" replace temp_disyr = 1 if grade > 9 & sy < 6 & cohort_grad_year == "cohort4_2019" by anonid, sort: egen disordered_yr = max(temp_disyr) tab disordered_yr gen temp_ada = 0 replace temp_ada = 1 if grade == 9 & sum_ada < 30 & cohort_grad_year == "cohort1_2016" & sy == 3 replace temp_ada = 1 if grade == 9 & sum_ada < 30 & cohort_grad_year == "cohort2_2017" & sy == 4 replace temp_ada = 1 if grade == 9 & sum_ada < 30 & cohort_grad_year == "cohort3_2018" & sy == 5 replace temp_ada = 1 if grade == 9 & sum_ada < 30 & cohort_grad_year == "cohort4_2019" & sy == 6 by anonid, sort: egen ada_lt30 = max(temp_ada) tab ada_lt30 drop _merge temp_disyr temp_ada // save a file with all the cases and indicators of reasons for exclusion save "all_cases", replace // save as the working file to continue and drop cases outside our cohort definition save "HS_1", replace drop if grade_8_present == 0 drop if grade_9_present == 0 drop if disordered_yr == 1 drop if ada_lt30 == 1 save "HS_1", replace // CREATE DUMMY VARIABLES FOR TREATMENT: EVER ENROLLED IN DUAL/CONCURRENT/AP. //Indicators for ever enrolled in dual enrollment programs, by year// gen dual_enrolled = 1 replace dual_enrolled = 0 if inlist( dual_courses_enrolled, "0", "NA") tab dual_enrolled //Indicators for ever enrolled in concurrent courses, by year// gen concurrent_enrolled = 1 replace concurrent_enrolled = 0 if inlist( concur_courses_enrolled, "0", "NA") tab concurrent_enrolled //Indicators for ever took ap tests, by year// gen ap_enrolled = 1 replace ap_enrolled = 0 if inlist( num_ap_taken, "0", "NA") tab ap_enrolled sort anonid by anonid: egen total_dual_enrolled = total(dual_enrolled) by anonid: egen total_concurrent_enrolled = total(concurrent_enrolled) by anonid: egen total_ap_enrolled = total(ap_enrolled) // gen ever_dual_enrolled = 0 replace ever_dual_enrolled = 1 if total_dual_enrolled > 0 gen ever_concur_enrolled = 0 replace ever_concur_enrolled = 1 if total_concurrent_enrolled > 0 gen ever_ap_enrolled = 0 replace ever_ap_enrolled = 1 if total_ap_enrolled > 0 //REDEFINE VARIABLES FOR CHARACTERISTICS. //Chronic absence variable: If ADM is greater than 180, recode it to 180 for this calculation. // Then calculate the percentage ADA/ADM. If this is less than or equal to 90%, chronic absence = 1, otherwise 0. replace sum_adm = 180 if sum_adm > 180 gen percent = sum_ada / sum_adm gen chronic_absence = 0 replace chronic_absence = 1 if percent <= float(0.9) save "HS_3", replace ///create total_suspensions variable replace num_oss_sy = "0" if num_oss_sy == "NA" destring num_oss_sy, replace replace num_iss_sy = "0" if num_iss_sy == "NA" destring num_iss_sy, replace gen total_suspensions = num_oss_sy + num_iss_sy codebook total_suspensions gen suspensions = 0 replace suspensions = 1 if total_suspensions > 0 tab total_suspensions suspensions ///save dataset with analysis variables keep anonid district_code school_code chronic_absence iep_yn ell_yn ell_12 /// lunch_free lunch_red gender minority hs_diploma ever_dual_enrolled ever_concur_enrolled ever_ap_enrolled /// total_suspensions necap_ela_8g_s necap_math_8g_s /// cohort_grad_year school_year grade /// necap_ela_8g_achlv necap_math_8g_achlv suspensions cte_concentrator num_cte_courses sy ///destring variables replace hs_diploma = "" if hs_diploma == "NA" destring hs_diploma, replace replace necap_ela_8g_s = "" if necap_ela_8g_s == "NA" destring necap_ela_8g_s, replace replace necap_math_8g_s = "" if necap_math_8g_s == "NA" destring necap_math_8g_s, replace replace cte_concentrator = "" if cte_concentrator == "NA" destring cte_concentrator, replace replace num_cte_courses = "" if num_cte_courses == "NA" destring num_cte_courses, replace gen any_cte_enrolled = 0 replace any_cte_enrolled = 1 if num_cte_courses > 0 & num_cte_courses <. sort anonid by anonid: egen cte_courses_ever = sum(any_cte_enrolled) replace cte_courses_ever = 1 if cte_courses_ever > 0 & cte_courses_ever < . by anonid: egen cte_concentrator_ever = sum(cte_concentrator) replace cte_concentrator_ever = 1 if cte_concentrator_ever > 0 & cte_concentrator_ever < . //CREATE A LONG VERSION DATA FILE. ///Only keep students within any of our cohorts//// egen cohort = group(cohort_grad_year), label drop cohort_grad_year drop if cohort == . sort anonid school_year cohort quietly by anonid school_year cohort: gen dup = cond(_N==1,0,_n) tab dup drop if dup > 1 save "HS_long",replace // extract grade 8 values and grade 9 school, combine them into wide file clear use "HS_long" keep anonid district_code school_code school_year chronic_absence total_suspensions /// cohort iep_yn ell_yn ell_12 lunch_free lunch_red necap_ela_8g_s necap_math_8g_s /// suspensions sort anonid school_year quietly by anonid school_year: gen dup = cond(_N==1,0,_n) tab dup drop if dup > 1 drop dup destring school_code, replace save "temp1",replace clear use "temp1" keep if cohort == 1 keep if school_year == "2011-2012" drop district_code school_code cohort save "cohort1_8",replace ***grade 8 data for cohort1*** clear use "temp1" keep if cohort == 1 keep if school_year == "2012-2013" keep anonid district_code school_code cohort save "cohort1_9",replace ***grade 9 school and district data for cohort1*** clear use "cohort1_9" merge 1:m anonid using "cohort1_8" tab _merge drop if _merge == 2 drop _merge school_year save "cohort1", replace clear use "temp1" keep if cohort == 2 keep if school_year == "2012-2013" drop district_code school_code cohort save "cohort2_8",replace ***grade 8 data for cohort2*** clear use "temp1" keep if cohort == 2 keep if school_year == "2013-2014" keep anonid district_code school_code cohort save "cohort2_9",replace ***grade 9 school and district data for cohort2*** clear use "cohort2_9" merge 1:m anonid using "cohort2_8" tab _merge drop if _merge == 2 drop _merge school_year save "cohort2", replace clear use "temp1" keep if cohort == 3 keep if school_year == "2013-2014" drop district_code school_code cohort save "cohort3_8",replace ***grade 8 data for cohort3*** clear use "temp1" keep if cohort == 3 keep if school_year == "2014-2015" keep anonid district_code school_code cohort save "cohort3_9",replace ***grade 9 school and district data for cohort3*** clear use "cohort3_9" merge 1:m anonid using "cohort3_8" tab _merge drop if _merge == 2 drop _merge school_year save "cohort3", replace clear use "temp1" keep if cohort == 4 keep if school_year == "2014-2015" drop district_code school_code cohort save "cohort4_8",replace ***grade 8 data for cohort4*** clear use "temp1" keep if cohort == 4 keep if school_year == "2015-2016" keep anonid district_code school_code cohort save "cohort4_9",replace ***grade 9 school and district data for cohort4*** clear use "cohort4_9" merge 1:m anonid using "cohort4_8" tab _merge drop if _merge == 2 drop _merge school_year save "cohort4", replace clear use "cohort1" append using "cohort2" append using "cohort3" append using "cohort4" sort anonid cohort quietly by anonid: gen dup = cond(_N==1,0,_n) tab dup // KS 7-16 no dupes drop dup save "master_data", replace ***master_data has grade 8 values for student characteristic data & school and district data in grade 9 // identify IDs with same grade in multiple years clear use "HS_long" drop school_year district_code school_code chronic_absence total_suspensions suspensions /// cohort iep_yn ell_yn ell_12 lunch_free lunch_red /// necap_ela_8g_s necap_math_8g_s dup unab vlist : _all sort `vlist' quietly by `vlist': gen dup = cond(_N==1,0,_n) tab dup // KS 7-16 no dupes drop if dup > 1 drop dup // drop all but one case per ID (should be first case, grade 8 - or g9 for those with no g8 record) quietly by anonid: gen dup = cond(_N==1,0,_n) tab dup drop if dup > 1 drop dup save "using_data",replace ****using_data file contains enrollment data****** clear use "master_data" merge 1:m anonid using "using_data" tab _merge drop if _merge == 2 mdesc order anonid cohort drop _merge gen necap_available = 0 replace necap_available = 1 if necap_math_8g_s != . label var necap_available "whether students have a NECAP math score or not" label define mylabel 1 "Yes" 0 "No" label values necap_available mylabel tab necap_available save "HS_wide",replace ////compute total sum variables for each of these yearly values, merge the totals variables into the student wide dataset clear use "HS_3" keep anonid school_year concur_courses_enrolled concur_cred_hr_enrolled concur_cred_hr_earned /// dual_courses_enrolled dual_cred_hr_enrolled dual_cred_hr_earned num_ap_taken num_ap_passed ///destring variables to numeric/// replace concur_courses_enrolled= "" if concur_courses_enrolled == "NA" destring concur_courses_enrolled, replace replace concur_cred_hr_enrolled= "" if concur_cred_hr_enrolled == "NA" destring concur_cred_hr_enrolled, replace replace concur_cred_hr_earned= "" if concur_cred_hr_earned == "NA" destring concur_cred_hr_earned, replace replace dual_courses_enrolled= "" if dual_courses_enrolled == "NA" destring dual_courses_enrolled, replace replace dual_cred_hr_enrolled= "" if dual_cred_hr_enrolled == "NA" destring dual_cred_hr_enrolled, replace replace dual_cred_hr_earned= "" if dual_cred_hr_earned == "NA" destring dual_cred_hr_earned, replace replace num_ap_taken= "" if num_ap_taken == "NA" destring num_ap_taken, replace replace num_ap_passed= "" if num_ap_passed == "NA" destring num_ap_passed, replace ////sum up total numbers by each student/// egen n_concur_enrolled_all = sum(concur_courses_enrolled), by(anonid) label variable n_concur_enrolled_all "total number of concurrent courses enrolled all years" egen n_concur_cred_enrolled_all = sum(concur_cred_hr_enrolled), by(anonid) label variable n_concur_cred_enrolled_all "total number of credit hours enrolled all years" egen n_concur_cred_erned_all = sum(concur_cred_hr_earned), by(anonid) label variable n_concur_cred_erned_all "total number of concurrent credit hours earned all years" egen n_dual_enrolled_all = sum(dual_courses_enrolled), by(anonid) label variable n_dual_enrolled_all "total number of dual courses enrolled all years" egen n_dual_cred_enrolled_all = sum(dual_cred_hr_enrolled), by(anonid) label variable n_dual_cred_enrolled_all "total number of dual credit hours enrolled all years" egen n_dual_cred_erned_all = sum(dual_cred_hr_earned), by(anonid) label variable n_dual_cred_erned_all "total number of dual credit hours earned all years" egen n_ap_taken_all = sum(num_ap_taken), by(anonid) label variable n_ap_taken_all "total number of AP exams taken all years" egen n_ap_passed_all = sum(num_ap_passed), by(anonid) label variable n_ap_passed_all "total number of AP exams passed all years" drop school_year concur_courses_enrolled concur_cred_hr_enrolled concur_cred_hr_earned dual_courses_enrolled dual_cred_hr_enrolled dual_cred_hr_earned num_ap_taken num_ap_passed sort anonid quietly by anonid: gen dup = cond(_N==1,0,_n) tab dup drop if dup > 1 drop dup codebook anonid save"HS_total_courses",replace clear use "HS_wide" merge 1:m anonid using "HS_total_courses" tab _merge drop if _merge == 2 drop _merge save "HS_wide", replace //// High school data: Some data were incomplete and researchers supplemented the RIDE file //// with information found through internet search. This step merges those data from separate file //// clear import excel "E:\6.2.14\Output\dist_locale.xls", sheet("lea_demo") firstrow keep distcode distname location destring distcode, replace save "locale",replace clear import delimited "E:\6.2.14\Analytic Data\20200609_schoolcharacteristics_XZrev.csv", varnames(1) encoding(ISO-8859-2) merge m:1 distcode using "locale" tab _merge drop if _merge == 2 drop _merge tab location replace locale = location if locale == "#N/A" | locale == "N" replace locale = "rural" if locale == "Rural: Distant" | locale == "Rural: Fringe" replace locale = "suburban" if locale == "Suburb: Large" | locale == "Suburb: Midsize" | locale == "surburban" replace locale = "urban" if locale == "City: Midsize" | locale == "City: Small" tab locale replace star = "" if star == "NA" | star == "NULL" destring star, replace replace dual_rate = "" if dual_rate == "NA" destring dual_rate, replace replace concurrent_rate = "" if concurrent_rate == "NA" destring concurrent_rate, replace replace distpse = "" if distpse == "NA" destring distpse, replace replace grad ="" if grad == "NA" destring grad, replace drop dual_count concurrent_count rename schcode school_code drop address location save "school_level",replace mdesc keep if school_year == "2018-2019" mdesc keep school_code star save "star",replace /////Merge school data into the student wide dataset. We want to merge only ONE set of school records /// /// into the student wide dataset, based on the student’s grade 9 school code. ///cohort1_2016 using 2012-2013, cohort2_2017 using 2013-2014, cohort3_2018 using 2014-2015 ////cohort4_2019 using 2015-2016 ///note: Star data were only available for 2018-2019 year /// dual and concurrent rate using the year of grade 12 for the student' cohort /// e.g. cohort1_2016 using 2015-2016, cohort2_2017 using 2016-2017, cohort3_2018 using 2017-2018, /// cohort4_2019 using 2018-2019 clear use "HS_wide" merge m:m school_code using "star" tab _merge drop if _merge == 2 drop _merge save "HS_wide", replace codebook anonid ***cohort1 clear use "school_level" tab school_year keep if school_year == "2012-2013" drop star dual_rate concurrent_rate school_year save "cohort1",replace clear use "HS_wide" keep if cohort == 1 merge m:1 school_code using "cohort1" tab _merge drop if _merge == 2 drop _merge save "cohort1", replace clear use "school_level" keep if school_year == "2015-2016" keep school_code dual_rate concurrent_rate save "rate",replace clear use "cohort1" merge m:1 school_code using "rate" tab _merge drop if _merge == 2 drop _merge mdesc save "cohort1", replace ***cohort2 clear use "school_level" keep if school_year == "2013-2014" drop star dual_rate concurrent_rate school_year save "cohort2",replace clear use "HS_wide" keep if cohort == 2 merge m:1 school_code using "cohort2" tab _merge drop if _merge == 2 drop _merge save "cohort2", replace clear use "school_level" keep if school_year == "2016-2017" keep school_code dual_rate concurrent_rate save "rate",replace clear use "cohort2" merge m:1 school_code using "rate" tab _merge drop if _merge == 2 drop _merge mdesc save "cohort2", replace ***cohort3 clear use "school_level" keep if school_year == "2014-2015" drop star dual_rate concurrent_rate school_year save "cohort3",replace clear use "HS_wide" keep if cohort == 3 merge m:1 school_code using "cohort3" tab _merge drop if _merge == 2 drop _merge save "cohort3", replace clear use "school_level" keep if school_year == "2017-2018" keep school_code dual_rate concurrent_rate save "rate",replace clear use "cohort3" merge m:1 school_code using "rate" tab _merge drop if _merge == 2 drop _merge mdesc save "cohort3", replace ***cohort4 clear use "school_level" keep if school_year == "2015-2016" drop star dual_rate concurrent_rate school_year save "cohort4",replace clear use "HS_wide" keep if cohort == 4 merge m:1 school_code using "cohort4" tab _merge drop if _merge == 2 drop _merge save "cohort4", replace clear use "school_level" keep if school_year == "2018-2019" keep school_code dual_rate concurrent_rate save "rate",replace clear use "cohort4" merge m:1 school_code using "rate" tab _merge drop if _merge == 2 drop _merge mdesc save "cohort4", replace clear use "cohort1" append using "cohort2" append using "cohort3" append using "cohort4" mdesc drop distcode distname save "HS_wide",replace // identify and flag cases with no grade 8 enrollment which will be dropped // note: this will also flag a small number of cases with a g8 enrollment that is more than 1 yr prior to grade 9 // these cases are identified by the missing iep data gen no_grade_8 = 0 replace no_grade_8 = 1 if grade == 9 replace no_grade_8 = 1 if iep_yn == . tab no_grade_8 replace hs_diploma = 0 if hs_diploma == . drop if schname == "" //flag cases school codes that are a general district code not linked to a specific high school gen nonspecific_school = 0 replace nonspecific_school = 1 if distpse == . tab nonspecific_school drop dual_rate concurrent_rate save "HS_wide",replace ////Calculate dual and concurrent enrollment rate by each school ///// clear use "HS_wide" keep if cohort == 1 drop if nonspecific_school ==1 drop if no_grade_8 == 1 sort school_code by school_code: egen total_student = count(anonid) by school_code: egen total_dual_sch = sum(ever_dual_enrolled) by school_code: egen total_concur_sch = sum(ever_concur_enrolled) gen dual_rate = total_dual_sch / total_student gen concurrent_rate = total_concur_sch / total_student save "c1",replace clear use "HS_wide" keep if cohort == 2 drop if nonspecific_school ==1 drop if no_grade_8 == 1 sort school_code by school_code: egen total_student = count(anonid) by school_code: egen total_dual_sch = sum(ever_dual_enrolled) by school_code: egen total_concur_sch = sum(ever_concur_enrolled) gen dual_rate = total_dual_sch / total_student gen concurrent_rate = total_concur_sch / total_student save "c2",replace clear use "HS_wide" keep if cohort == 3 drop if nonspecific_school ==1 drop if no_grade_8 == 1 sort school_code by school_code: egen total_student = count(anonid) by school_code: egen total_dual_sch = sum(ever_dual_enrolled) by school_code: egen total_concur_sch = sum(ever_concur_enrolled) gen dual_rate = total_dual_sch / total_student gen concurrent_rate = total_concur_sch / total_student save "c3",replace clear use "HS_wide" keep if cohort == 4 drop if nonspecific_school ==1 drop if no_grade_8 == 1 sort school_code by school_code: egen total_student = count(anonid) by school_code: egen total_dual_sch = sum(ever_dual_enrolled) by school_code: egen total_concur_sch = sum(ever_concur_enrolled) gen dual_rate = total_dual_sch / total_student gen concurrent_rate = total_concur_sch / total_student save "c4",replace append using "c1" append using "c2" append using "c3" // calculate grand mean of NECAP grade 8 standardized test score on the analytic sample after dropping excluded cases drop if necap_math_8g_s < 800 sum necap_math_8g_s, meanonly gen cnecap = necap_math_8g_s - r(mean) save "temp_rates", replace clear use "HS_wide" // merge in the rates and cnecap merge m:1 anonid using "temp_rates" tab _merge drop _merge gen dual_only = 0 replace dual_only = 1 if ever_dual_enrolled == 1 & ever_concur_enrolled == 0 & ever_ap_enrolled == 0 gen concur_only = 0 replace concur_only = 1 if ever_concur_enrolled == 1 & ever_dual_enrolled == 0 & ever_ap_enrolled == 0 gen t = 0 replace t = 1 if ever_dual_enrolled == 1 | ever_concur_enrolled == 1 | ever_ap_enrolled == 1 gen dual_and_concur = 0 replace dual_and_concur = 1 if ever_dual_enrolled == 1 & ever_concur_enrolled == 1 & ever_ap_enrolled == 0 gen ap_only = 0 replace ap_only = 1 if ever_ap_enrolled == 1 & ever_concur_enrolled == 0 & ever_dual_enrolled == 0 gen mult_pros = 0 replace mult_pros = 1 if t == 1 & dual_only == 0 & concur_only == 0 & ap_only == 0 gen iep_lunch = iep_yn * lunch_free // create dummy indicator for cases that will be used in analytic sample replace necap_available = 0 if cnecap == . gen oursample = 1 replace oursample = 0 if no_grade_8 == 1 replace oursample = 0 if nonspecific_school == 1 replace oursample = 0 if necap_available == 0 & cohort != 4 tab oursample tab cohort oursample drop grade sy // save a version with cohort 4 and other cases missing necap save "wide_fulldata_C1234_0720", replace clear use "wide_fulldata_C1234_0720" drop necap_ela_8g_s drop if cnecap == . drop if no_grade_8 == 1 drop if nonspecific_school == 1 save "wide_C123_0720",replace ***latest version of analytic wide file*** // save indicators for reasons for dropping cases back into the full record long file clear use "wide_fulldata_C1234_0720" keep anonid oursample no_grade_8 nonspecific_school necap_available save "wide_0720_temp", replace clear use "all_cases" merge m:1 anonid using "wide_0720_temp" recode oursample no_grade_8 nonspecific_school necap_available (. = 0) tab _merge oursample tab disordered_yr _merge tab ada_lt30 _merge //checked to confirm that we have a reason for all cases dropped from sample gen dropsum = 0 replace dropsum = (dropsum+1) if disordered_yr == 1 replace dropsum = (dropsum+1) if ada_lt30 == 1 replace dropsum = (dropsum+1) if necap_available == 0 replace dropsum = (dropsum+1) if no_grade_8 == 1 replace dropsum = (dropsum+1) if nonspecific_school == 1 tab dropsum tab dropsum oursample drop dropsum _merge save "all_cases", replace ///////////////////////////////////////////////////// // POSTSECONDARY DATA ///////////////////////////////////////////////////// ////open the postsecondary data file clear import delimited "E:\6.2.14\Raw Data\20200708_2_Individual_Level_HE.csv", varnames(1) encoding(ISO-8859-2) //check duplicates on id and school year ///// // Note that in each duplicate pair, // one case is the same on all values EXCEPT it is NA on one variable instead of 0/1 // and for a few of the pairs, it is 'public' instead of 'private // We want to drop the case that is NA and keep the one that has data in it sort anonid school_year case_2yr_ins quietly by anonid school_year: gen dup = cond(_N==1,0,_n) tab dup drop if dup == 2 // this drops the last dupe case with the NA data drop dup cohort //clean up variables replace enr_rem_ever = "" if enr_rem_ever == "NA" destring enr_rem_ever, replace replace enr_rem_math_ever = "" if enr_rem_math_ever == "NA" destring enr_rem_math_ever, replace replace enr_rem_eng_ever = "" if enr_rem_eng_ever == "NA" destring enr_rem_eng_ever, replace replace case_2yr_ins = "" if case_2yr_ins == "NA" destring case_2yr_ins, replace replace case_4yr_ins = "" if case_4yr_ins == "NA" destring case_4yr_ins, replace replace enroll_1yr_after_hs = "" if enroll_1yr_after_hs == "NA" destring enroll_1yr_after_hs, replace replace enroll_2yr_after_hs = "" if enroll_2yr_after_hs == "NA" destring enroll_2yr_after_hs, replace replace enroll_1yr = "" if enroll_1yr == "NA" destring enroll_1yr, replace replace enroll_2yr = "" if enroll_2yr == "NA" destring enroll_2yr,replace replace enroll_mos_after_grad = "" if enroll_mos_after_grad == "NA" destring enroll_mos_after_grad, replace replace total_mos_enrolled = "" if total_mos_enrolled == "NA" destring total_mos_enrolled, replace replace total_mos_enrolled_year = "" if total_mos_enrolled_year == "NA" destring total_mos_enrolled_year, replace replace enroll_9_mos_plus = "" if enroll_9_mos_plus == "NA" destring enroll_9_mos_plus, replace replace enroll_13_mos_plus = "" if enroll_13_mos_plus == "NA" destring enroll_13_mos_plus, replace replace persisitence_2nd_year = "" if persisitence_2nd_year == "NA" destring persisitence_2nd_year, replace replace graduated_2yr_ins = "" if graduated_2yr_ins == "NA" destring graduated_2yr_ins, replace replace graduated_4yr_ins = "" if graduated_4yr_ins == "NA" destring graduated_4yr_ins, replace replace enroll_2yr_ins_1yr_after_grad = "" if enroll_2yr_ins_1yr_after_grad == "NA" destring enroll_2yr_ins_1yr_after_grad, replace replace enroll_4yr_ins_2yr_after_grad = "" if enroll_4yr_ins_2yr_after_grad == "NA" destring enroll_4yr_ins_2yr_after_grad, replace replace sems_enr_rem_eng_yr = "" if sems_enr_rem_eng_yr == "NA" destring sems_enr_rem_eng_yr, replace replace sems_enr_rem_math_yr = "" if sems_enr_rem_math_yr == "NA" destring sems_enr_rem_math_yr, replace replace num_rem_eng_yr = "" if num_rem_eng_yr == "NA" destring num_rem_eng_yr, replace replace num_rem_math_yr = "" if num_rem_math_yr == "NA" destring num_rem_math_yr, replace replace enr_rem_yr = "" if enr_rem_yr == "NA" destring enr_rem_yr, replace //create indicator of remediation during high school // *years in this code are only valid for cohort 2 gen rem_during_hs_yr = 0 replace rem_during_hs_yr = 1 if enr_rem_yr == 1 & (school_year == "2012-2013" /// | school_year == "2013-2014" | school_year == "2014-2015" /// | school_year == "2015-2016" | school_year == "2016-2017") sort anonid by anonid: egen rem_during_hs = max(rem_during_hs_yr) gen col_during_hs_yr = 0 replace col_during_hs_yr = 1 if (enr_rem_yr == 1 | enr_rem_yr ==0) & (school_year == "2012-2013" /// | school_year == "2013-2014" | school_year == "2014-2015" /// | school_year == "2015-2016" | school_year == "2016-2017") sort anonid by anonid: egen col_during_hs = max(col_during_hs_yr) save "he_data_temp", replace // retain variables needed for students who do not have college data after high school years clear use "he_data_temp" keep anonid rem_during_hs col_during_hs sort anonid quietly by anonid: gen dupx = cond(_N==1,0,_n) tab dupx drop if dupx >1 drop dupx save "he_data_during_hs" , replace clear use "he_data_temp" ///keep data from SY 2017-18 or later // drop years that should be during high school for cohort 2 (class of 2017) drop if school_year == "2012-2013" | school_year == "2013-2014" | school_year == "2014-2015" /// | school_year == "2015-2016" | school_year == "2016-2017" // create versions of needed college variables that have same value on all years for the anonid // Note that NSC variables are incomplete because they do not include all enrollments shown in RIOPC files // some of them are also missing inconsistently with other NSC variables // first_college_type has fewest missing cases, enroll_1_yr_after_hs more missing // Values for some OPC year records are NA on NSC variables // OPC remediation 'ever' variables have NA for some years, create new version applying value to all years// sort anonid by anonid: egen enr_rem_ever_max = max(enr_rem_ever) by anonid: egen enr_rem_math_ever_max = max(enr_rem_math_ever) by anonid: egen enr_rem_eng_ever_max = max(enr_rem_eng_ever) // create indicator for first college enrollment record falling during high school years based on enroll_mos_after_grad sort anonid by anonid: egen enroll_mos_after_grad_nsc = max(enroll_mos_after_grad) gen col_during_hs_negmos = 0 replace col_during_hs_negmos = 1 if enroll_mos_after_grad_nsc < 0 & enroll_mos_after_grad_nsc !=. gen first_coll_type_n = -8 replace first_coll_type_n = 0 if first_college_type == "Less Than 2 Years" replace first_coll_type_n = 1 if first_college_type == "2-year" replace first_coll_type_n = 2 if first_college_type == "4-year" replace first_coll_type_n = -99 if first_college_type == "NA" sort anonid by anonid: egen first_coll_type_nsc = max(first_coll_type_n) gen first_public = 0 gen first_private = 0 replace first_public = 1 if first_publicprivate == "Public" replace first_private = 1 if first_publicprivate == "Private" replace first_public = -99 if first_publicprivate == "NA" replace first_private = -99 if first_publicprivate == "NA" recode first_public first_private (0 = -8) if first_publicprivate == "" sort anonid by anonid: egen first_public_nsc = max(first_public) by anonid: egen first_private_nsc = max(first_private) sort anonid by anonid: egen case_2yr_ins_nsc = max(case_2yr_ins) by anonid: egen case_4yr_ins_nsc = max(case_4yr_ins) by anonid: egen enroll_1yr_after_hs_nsc = max(enroll_1yr_after_hs) by anonid: egen enroll_2yr_after_hs_nsc = max(enroll_2yr_after_hs) by anonid: egen enroll_1yr_cont_nsc = max(enroll_1yr) by anonid: egen enroll_2yr_cont_nsc = max(enroll_2yr) by anonid: egen total_mos_enrolled_nsc = max(total_mos_enrolled) by anonid: egen enroll_9_mos_plus_nsc = max(enroll_9_mos_plus) by anonid: egen enroll_13_mos_plus_nsc = max(enroll_13_mos_plus) by anonid: egen persisitence_2nd_year_nsc = max(persisitence_2nd_year) by anonid: egen graduated_2yr_ins_nsc = max(graduated_2yr_ins) by anonid: egen graduated_4yr_ins_nsc = max(graduated_4yr_ins) by anonid: egen enroll_2yr_ins_1yr_post_grad_nsc = max(enroll_2yr_ins_1yr_after_grad) by anonid: egen enroll_4yr_ins_2yr_post_grad_nsc = max(enroll_4yr_ins_2yr_after_grad) // checking the match between max value (applied across all cases for the student) and year values tab case_2yr_ins_nsc case_2yr_ins tab case_4yr_ins_nsc case_4yr_ins tab enroll_1yr_after_hs_nsc enroll_1yr_after_hs tab enroll_2yr_after_hs_nsc enroll_2yr_after_hs tab enroll_1yr_cont_nsc enroll_1yr tab enroll_2yr_cont_nsc enroll_2yr tab enroll_9_mos_plus_nsc enroll_9_mos_plus tab enroll_13_mos_plus_nsc enroll_13_mos_plus tab persisitence_2nd_year_nsc persisitence_2nd_year tab graduated_2yr_ins_nsc graduated_2yr_ins tab graduated_4yr_ins_nsc graduated_4yr_ins tab enroll_2yr_ins_1yr_post_grad_nsc enroll_2yr_ins_1yr_after_grad tab enroll_4yr_ins_2yr_post_grad_nsc enroll_4yr_ins_2yr_after_grad sum enroll_mos_after_grad_nsc sum enroll_mos_after_grad sum total_mos_enrolled_nsc sum total_mos_enrolled // create indicators of whether student ID has any OPC or any NSC data for any year gen nsc_yes = 0 replace nsc_yes = 1 if first_coll_type_n != -99 | enroll_1yr_after_hs != . tab nsc_yes gen opc_yes = 0 replace opc_yes = 1 if enr_rem_ever_max !=. tab opc_yes tab nsc_yes opc_yes ////create "ever_college_enrolled"- whether students ever enrolled in colleges after HS // corrects for any cases with remediation variables from OPC but no NSC data on college // note that first_college_type has least missing data of the NSC variables //"ever_ri_enrolled" - whether students ever enrolled in RI colleges after HS gen ever_ri_enrolled = 0 replace ever_ri_enrolled = 1 if (enr_rem_ever_max >= 0 & enr_rem_ever_max != .) tab ever_ri_enrolled gen ever_college_enrolled = 0 replace ever_college_enrolled = 1 if first_college_type != "NA" replace ever_college_enrolled = 1 if (enr_rem_ever_max >= 0 & enr_rem_ever_max != .) tab ever_college_enrolled ////keep the most recent year data if students have duplicates on id and school_year // Sort by enr_rem_ever so that any 0/1/NA mismatches across years put the NA last sort anonid school_year enr_rem_ever quietly by anonid: gen dup3 = cond(_N==1,0,_n) tab dup3 // create recoded indicator of persistence to 2nd year that includes RIOPC enrollment // there are a few cases with a record containing OPC data & no NSC data // in 2017-2018 (1st yr after HS grad) // and also have an NSC record for 2018-2019 (2nd yr after HS grad) // This new variables counts these students as persisting into 2nd year // We cannot tell if enrollment was continuous or number of months gen persist_2nd_yr_rev= persisitence_2nd_year_nsc replace persist_2nd_yr_rev = 1 if persisitence_2nd_year_nsc !=1 & opc_yes == 1 & dup3 >0 tab persist_2nd_yr_rev drop if dup3 == 2 drop dup3 // drop all variables with year-specific values drop school_year col_during_hs col_during_hs_yr rem_during_hs /// rem_during_hs_yr enr_rem_math_ever enr_rem_eng_ever enr_rem_ever first_college_type /// first_publicprivate case_2yr_ins case_4yr_ins enroll_1yr_after_hs enroll_2yr_after_hs enroll_1yr /// enroll_2yr enroll_mos_after_grad total_mos_enrolled enroll_9_mos_plus /// enroll_13_mos_plus persisitence_2nd_year graduated_2yr_ins graduated_4yr_ins /// first_private first_public first_coll_type_n sems_enr_rem_eng_yr /// sems_enr_rem_math_yr num_rem_eng_yr num_rem_math_yr enr_rem_yr /// enroll_2yr_ins_1yr_after_grad enroll_4yr_ins_2yr_after_grad total_mos_enrolled_year //note that the following variables have values of zero in original year-record variable // dropping here to avoid confusion but if future version of dataset has nonzero values, they should be retained drop enroll_1yr_cont_nsc enroll_2yr_cont_nsc enroll_2yr_ins_1yr_post_grad_nsc enroll_4yr_ins_2yr_post_grad_nsc save "he_data_temp",replace ///open the analytical data file and keep cohort 2 only clear use "wide_C123_0720" keep if cohort == 2 ///merge the updated postsecondary data into the analytical data file merge m:1 anonid using "he_data_temp" drop if _merge == 2 // drops cases that are in postsecondary file but not in this version of sample drop _merge // merge the data on college enrollment during high school merge m:1 anonid using "he_data_during_hs" drop if _merge == 2 // drops cases that are in the high school or postsecondary data file but not in this version of sample drop _merge // recode missing to zero on college variables (will be missing on students not appearing in college file) // do not recode the month variables (enroll_mos_after_grad_nsc total_mos_enrolled_nsc) since they have true zero values recode enr_rem_ever_max ( . = 0 ) recode enr_rem_math_ever_max ( . = 0 ) recode enr_rem_eng_ever_max ( . = 0 ) recode col_during_hs_negmos ( . = 0 ) recode first_coll_type_nsc ( . = 0 ) recode first_public_nsc ( . = 0 ) recode first_private_nsc ( . = 0 ) recode case_2yr_ins_nsc ( . = 0 ) recode case_4yr_ins_nsc ( . = 0 ) recode enroll_1yr_after_hs_nsc ( . = 0 ) recode enroll_2yr_after_hs_nsc ( . = 0 ) recode enroll_9_mos_plus_nsc ( . = 0 ) recode enroll_13_mos_plus_nsc ( . = 0 ) recode persisitence_2nd_year_nsc ( . = 0 ) recode graduated_2yr_ins_nsc ( . = 0 ) recode graduated_4yr_ins_nsc ( . = 0 ) recode nsc_yes ( . = 0 ) recode opc_yes ( . = 0 ) recode ever_ri_enrolled ( . = 0 ) recode ever_college_enrolled ( . = 0 ) recode persist_2nd_yr_rev ( . = 0 ) recode rem_during_hs ( . = 0 ) recode col_during_hs ( . = 0 ) save "cohort2_updated_HE_0720.dta", replace //////////////////////////////////////////////////////////////////////// // PROPENSITY SCORE ESTIMATION //////////////////////////////////////////////////////////////////////// clear use "cohort2_updated_HE_0720.dta" rename gender male gen log_enroll_count = log(enroll_count) gen suburban = 1 if locale == "suburban" replace suburban = 0 if suburban == . gen urban = 1 if locale == "urban" replace urban = 0 if urban == . gen rural = 1 if locale == "rural" replace rural = 0 if rural == . gen urban_ring= 1 if locale == "urban-ring" replace urban_ring = 0 if urban_ring == . // add interaction terms //gen iep_lunch = iep_yn * lunch_free gen cnecap_iep = iep_yn*cnecap gen cnecap_ell = ell_yn*cnecap gen cnecap_lunch = lunch_free*cnecap gen cnecap_male = male*cnecap gen cnecap_min = minority*cnecap gen male_minority = male*minority gen minority_lunch = minority*lunch_free keep if cohort == 2 // baseline equivalence BEFORE matching pstest cnecap iep_yn ell_yn lunch_free chronic_absence suspensions male minority /// enroll_count log_enroll_count poverty ell iep distpse concurrent_rate dual_rate /// suburban rural urban_ring, treated(t) raw graph // propensity score estimation melogit t cnecap iep_yn ell_yn lunch_free chronic_absence suspensions male minority /// log_enroll_count distpse suburban rural|| school_code: // Store the regression coefficient (logit) for TREATMENT for each student // and store caliper of 0.20 SD predict pscore_v8 summarize pscore_v8 scalar cal = r(sd)*0.20 // perform propensity score matching set seed 7434 generate x=uniform() sort x psmatch2 t, pscore(pscore_v8) noreplacement caliper(`=scalar(cal)') // histogram of pscores in matched sample psgraph // balance tests on covariates listed pstest cnecap iep_yn ell_yn lunch_free chronic_absence suspensions male minority /// enroll_count log_enroll_count poverty ell iep distpse concurrent_rate dual_rate /// suburban rural urban_ring star gen matched = _weight replace matched = 0 if _weight == . tab matched t tab schname matched keep if _weight ==1 save "cohort2_pscorev8_matchL", replace ///////////////////////////////////////////////////////////////// // COHORT 2: TREATMENT ESTIMATION: HIGH SCHOOL GRADUATION **1. Impact Analysis Model *Fit the analysis model melogit hs_diploma i.t cnecap lunch_free minority poverty ell iep || school_code: , or estat ic *Calculate Average Adjusted Predictions for Treatment margins t *Calculate Marginal Effect of Treatment margins, dydx(t) // Sensitivity analysis *Fit the simplar model with no school level covariates nor variables to be included as moderators melogit hs_diploma i.t cnecap || school_code: , or estat ic *Calculate Average Adjusted Predictions for Treatment margins t *Calculate Marginal Effect of Treatment margins, dydx(t) **2. Moderator Analysis Model: Minority *Fit the minority-as-moderator model melogit hs_diploma ib0.t cnecap lunch_free ib0.minority ib0.t#ib0.minority poverty ell iep || school_code: , or baselevels estat ic *Calculate Average Adjusted Predictions for Treatment margins t *Calculate Marginal Effect of Treatment margins, dydx(t) *Calculate Adjusted Predictions for each subgroup, as a function of Treatment margins minority, at(t=(0 1)) marginsplot *Calculate Marginal Effect of Treatment, for each subgroup margins, dydx(t) at(minority=(0 1)) marginsplot **3. Moderator Analysis Model: Economically disadvantaged (free or reduced lunch eligible) Fit the lunch_free-as-moderator model melogit hs_diploma ib0.t cnecap ib0.lunch_free ib0.t#ib0.lunch_free minority poverty ell iep || school_code: , or baselevels estat ic *Calculate Average Adjusted Predictions for Treatment margins t *Calculate Marginal Effect of Treatment margins, dydx(t) *Calculate Adjusted Predictions for each subgroup, as a function of Treatment margins lunch_free, at(t=(0 1)) marginsplot *Calculate Marginal Effect of Treatment, for each subgroup margins, dydx(t) at(lunch_free=(0 1)) marginsplot *Fit the prior academic achievement-as-moderator model *First, in preparation to this analysis, descriptives for grade 8 math assessment score (cnecap) are performed summarize cnecap, detail hist cnecap *NOTE: Most cnecap values fall between -20 and +20. As such, the values in that range will be used for margins. melogit hs_diploma ib0.t c.cnecap ib0.t#c.cnecap lunch_free minority poverty ell iep || school_code: , or baselevels estat ic *Calculate Average Adjusted Predictions for Treatment margins t *Calculate Marginal Effect of Treatment margins, dydx(t) *Calculate Adjusted Predictions for Treatment and Comparison, at different representative values of cnecap. margins t, at(cnecap=(-20 -10 0 10 20)) marginsplot *Calculate Marginal Effect of Treatment, at different representative calues of cnecap. margins, dydx(t) at(cnecap=(-20 -10 0 10 20)) marginsplot /////relationships between participation in each of the 3 treatment programs and outcome ////"ever" in indicator: ever dual enrollment, ever concurrent enrollment, ever AP, none melogit hs_diploma i.ever_dual_enrolled i.ever_concur_enrolled i.ever_ap_enrolled /// cnecap lunch_free minority poverty ell iep || school_code: , or baselevels *Calculate Average Adjusted Predictions for ever DE margins ever_dual_enrolled *Calculate Marginal Effect of Treatment for ever DE margins, dydx(ever_dual_enrolled) *Calculate Average Adjusted Predictions for ever CE margins ever_concur_enrolled *Calculate Marginal Effect of Treatment for ever CE margins, dydx(ever_concur_enrolled) *Calculate Average Adjusted Predictions for ever AP margins ever_ap_enrolled *Calculate Marginal Effect of Treatment for ever AP margins, dydx(ever_ap_enrolled) //// SENSITIVITY ANALYSES ////Mutually exclusive categories: Only DE, only CE, only AP, multiple programs, none *create a factor variable for these 5 categories. gen prog_category = . replace prog_category = 1 if dual_only==1 replace prog_category = 2 if concur_only==1 replace prog_category = 3 if ap_only==1 replace prog_category = 4 if mult_pros==1 replace prog_category = 0 if (dual_only==0 & concur_only==0 & ap_only==0 & mult_pros==0) melogit hs_diploma ib0.prog_category /// cnecap lunch_free minority poverty ell iep || school_code: , or baselevels *Calculate Average Adjusted Predictions for each program category margins prog_category ///////////////////////////////////////////////////////////////////// // COHORT 2: TREATMENT ESTIMATION: ENROLLED COLLEGE (WITHIN ONE YEAR AFTER HIGH SCHOOL) **1. Impact Analysis Model *Fit the analysis model melogit ever_college_enrolled i.t cnecap lunch_free minority poverty ell iep || school_code: , or estat ic *Calculate Average Adjusted Predictions for Treatment margins t *Calculate Marginal Effect of Treatment margins, dydx(t) // Sensitivity analysis *Fit model with no school level covariates nor variables to be included as moderators melogit ever_college_enrolled i.t cnecap || school_code: , or estat ic *Calculate Average Adjusted Predictions for Treatment margins t *Calculate Marginal Effect of Treatment margins, dydx(t) **2. Moderator Analysis Model: Minority *Fit the minority-as-moderator model melogit ever_college_enrolled ib0.t cnecap lunch_free ib0.minority ib0.t#ib0.minority poverty ell iep || school_code: , or baselevels estat ic *Calculate Average Adjusted Predictions for Treatment margins t *Calculate Marginal Effect of Treatment margins, dydx(t) *Calculate Adjusted Predictions for each subgroup, as a function of Treatment margins minority, at(t=(0 1)) marginsplot *Calculate Marginal Effect of Treatment, for each subgroup margins, dydx(t) at(minority=(0 1)) marginsplot **3. Moderator Analysis Model: economically disadvantaged (eligible for free/reduced lunch) *Fit the lunch_free-as-moderator model melogit ever_college_enrolled ib0.t cnecap ib0.lunch_free ib0.t#ib0.lunch_free minority poverty ell iep || school_code: , or baselevels estat ic *Calculate Average Adjusted Predictions for Treatment margins t *Calculate Marginal Effect of Treatment margins, dydx(t) *Calculate Adjusted Predictions for each subgroup, as a function of Treatment margins lunch_free, at(t=(0 1)) marginsplot *Calculate Marginal Effect of Treatment, for each subgroup margins, dydx(t) at(lunch_free=(0 1)) marginsplot *Fit the grade 8 math score-as-moderator model melogit ever_college_enrolled ib0.t c.cnecap ib0.t#c.cnecap lunch_free minority poverty ell iep || school_code: , or baselevels estat ic *Calculate Average Adjusted Predictions for Treatment margins t *Calculate Marginal Effect of Treatment margins, dydx(t) *Calculate Adjusted Predictions for Treatment and Comparison, at different representative values of cnecap. margins t, at(cnecap=(-20 -10 0 10 20)) marginsplot *Calculate Marginal Effect of Treatment, at different representative calues of cnecap. margins, dydx(t) at(cnecap=(-20 -10 0 10 20)) marginsplot /////relationships between participation in each of the 3 treatment programs and outcome ////"ever" in indicator: ever dual enrollment, ever concurrent enrollment, ever AP, none melogit ever_college_enrolled i.ever_dual_enrolled i.ever_concur_enrolled i.ever_ap_enrolled /// cnecap lunch_free minority poverty ell iep || school_code: , or baselevels *Calculate Average Adjusted Predictions for ever DE margins ever_dual_enrolled *Calculate Marginal Effect of Treatment for ever DE margins, dydx(ever_dual_enrolled) *Calculate Average Adjusted Predictions for ever CE margins ever_concur_enrolled *Calculate Marginal Effect of Treatment for ever CE margins, dydx(ever_concur_enrolled) *Calculate Average Adjusted Predictions for ever AP margins ever_ap_enrolled *Calculate Marginal Effect of Treatment for ever AP margins, dydx(ever_ap_enrolled) ////SENSITIVITY ANALYSES ////Mutually exclusive categories: Only DE, only CE, only AP, multiple programs, none melogit ever_college_enrolled ib0.prog_category /// cnecap lunch_free minority poverty ell iep || school_code: , or baselevels *Calculate Average Adjusted Predictions for each program category margins prog_category //////////////////////////////////////////////////////// //////////////////////// // COHORT 2: TREATMENT ESTIMATION: PERSISTED TO ENROLL IN 2ND YR OF COLLEGE **1. Impact Analysis Model *Fit the analysis model melogit persist_2nd_yr_rev i.t cnecap lunch_free minority poverty ell iep || school_code: , or estat ic *Calculate Average Adjusted Predictions for Treatment margins t *Calculate Marginal Effect of Treatment margins, dydx(t) *sensitivity analysis *Fit with no school level covariates nor variables to be included as moderators melogit persist_2nd_yr_rev i.t cnecap || school_code: , or estat ic *Calculate Average Adjusted Predictions for Treatment margins t *Calculate Marginal Effect of Treatment margins, dydx(t) **2. Moderator Analysis Model: Minority *Fit the minority-as-moderator model melogit persist_2nd_yr_rev ib0.t cnecap lunch_free ib0.minority ib0.t#ib0.minority poverty ell iep || school_code: , or baselevels estat ic *Calculate Average Adjusted Predictions for Treatment margins t *Calculate Marginal Effect of Treatment margins, dydx(t) *Calculate Adjusted Predictions for each subgroup, as a function of Treatment margins minority, at(t=(0 1)) marginsplot *Calculate Marginal Effect of Treatment, for each subgroup margins, dydx(t) at(minority=(0 1)) marginsplot **3. Moderator Analysis Model: economic disadvantage-lunch free *Fit the economic disadvantage- lunch_free-as-moderator model melogit persist_2nd_yr_rev ib0.t cnecap ib0.lunch_free ib0.t#ib0.lunch_free minority poverty ell iep || school_code: , or baselevels estat ic *Calculate Average Adjusted Predictions for Treatment margins t *Calculate Marginal Effect of Treatment margins, dydx(t) *Calculate Adjusted Predictions for each subgroup, as a function of Treatment margins lunch_free, at(t=(0 1)) marginsplot *Calculate Marginal Effect of Treatment, for each subgroup margins, dydx(t) at(lunch_free=(0 1)) marginsplot *Fit the grade 8 math score-as-moderator model *NOTE: Most grade 8 math score values fall between -20 and +20. As such, the values in that range will be used for margins. melogit persist_2nd_yr_rev ib0.t c.cnecap ib0.t#c.cnecap lunch_free minority poverty ell iep || school_code: , or baselevels estat ic *Calculate Average Adjusted Predictions for Treatment margins t *Calculate Marginal Effect of Treatment margins, dydx(t) *Calculate Adjusted Predictions for Treatment and Comparison, at different representative values of cnecap. margins t, at(cnecap=(-20 -10 0 10 20)) marginsplot *Calculate Marginal Effect of Treatment, at different representative calues of cnecap. margins, dydx(t) at(cnecap=(-20 -10 0 10 20)) marginsplot /////relationships between participation in each of the 3 treatment programs and outcome ////"ever" in indicator: ever dual enrollment, ever concurrent enrollment, ever AP, none melogit persist_2nd_yr_rev i.ever_dual_enrolled i.ever_concur_enrolled i.ever_ap_enrolled /// cnecap lunch_free minority poverty ell iep || school_code: , or baselevels *Calculate Average Adjusted Predictions for ever DE margins ever_dual_enrolled *Calculate Marginal Effect of Treatment for ever DE margins, dydx(ever_dual_enrolled) *Calculate Average Adjusted Predictions for ever CE margins ever_concur_enrolled *Calculate Marginal Effect of Treatment for ever CE margins, dydx(ever_concur_enrolled) *Calculate Average Adjusted Predictions for ever AP margins ever_ap_enrolled *Calculate Marginal Effect of Treatment for ever AP margins, dydx(ever_ap_enrolled) //// SENSITIVITY ANALYSES ////Mutually exclusive categories: Only DE, only CE, only AP, multiple programs, none melogit persist_2nd_yr_rev ib0.prog_category /// cnecap lunch_free minority poverty ell iep || school_code: , or baselevels *Calculate Average Adjusted Predictions for each program category margins prog_category /////////////////////////////////////////////////////////////////////////////////// // COHORT 2: TREATMENT ESTIMATION: ANY REMEDIATION // multinomial outcome values // 1 // enrolled college in RI public and enrolled remediation // 0 // enrolled college in RI public and no remediation // 2 // enrolled college not in RI public // 3 // did not enroll college gen col_ri_rem = 0 replace col_ri_rem = 1 if enr_rem_ever_max == 1 replace col_ri_rem = 2 if ever_college_enrolled == 1 & ever_ri_enrolled == 0 replace col_ri_rem = 3 if ever_college_enrolled == 0 tab col_ri_rem **1. Impact Analysis Model *Fit the analysis model mlogit col_ri_rem i.t cnecap lunch_free minority poverty ell iep, vce(cluster school_code) rrr estat ic *Calculate Average Adjusted Predictions for Treatment margins t *Calculate Marginal Effect of Treatment margins, dydx(t) *sensitivity analysis *Fit model with no school level covariates nor variables to be included as moderators mlogit col_ri_rem i.t cnecap, vce(cluster school_code) rrr estat ic *Calculate Average Adjusted Predictions for Treatment margins t *Calculate Marginal Effect of Treatment margins, dydx(t) **2. Moderator Analysis Model: Racial/ethnic Minority *Fit the minority-as-moderator model mlogit col_ri_rem ib0.t cnecap lunch_free ib0.minority ib0.t#ib0.minority poverty ell iep, vce(cluster school_code) rrr estat ic *Calculate Average Adjusted Predictions for Treatment margins t *Calculate Marginal Effect of Treatment margins, dydx(t) *Calculate Adjusted Predictions for each subgroup, as a function of Treatment margins minority, at(t=(0 1)) marginsplot *Calculate Marginal Effect of Treatment, for each subgroup margins, dydx(t) at(minority=(0 1)) marginsplot **3. Moderator Analysis Model: Economic disadvantage- free lunch *Fit the lunch_free-as-moderator model mlogit col_ri_rem ib0.t cnecap ib0.lunch_free ib0.t#ib0.lunch_free minority poverty ell iep, vce(cluster school_code) rrr estat ic *Calculate Average Adjusted Predictions for Treatment margins t *Calculate Marginal Effect of Treatment margins, dydx(t) *Calculate Adjusted Predictions for each subgroup, as a function of Treatment margins lunch_free, at(t=(0 1)) marginsplot *Calculate Marginal Effect of Treatment, for each subgroup margins, dydx(t) at(lunch_free=(0 1)) marginsplot *Fit the cnecap-as-moderator model *NOTE: Most grade 8 math score fall between -20 and +20. As such, the values in that range will be used for margins. mlogit col_ri_rem ib0.t c.cnecap ib0.t#c.cnecap lunch_free minority poverty ell iep, vce(cluster school_code) rrr estat ic *Calculate Average Adjusted Predictions for Treatment margins t *Calculate Marginal Effect of Treatment margins, dydx(t) *Calculate Adjusted Predictions for Treatment and Comparison, at different representative values of cnecap. margins t, at(cnecap=(-20 -10 0 10 20)) marginsplot *Calculate Marginal Effect of Treatment, at different representative calues of cnecap. margins, dydx(t) at(cnecap=(-20 -10 0 10 20)) marginsplot /////relationships between participation in each of the 3 treatment programs and outcome ////"ever" in indicator: ever dual enrollment, ever concurrent enrollment, ever AP, none mlogit col_ri_rem i.ever_dual_enrolled i.ever_concur_enrolled i.ever_ap_enrolled /// cnecap lunch_free minority poverty ell iep, vce(cluster school_code) rrr *Calculate Average Adjusted Predictions for ever DE margins ever_dual_enrolled *Calculate Marginal Effect of Treatment for ever DE margins, dydx(ever_dual_enrolled) *Calculate Average Adjusted Predictions for ever CE margins ever_concur_enrolled *Calculate Marginal Effect of Treatment for ever CE margins, dydx(ever_concur_enrolled) *Calculate Average Adjusted Predictions for ever AP margins ever_ap_enrolled *Calculate Marginal Effect of Treatment for ever AP margins, dydx(ever_ap_enrolled) //// SENSITIVITY ANALYSES ////Mutually exclusive categories: Only DE, only CE, only AP, multiple programs, none mlogit col_ri_rem ib0.prog_category /// cnecap lunch_free minority poverty ell iep, vce(cluster school_code) rrr *Calculate Average Adjusted Predictions for each program category margins prog_category /////////////////////////////////////////////////////// ////////COHORT 3 - TREATMENT ESTIMATE: HIGH SCHOOL GRADUATION /////////////////////////////////////////////////////// clear use "wide_C123_0720" rename gender male gen log_enroll_count = log(enroll_count) gen suburban = 1 if locale == "suburban" replace suburban = 0 if suburban == . gen urban = 1 if locale == "urban" replace urban = 0 if urban == . gen rural = 1 if locale == "rural" replace rural = 0 if rural == . gen urban_ring= 1 if locale == "urban-ring" replace urban_ring = 0 if urban_ring == . // yes no indicator for suspensions - already recoded in this version of datafile //gen suspensions = total_suspensions //replace suspensions = 1 if total_suspensions >= 1 // add interaction terms //gen iep_lunch = iep_yn * lunch_free gen cnecap_iep = iep_yn*cnecap gen cnecap_ell = ell_yn*cnecap gen cnecap_lunch = lunch_free*cnecap gen cnecap_male = male*cnecap gen cnecap_min = minority*cnecap gen male_minority = male*minority gen minority_lunch = minority*lunch_free //////////////////////////////////////////////// // PROPENSITY SCORE ESTIMATION keep if cohort == 3 // baseline equivalence BEFORE matching pstest cnecap iep_yn ell_yn lunch_free chronic_absence suspensions male minority /// enroll_count log_enroll_count poverty ell iep distpse concurrent_rate dual_rate /// suburban rural urban_ring, treated(t) raw graph melogit t cnecap iep_yn ell_yn lunch_free chronic_absence suspensions male minority /// log_enroll_count distpse suburban rural|| school_code: // Store the regression coefficient (logit) for TREATMENT for each student // and store caliper of 0.20 SD predict pscore_v8 summarize pscore_v8 scalar cal = r(sd)*0.20 ///////////////////////////////////////////////// // PROPENSITY SCORE MATCHING set seed 7434 generate x=uniform() sort x psmatch2 t, pscore(pscore_v8) noreplacement caliper(`=scalar(cal)') // histogram of pscores in matched sample psgraph // balance tests on covariates listed pstest cnecap iep_yn ell_yn lunch_free chronic_absence suspensions male minority /// enroll_count log_enroll_count poverty ell iep distpse concurrent_rate dual_rate /// suburban rural urban_ring star gen matched = _weight replace matched = 0 if _weight == . tab matched t tab schname matched keep if _weight ==1 save "cohort3_pscorev8_matchL", replace //////////////////////// // COHORT 3: TREATMENT ESTIMATION: HIGH SCHOOL GRADUATION **1. Impact Analysis Model *Fit the analysis model melogit hs_diploma i.t cnecap lunch_free minority poverty ell iep || school_code: , or estat ic *Calculate Average Adjusted Predictions for Treatment margins t *Calculate Marginal Effect of Treatment margins, dydx(t) *sensitivity analysis *Fit model with no school level covariates nor variables to be included as moderators melogit hs_diploma i.t cnecap || school_code: , or estat ic *Calculate Average Adjusted Predictions for Treatment margins t *Calculate Marginal Effect of Treatment margins, dydx(t) **2. Moderator Analysis Model: Minority *Fit the minority-as-moderator model melogit hs_diploma ib0.t cnecap lunch_free ib0.minority ib0.t#ib0.minority poverty ell iep || school_code: , or baselevels estat ic *Calculate Average Adjusted Predictions for Treatment margins t *Calculate Marginal Effect of Treatment margins, dydx(t) *Calculate Adjusted Predictions for each subgroup, as a function of Treatment margins minority, at(t=(0 1)) marginsplot *Calculate Marginal Effect of Treatment, for each subgroup margins, dydx(t) at(minority=(0 1)) marginsplot **3. Moderator Analysis Model: FRL *Fit the lunch_free-as-moderator model melogit hs_diploma ib0.t cnecap ib0.lunch_free ib0.t#ib0.lunch_free minority poverty ell iep || school_code: , or baselevels estat ic *Calculate Average Adjusted Predictions for Treatment margins t *Calculate Marginal Effect of Treatment margins, dydx(t) *Calculate Adjusted Predictions for each subgroup, as a function of Treatment margins lunch_free, at(t=(0 1)) marginsplot *Calculate Marginal Effect of Treatment, for each subgroup margins, dydx(t) at(lunch_free=(0 1)) marginsplot *Fit the cnecap-as-moderator model *First, in preparation to this analysis, descriptives for cnecap are performed summarize cnecap, detail hist cnecap *NOTE: Most cnecap values fall between -20 and +20. As such, the values in that range will be used for margins. melogit hs_diploma ib0.t c.cnecap ib0.t#c.cnecap lunch_free minority poverty ell iep || school_code: , or baselevels estat ic *Calculate Average Adjusted Predictions for Treatment margins t *Calculate Marginal Effect of Treatment margins, dydx(t) *Calculate Adjusted Predictions for Treatment and Comparison, at different representative values of cnecap. margins t, at(cnecap=(-20 -10 0 10 20)) marginsplot *Calculate Marginal Effect of Treatment, at different representative calues of cnecap. margins, dydx(t) at(cnecap=(-20 -10 0 10 20)) marginsplot /////relationships between participation in each of the 3 treatment programs and outcome ////"ever" in indicator: ever dual enrollment, ever concurrent enrollment, ever AP, none melogit hs_diploma i.ever_dual_enrolled i.ever_concur_enrolled i.ever_ap_enrolled /// cnecap lunch_free minority poverty ell iep || school_code: , or baselevels *Calculate Average Adjusted Predictions for ever DE margins ever_dual_enrolled *Calculate Marginal Effect of Treatment for ever DE margins, dydx(ever_dual_enrolled) *Calculate Average Adjusted Predictions for ever CE margins ever_concur_enrolled *Calculate Marginal Effect of Treatment for ever CE margins, dydx(ever_concur_enrolled) *Calculate Average Adjusted Predictions for ever AP margins ever_ap_enrolled *Calculate Marginal Effect of Treatment for ever AP margins, dydx(ever_ap_enrolled) //// SENSITIVITY ANALYSES ////Mutually exclusive categories: Only DE, only CE, only AP, multiple programs, none *create a factor variable for these 5 categories. gen prog_category = . replace prog_category = 1 if dual_only==1 replace prog_category = 2 if concur_only==1 replace prog_category = 3 if ap_only==1 replace prog_category = 4 if mult_pros==1 replace prog_category = 0 if (dual_only==0 & concur_only==0 & ap_only==0 & mult_pros==0) melogit hs_diploma ib0.prog_category /// cnecap lunch_free minority poverty ell iep || school_code: , or baselevels *Calculate Average Adjusted Predictions for each program category margins prog_category /////////////////////////////////////////////////////// ////////CODE FOR GENERATING DESCRIPTIVE TABLES /////////////////////////////////////////////////////// clear use "wide_fulldata_C1234_0720" keep if oursample == 1 //code to generate Table C1. Accelerated college credit program participation, 2013/14 9th grade cohort keep if cohort == 2 tab ever_dual_enrolled tab ever_concur_enrolled tab ever_ap_enrolled tab t //code to generate Table C2. Accelerated college credit program student characteristics, 2013/14 9th grade cohort ****GENDER**** tab gender tab gender ever_dual_enrolled, row tab gender ever_concur_enrolled, row tab gender ever_ap_enrolled, row tab gender t, row ****RACE/ETHNICITY MINORITY**** tab minority tab minority ever_dual_enrolled, row tab minority ever_concur_enrolled, row tab minority ever_ap_enrolled, row tab minority t, row *****NATIONAL FREE/REDUCED LUNCH*** replace lunch_free = 1 if lunch_red == 1 tab lunch_free tab lunch_free ever_dual_enrolled, row tab lunch_free ever_concur_enrolled, row tab lunch_free ever_ap_enrolled, row tab lunch_free t, row *****HAVE IEP*** tab iep_yn tab iep_yn ever_dual_enrolled, row tab iep_yn ever_concur_enrolled, row tab iep_yn ever_ap_enrolled, row tab iep_yn t, row *****ENGLISH LEARNER*** tab ell_yn tab ell_yn ever_dual_enrolled, row tab ell_yn ever_concur_enrolled, row tab ell_yn ever_ap_enrolled, row tab ell_yn t, row ****chronic_absence**** tab chronic_absence tab chronic_absence ever_dual_enrolled, row tab chronic_absence ever_concur_enrolled, row tab chronic_absence ever_ap_enrolled, row tab chronic_absence t, row ****total_suspensions**** tab total_suspensions tab total_suspensions ever_dual_enrolled, row tab total_suspensions ever_concur_enrolled, row tab total_suspensions ever_ap_enrolled, row tab total_suspensions t, row ****NECAP MATH SCORE ACHIEVEMENT LEVEL**** tab necap_math_8g_achlv tab necap_math_8g_achlv ever_dual_enrolled, row tab necap_math_8g_achlv ever_concur_enrolled, row tab necap_math_8g_achlv ever_ap_enrolled, row tab necap_math_8g_achlv t, row //CODE TO GENERATE Table C3. Accelerated college credit program students by the characteristics of their first high school, 2013/14 9th grade cohort ***LOCALE*** tab locale tab locale ever_dual_enrolled, row tab locale ever_concur_enrolled, row tab locale ever_ap_enrolled, row tab locale t, row ****ENROLLMENT SIZE**** tab enroll_cat tab enroll_cat ever_dual_enrolled, row tab enroll_cat ever_concur_enrolled, row tab enroll_cat ever_ap_enrolled, row tab enroll_cat t, row ****DISTANCE FROM HS TO PUBLIC POST- INSTITUTION*** sum distpse sum distpse if ever_dual_enrolled == 1 sum distpse if ever_concur_enrolled == 1 sum distpse if ever_ap_enrolled == 1 sum distpse if t == 1 ****STAR RATING**** tab star tab star ever_dual_enrolled, row tab star ever_concur_enrolled, row tab star ever_ap_enrolled, row tab star t, row //CODE TO GENERATE Table C4. Economically disadvantaged students: Accelerated college credit program student characteristics, 2013/14 9th grade cohort keep if lunch_free == 1 ****GENDER**** tab gender tab gender ever_dual_enrolled, row tab gender ever_concur_enrolled, row tab gender ever_ap_enrolled, row tab gender t, row ****RACE/ETHNICITY MINORITY**** tab minority tab minority ever_dual_enrolled, row tab minority ever_concur_enrolled, row tab minority ever_ap_enrolled, row tab minority t, row *****NATIONAL FREE/REDUCED LUNCH*** tab lunch_free tab lunch_free ever_dual_enrolled, row tab lunch_free ever_concur_enrolled, row tab lunch_free ever_ap_enrolled, row tab lunch_free t, row *****HAVE IEP*** tab iep_yn tab iep_yn ever_dual_enrolled, row tab iep_yn ever_concur_enrolled, row tab iep_yn ever_ap_enrolled, row tab iep_yn t, row *****ENGLISH LEARNER*** tab ell_yn tab ell_yn ever_dual_enrolled, row tab ell_yn ever_concur_enrolled, row tab ell_yn ever_ap_enrolled, row tab ell_yn t, row ****chronic_absence**** tab chronic_absence tab chronic_absence ever_dual_enrolled, row tab chronic_absence ever_concur_enrolled, row tab chronic_absence ever_ap_enrolled, row tab chronic_absence t, row ****total_suspensions**** tab total_suspensions tab total_suspensions ever_dual_enrolled, row tab total_suspensions ever_concur_enrolled, row tab total_suspensions ever_ap_enrolled, row tab total_suspensions t, row ****NECAP MATH SCORE ACHIEVEMENT LEVEL**** tab necap_math_8g_achlv tab necap_math_8g_achlv ever_dual_enrolled, row tab necap_math_8g_achlv ever_concur_enrolled, row tab necap_math_8g_achlv ever_ap_enrolled, row tab necap_math_8g_achlv t, row //CODE TO GENERATE Table C5. Economically disadvantaged students: Accelerated college credit program students by the characteristics of their first high school, 2013/14 9th grade cohort ***LOCALE*** tab locale tab locale ever_dual_enrolled, row tab locale ever_concur_enrolled, row tab locale ever_ap_enrolled, row tab locale t, row ****ENROLLMENT SIZE**** tab enroll_cat tab enroll_cat ever_dual_enrolled, row tab enroll_cat ever_concur_enrolled, row tab enroll_cat ever_ap_enrolled, row tab enroll_cat t, row ****DISTANCE FROM HS TO PUBLIC POST- INSTITUTION*** sum distpse sum distpse if ever_dual_enrolled == 1 sum distpse if ever_concur_enrolled == 1 sum distpse if ever_ap_enrolled == 1 sum distpse if t == 1 ****STAR RATING**** tab star tab star ever_dual_enrolled, row tab star ever_concur_enrolled, row tab star ever_ap_enrolled, row tab star t, row //CODE TO GENERATE Table C6. Observed percentage of students attaining outcomes, 2013/14 9th grade cohort clear use "cohort2_updated_HE_0720" tab t tab ever_dual_enrolled tab ever_concur_enrolled tab ever_ap_enrolled tab hs_diploma tab hs_diploma t, column tab hs_diploma ever_dual_enrolled, column tab hs_diploma ever_concur_enrolled, column tab hs_diploma ever_ap_enrolled, column tab enroll_1_yr_after_hs tab enroll_1_yr_after_hs t, column tab enroll_1_yr_after_hs ever_dual_enrolled, column tab enroll_1_yr_after_hs ever_concur_enrolled, column tab enroll_1_yr_after_hs ever_ap_enrolled, column //CODE TO GENERATE Table C9. Observed rate of enrollment in developmental education courses by accelerated college credit program participation, among students who enrolled at a Rhode Island public college, 2013/14 9th grade cohort tab enr_rem_ever_max tab enr_rem_ever_max t tab enr_rem_ever_max ever_dual_enrolled tab enr_rem_ever_max ever_concur_enrolled tab enr_rem_ever_max ever_ap_enrolled //CODE TO GENERATE Table D1. Accelerated college credit program student characteristics, 2014/15 and 2015/16 9th grade cohorts clear use "E:\wide_fulldata_C1234_0720" keep if oursample == 1 keep if cohort == 3 tab ever_dual_enrolled tab ever_concur_enrolled tab ever_ap_enrolled tab t clear use "E:\wide_fulldata_C1234_0720" keep if oursample == 1 keep if cohort == 4 tab ever_dual_enrolled tab ever_concur_enrolled tab ever_ap_enrolled tab t //CODE TO GENERATE table D2. Accelerated college credit program student characteristics, 2014/15 9th grade cohort clear use "E:\wide_fulldata_C1234_0720" keep if oursample == 1 keep if cohort == 3 ****GENDER**** tab gender tab gender ever_dual_enrolled, row tab gender ever_concur_enrolled, row tab gender ever_ap_enrolled, row tab gender t, row ****RACE/ETHNICITY MINORITY**** tab minority tab minority ever_dual_enrolled, row tab minority ever_concur_enrolled, row tab minority ever_ap_enrolled, row tab minority t, row *****NATIONAL FREE/REDUCED LUNCH*** replace lunch_free = 1 if lunch_red == 1 tab lunch_free tab lunch_free ever_dual_enrolled, row tab lunch_free ever_concur_enrolled, row tab lunch_free ever_ap_enrolled, row tab lunch_free t, row *****HAVE IEP*** tab iep_yn tab iep_yn ever_dual_enrolled, row tab iep_yn ever_concur_enrolled, row tab iep_yn ever_ap_enrolled, row tab iep_yn t, row *****ENGLISH LEARNER*** tab ell_yn tab ell_yn ever_dual_enrolled, row tab ell_yn ever_concur_enrolled, row tab ell_yn ever_ap_enrolled, row tab ell_yn t, row ****chronic_absence**** tab chronic_absence tab chronic_absence ever_dual_enrolled, row tab chronic_absence ever_concur_enrolled, row tab chronic_absence ever_ap_enrolled, row tab chronic_absence t, row ****total_suspensions**** tab total_suspensions tab total_suspensions ever_dual_enrolled, row tab total_suspensions ever_concur_enrolled, row tab total_suspensions ever_ap_enrolled, row tab total_suspensions t, row ****NECAP MATH SCORE ACHIEVEMENT LEVEL**** tab necap_math_8g_achlv tab necap_math_8g_achlv ever_dual_enrolled, row tab necap_math_8g_achlv ever_concur_enrolled, row tab necap_math_8g_achlv ever_ap_enrolled, row tab necap_math_8g_achlv t, row //CODE TO GENERAGE Table D3. Accelerated college credit program students by characteristics of their first high school, 2014/15 9th grade cohort clear use "E:\wide_fulldata_C1234_0720" keep if oursample == 1 keep if cohort == 3 ***LOCALE*** tab locale tab locale ever_dual_enrolled, row tab locale ever_concur_enrolled, row tab locale ever_ap_enrolled, row tab locale t, row ****ENROLLMENT SIZE**** tab enroll_cat tab enroll_cat ever_dual_enrolled, row tab enroll_cat ever_concur_enrolled, row tab enroll_cat ever_ap_enrolled, row tab enroll_cat t, row ****DISTANCE FROM HS TO PUBLIC POST- INSTITUTION*** sum distpse sum distpse if ever_dual_enrolled == 1 sum distpse if ever_concur_enrolled == 1 sum distpse if ever_ap_enrolled == 1 sum distpse if t == 1 ****STAR RATING**** tab star tab star ever_dual_enrolled, row tab star ever_concur_enrolled, row tab star ever_ap_enrolled, row tab star t, row //CODE TO GENERATE Table D4. Accelerated College Credit Program Student Characteristics, 2015/16 9th grade cohort clear use "E:\wide_fulldata_C1234_0720" keep if oursample == 1 keep if cohort == 4 ****GENDER**** tab gender tab gender ever_dual_enrolled, row tab gender ever_concur_enrolled, row tab gender ever_ap_enrolled, row tab gender t, row ****RACE/ETHNICITY MINORITY**** tab minority tab minority ever_dual_enrolled, row tab minority ever_concur_enrolled, row tab minority ever_ap_enrolled, row tab minority t, row *****NATIONAL FREE/REDUCED LUNCH*** replace lunch_free = 1 if lunch_red == 1 tab lunch_free tab lunch_free ever_dual_enrolled, row tab lunch_free ever_concur_enrolled, row tab lunch_free ever_ap_enrolled, row tab lunch_free t, row *****HAVE IEP*** tab iep_yn tab iep_yn ever_dual_enrolled, row tab iep_yn ever_concur_enrolled, row tab iep_yn ever_ap_enrolled, row tab iep_yn t, row *****ENGLISH LEARNER*** tab ell_yn tab ell_yn ever_dual_enrolled, row tab ell_yn ever_concur_enrolled, row tab ell_yn ever_ap_enrolled, row tab ell_yn t, row ****chronic_absence**** tab chronic_absence tab chronic_absence ever_dual_enrolled, row tab chronic_absence ever_concur_enrolled, row tab chronic_absence ever_ap_enrolled, row tab chronic_absence t, row ****total_suspensions**** tab total_suspensions tab total_suspensions ever_dual_enrolled, row tab total_suspensions ever_concur_enrolled, row tab total_suspensions ever_ap_enrolled, row tab total_suspensions t, row ****NECAP MATH SCORE ACHIEVEMENT LEVEL**** tab necap_math_8g_achlv tab necap_math_8g_achlv ever_dual_enrolled, row tab necap_math_8g_achlv ever_concur_enrolled, row tab necap_math_8g_achlv ever_ap_enrolled, row tab necap_math_8g_achlv t, row //CODE TO GENERATE Table D5. Accelerated College Credit Program School Characteristics, 2015/16 9th grade cohort clear use "E:\wide_fulldata_C1234_0720" keep if oursample == 1 keep if cohort == 4 ***LOCALE*** tab locale tab locale ever_dual_enrolled, row tab locale ever_concur_enrolled, row tab locale ever_ap_enrolled, row tab locale t, row ****ENROLLMENT SIZE**** tab enroll_cat tab enroll_cat ever_dual_enrolled, row tab enroll_cat ever_concur_enrolled, row tab enroll_cat ever_ap_enrolled, row tab enroll_cat t, row ****DISTANCE FROM HS TO PUBLIC POST- INSTITUTION*** sum distpse sum distpse if ever_dual_enrolled == 1 sum distpse if ever_concur_enrolled == 1 sum distpse if ever_ap_enrolled == 1 sum distpse if t == 1 ****STAR RATING**** tab star tab star ever_dual_enrolled, row tab star ever_concur_enrolled, row tab star ever_ap_enrolled, row tab star t, row //CODE TO GENERATE Table D6. Percentage of students graduating from high school, 2014/15 and 2015/16 9th grade cohorts clear use "E:\wide_fulldata_C1234_0720" keep if oursample == 1 keep if cohort == 3 tab hs_diploma tab hs_diploma t tab hs_diploma t, column tab hs_diploma ever_dual_enrolled tab hs_diploma ever_concur_enrolled tab hs_diploma ever_ap_enrolled clear use "E:\wide_fulldata_C1234_0720" keep if oursample == 1 keep if cohort == 4 tab hs_diploma tab hs_diploma t tab hs_diploma t, column tab hs_diploma ever_dual_enrolled tab hs_diploma ever_concur_enrolled tab hs_diploma ever_ap_enrolled //CODE TO GENERAGE Table D9. Schools in which at least 10 students participated in dual enrollment in the 2015/16 9th grade cohort clear use "E:\wide_fulldata_C1234_0720" keep if oursample == 1 keep if cohort == 4 keep schname locale type enroll_cat duplicates drop tab locale tab type tab enroll_cat clear use "E:\wide_fulldata_C1234_0720" keep if oursample == 1 keep if cohort == 4 keep if total_dual_sch >=10 keep schname locale type enroll_cat duplicates drop tab locale tab type tab enroll_cat clear use "E:\wide_fulldata_C1234_0720" keep if oursample == 1 keep if cohort == 4 keep if total_concur_sch >=10 keep schname locale type enroll_cat duplicates drop tab locale tab type tab enroll_cat ///// /////CODE ENDS HERE//////