******************************************************************************* *Paper Title: Practice Specialization and Post-acute Outcomes of Patients with *Dementia in Skilled Nursing Facilities ******************************************************************************* clear cd "/project/Ryskina_SNFists/Seiyoun_working/ADRD/Stata_code_and_data/" use "/project/Ryskina_SNFists/Seiyoun_working/SNF_dementia_paper/Stata/patient_level_dementia_01312023" ******************************************************************************* *(1) Apply exclusion/inclusion criteria ******************************************************************************* *1. Drop patients who were long stay prior to SNF admission drop if BECAME_LONG_STAY_PRIOR_SNF_ADMIT==1 *2. Exclude <=65 years keep if AGE_AT_SNF_ADMIT>65 *3. Keep only dementia keep if ALZH_DEMEN_FLAG==1 *4. Exclude hospice drop if A2100_DSCHRG_STUS_CD_1=="07" | A2100_DSCHRG_STUS_CD_2=="07" | O0100K1_HOSPC_PRIOR_CD_1=="1" | O0100K2_HOSPC_POST_CD_1=="1" | O0100K1_HOSPC_PRIOR_CD_2=="1" | O0100K2_HOSPC_POST_CD_2=="1" *5. Exclude comatose at SNF admission drop if B0100_CMTS_CD_1=="1" | B0100_CMTS_CD_1=="-" ******************************************************************************* *(2) Generate variables for ADL differences ******************************************************************************* *Generate variable that indicates improvement in ADL score by at least 1 point gen ADL_diff= adl_total_2 - adl_total_1 gen one_point_adl_improve=1 if ADL_diff<=-1 replace one_point_adl_improve=0 if one_point_adl_improve==. ******************************************************************************* *(3) Generate other variables ******************************************************************************* *Age *65-69 gen age_65_69=0 replace age_65_69=1 if AGE_AT_SNF_ADMIT>=65 & AGE_AT_SNF_ADMIT<=69 *70-74 gen age_70_74=0 replace age_70_74=1 if AGE_AT_SNF_ADMIT>=70 & AGE_AT_SNF_ADMIT<=74 *75-79 gen age_75_79=0 replace age_75_79=1 if AGE_AT_SNF_ADMIT>=75 & AGE_AT_SNF_ADMIT<=79 *80-84 gen age_80_84=0 replace age_80_84=1 if AGE_AT_SNF_ADMIT>=80 & AGE_AT_SNF_ADMIT<=84 *85-89 gen age_85_89=0 replace age_85_89=1 if AGE_AT_SNF_ADMIT>=85 & AGE_AT_SNF_ADMIT<=89 *90 plus gen age_90_plus=0 replace age_90_plus=1 if AGE_AT_SNF_ADMIT>=90 *Create variable for female gen Female=0 replace Female=1 if GENDER=="F" *Create variable for White gen White=0 replace White=1 if RACE=="White" *Create variable for Black gen Black=0 replace Black=1 if RACE=="Black" *Create variable for Hispanic gen Hispanic=0 replace Hispanic=1 if RACE=="Hispanic" *Create variable for Asian gen Asian=0 replace Asian=1 if RACE=="Asian" *Create variable for other race gen other_race=0 replace other_race=1 if RACE=="North American Native" | RACE=="Other" | RACE=="Unknown" save "patient_variable.dta", replace ******************************************************************************* *(4) Prepare nursing home variables ******************************************************************************* clear use "/project/Ryskina_SNFists/Seiyoun_working/Small volume providers/LTC_11_20_all.dta" *Only keep variables that are needed keep PROV1680 year cnahrppd rnhrppd lpnhrppd paymcare paymcaid occpct anyunit gen PRVDR_NUM=PROV1680 duplicates drop drop if PRVDR_NUM=="" drop if year==2020 *Change all observations with LNE or . to missing tostring *, replace foreach var of varlist _all{ replace `var'="" if `var'=="LNE" replace `var'="" if `var'=="." } destring *, replace reshape wide cnahrppd rnhrppd lpnhrppd paymcare paymcaid occpct anyunit, i(PRVDR_NUM) j(year) *Replace current with previous forvalues n = 2012(1)2019 { local m=`n'-1 replace rnhrppd`n'=rnhrppd`m' if rnhrppd`n'==. } forvalues n = 2012(1)2017 { local m=`n'-1 replace cnahrppd`n'=cnahrppd`m' if cnahrppd`n'==. } forvalues n = 2018(1)2019 { local m=`n'-1 replace cnahrppd`n'=cnahrppd`m' if cnahrppd`n'==. | cnahrppd`n'==0 } forvalues n = 2012(1)2019 { local m=`n'-1 replace lpnhrppd`n'=lpnhrppd`m' if lpnhrppd`n'==. } forvalues n = 2012(1)2019 { local m=`n'-1 replace paymcare`n'=paymcare`m' if paymcare`n'==. } forvalues n = 2012(1)2019 { local m=`n'-1 replace paymcaid`n'=paymcaid`m' if paymcaid`n'==. } forvalues n = 2012(1)2019 { local m=`n'-1 replace occpct`n'=occpct`m' if occpct`n'==. } forvalues n = 2012(1)2019 { local m=`n'-1 replace anyunit`n'=anyunit`m' if anyunit`n'=="" } reshape long cnahrppd rnhrppd lpnhrppd paymcare paymcaid occpct anyunit , i(PRVDR_NUM) j(year) keep PRVDR_NUM year cnahrppd* rnhrppd* lpnhrppd* paymcare* paymcaid* occpct* anyunit* rename cnahrppd cnahrppd_new rename rnhrppd rnhrppd_new rename lpnhrppd lpnhrppd_new rename paymcare paymcare_new rename paymcaid paymcaid_new rename occpct occpct_new rename anyunit anyunit_new rename PRVDR_NUM SNF_CCN rename year SNF_ADMIT_YEAR keep SNF_CCN SNF_ADMIT_YEAR cnahrppd_new rnhrppd_new lpnhrppd_new paymcare_new paymcaid_new occpct_new anyunit_new save "LTC_new_variables" , replace clear use "patient_variable.dta" merge m:1 SNF_CCN SNF_ADMIT_YEAR using "LTC_new_variables" drop if _merge==2 drop _merge bysort SNF_ADMIT_YEAR: egen rnhrppd_avg=mean(rnhrppd_new) bysort SNF_ADMIT_YEAR: egen lpnhrppd_avg=mean(lpnhrppd_new) bysort SNF_ADMIT_YEAR: egen cnahrppd_avg=mean(cnahrppd_new) bysort SNF_ADMIT_YEAR: egen paymcare_avg=mean(paymcare_new) bysort SNF_ADMIT_YEAR: egen paymcaid_avg=mean(paymcaid_new) bysort SNF_ADMIT_YEAR: egen occpct_avg=mean(occpct_new) bysort SNF_ADMIT_YEAR: egen anyunit_avg=mode(anyunit_new) gen rn_hours=rnhrppd_new gen lpn_hours=lpnhrppd_new gen cna_hours=cnahrppd_new gen paymedicare=paymcare_new gen paymedicaid=paymcaid_new gen occupancy_rate=occpct_new gen any_special_unit=anyunit_new replace rn_hours=rnhrppd_avg if rn_hours==. replace lpn_hours=lpnhrppd_avg if lpn_hours==. replace cna_hours=cnahrppd_avg if cna_hours==. replace paymedicare=paymcare_avg if paymedicare==. replace paymedicaid=paymcaid_avg if paymedicaid==. replace occupancy_rate=occpct_avg if occupancy_rate==. replace any_special_unit=anyunit_avg if any_special_unit=="" order SNF_CCN SNF_ADMIT_YEAR rnhrppd rnhrppd_new rnhrppd_avg sort SNF_CCN SNF_ADMIT_YEAR *Generate nursing home variable from POS *Size using bed count. small (<50), medium (50-99) and large (100%). gen size=. replace size=1 if BED_CNT<50 replace size=2 if BED_CNT>=50 & BED_CNT<=99 replace size=3 if BED_CNT>99 replace size=. if BED_CNT==. *Profit status, 1,2,3,13 for profit 4,5,6,7,8,9,10,11,12 non-profit destring GNRL_CNTL_TYPE_CD, replace gen profit_status=0 replace profit_status=1 if GNRL_CNTL_TYPE_CD==1 | GNRL_CNTL_TYPE_CD==2 | GNRL_CNTL_TYPE_CD==3 |GNRL_CNTL_TYPE_CD==13 replace profit_status=. if GNRL_CNTL_TYPE_CD==. *Part of chain gen multi_chain=. replace multi_chain=1 if MLT_OWND_FAC_ORG_SW=="Y" replace multi_chain=0 if MLT_OWND_FAC_ORG_SW=="N" *Special unit gen any_special_unit_2=. replace any_special_unit_2=1 if any_special_unit=="Yes" replace any_special_unit_2=0 if any_special_unit=="No" save "final_adrd_1",replace **************************************************************** *(5) Get market competition, MA variables **************************************************************** use "/project/Ryskina_SNFists/Seiyoun_working/SNF_Adoption_Paper/Stata/snf_year_level.dta",clear order PRVDR_NUM year sort PRVDR_NUM year keep PRVDR_NUM year VBP_Penetration sum_of_marketshare_squared Pct_MA_Penetration_all_enrldmths duplicates drop save "market_variable", replace ******************************************************************************* *(6) Merge all data ******************************************************************************* clear use "final_adrd_1" gen PRVDR_NUM=SNF_CCN merge m:1 PRVDR_NUM year using "market_variable" drop if _merge==2 drop _merge save "matching_project_data", replace use "matching_project_data",clear destring rnhrppd lpnhrppd cnahrppd BED_CNT CBSA_URBN_RRL_IND paymcaid paymcare GNRL_CNTL_TYPE_CD profit_status multi_chain anyunit occpct, replace missings tag ICU_DAYS rn_hours lpn_hours cna_hours paymedicare paymedicaid occupancy_rate any_special_unit_2 BED_CNT CBSA_URBN_RRL_IND GNRL_CNTL_TYPE_CD profit_status multi_chain NPI_BIRTH_DT_80 NPI_SEX_80 group_size VBP_Penetration sum_of_marketshare_squared Pct_MA_Penetration_all_enrldmths , generate(nmissing1) drop if nmissing1>0 save "matching_project_data_2", replace ******************************************************************************* *(7) Create additional variables ******************************************************************************* use "matching_project_data_2" *CFS intact gen CFS_intact=0 replace CFS_intact=1 if cfs==1 *CFS mild impairment gen CFS_mild=0 replace CFS_mild=1 if cfs==2 *CFS moderate and severe impairment gen CFS_moderate_severe=0 replace CFS_moderate_severe=1 if cfs==3 | cfs==4 *need to rename variables as they are too long for SAS macro rename age_90_plus age_90 rename Pct_MA_Penetration_all_enrldmths MA_pene rename CFS_moderate_severe CFS_34 rename index_ELX_GRP_1 ELX_GRP_1 rename index_ELX_GRP_2 ELX_GRP_2 rename index_ELX_GRP_3 ELX_GRP_3 rename index_ELX_GRP_4 ELX_GRP_4 rename index_ELX_GRP_5 ELX_GRP_5 rename index_ELX_GRP_6_7 ELX_GRP_6_7 rename index_ELX_GRP_8 ELX_GRP_8 rename index_ELX_GRP_9 ELX_GRP_9 rename index_ELX_GRP_10 ELX_GRP_10 rename index_ELX_GRP_11_12 ELX_GRP_11_12 rename index_ELX_GRP_13 ELX_GRP_13 rename index_ELX_GRP_14 ELX_GRP_14 rename index_ELX_GRP_15 ELX_GRP_15 rename index_ELX_GRP_16 ELX_GRP_16 rename index_ELX_GRP_17 ELX_GRP_17 rename index_ELX_GRP_18 ELX_GRP_18 rename index_ELX_GRP_19 ELX_GRP_19 rename index_ELX_GRP_20 ELX_GRP_20 rename index_ELX_GRP_21 ELX_GRP_21 rename index_ELX_GRP_22 ELX_GRP_22 rename index_ELX_GRP_23 ELX_GRP_23 rename index_ELX_GRP_24 ELX_GRP_24 rename index_ELX_GRP_25 ELX_GRP_25 rename index_ELX_GRP_26 ELX_GRP_26 rename index_ELX_GRP_27 ELX_GRP_27 rename index_ELX_GRP_30 ELX_GRP_30 rename index_ELX_GRP_31 ELX_GRP_31 rename PRIOR365_HOSPS_COUNT priorhop save "matching_project_data_2", replace ******************************************************************************* *(8) Merge with Cost Variable ******************************************************************************* clear cd "/project/Ryskina_SNFists/Seiyoun_working/ADRD/Stata_code_and_data/" use "matching_project_data_2" merge 1:1 MEDPAR_ID using "/project/Ryskina_SNFists/Seiyoun_working/SNF_Project_Matching/10_Data_cleaning/output/cost_variable_3.dta" keep if _merge==3 foreach var of varlist COIN_AMT_30 DED_AMT_30 BLDDEDAM_30 PRPAYAM_30 PASSTHRU_30 PMT_AMT_30 COIN_AMT_60 DED_AMT_60 BLDDEDAM_60 PRPAYAM_60 PASSTHRU_60 PMT_AMT_60 PTB_COINSRNC_AMT_30 PTB_DDCTBL_AMT_30 BLOOD_DDCTBL_LBLTY_AM_30 LINE_COINSRNC_AMT_30 CASH_DDCTBL_APLD_AMT_30 PTB_COINSRNC_AMT_60 PTB_DDCTBL_AMT_60 BLOOD_DDCTBL_LBLTY_AM_60 LINE_COINSRNC_AMT_60 CASH_DDCTBL_APLD_AMT_60 PRMRY_PYR_CLM_PD_AMT_30 PRMRY_PYR_PD_AMT_30 PRMRY_PYR_CLM_PD_AMT_60 PRMRY_PYR_PD_AMT_60 CLM_PMT_AMT_30 CRR_CLM_PMT_AMT_30 CLM_PMT_AMT_60 CRR_CLM_PMT_AMT_60{ replace `var' =0 if missing(`var') } gen amt_patient_30_days=COIN_AMT_30 + DED_AMT_30 + BLDDEDAM_30 + PTB_COINSRNC_AMT_30 + PTB_DDCTBL_AMT_30 +BLOOD_DDCTBL_LBLTY_AM_30 + LINE_COINSRNC_AMT_30 + CASH_DDCTBL_APLD_AMT_30 gen amt_patient_60_days=COIN_AMT_60 + DED_AMT_60 + BLDDEDAM_60 + PTB_COINSRNC_AMT_60 + PTB_DDCTBL_AMT_60 +BLOOD_DDCTBL_LBLTY_AM_60 + LINE_COINSRNC_AMT_60 + CASH_DDCTBL_APLD_AMT_60 gen amt_other_30_days=PRPAYAM_30 + PRMRY_PYR_CLM_PD_AMT_30+ PRMRY_PYR_PD_AMT_30 gen amt_other_60_days=PRPAYAM_60 + PRMRY_PYR_CLM_PD_AMT_60 + PRMRY_PYR_PD_AMT_60 gen amt_medicare_30_days=PASSTHRU_30 + PMT_AMT_30 + CLM_PMT_AMT_30 + CRR_CLM_PMT_AMT_30 gen amt_medicare_60_days=PASSTHRU_60 + PMT_AMT_60 + CLM_PMT_AMT_60 + CRR_CLM_PMT_AMT_60 gen total_cost_30_days=amt_patient_30_days+amt_other_30_days+amt_medicare_30_days gen total_cost_60_days=amt_patient_60_days+amt_other_60_days+amt_medicare_60_days keep if SNF_ADMIT_YEAR==2012 | SNF_ADMIT_YEAR==2019 save "matching_12_19.dta", replace ******************************************************************************* *(9) Generate NH level data for percentage of patients seen by SNFist ******************************************************************************* use "matching_12_19.dta" gen total_patient=1 collapse (sum)total_patient SNFIST_METHOD2_80 , by(SNF_CCN SNF_ADMIT_YEAR) gen pct_snfist_patient=(SNFIST_METHOD2_80/total_patient)*100 reshape wide pct_snfist_patient total_patient SNFIST_METHOD2_80, i(SNF_CCN) j(SNF_ADMIT_YEAR) gen diff=pct_snfist_patient2019-pct_snfist_patient2012 gen increase_snfist=0 replace increase_snfist=1 if pct_snfist_patient2019>pct_snfist_patient2012 drop if pct_snfist_patient2012==. drop if pct_snfist_patient2019==. keep SNF_CCN increase_snfist save "pct_snfist_patient.dta", replace use "pct_snfist_patient" use "matching_12_19.dta" drop _merge merge m:1 SNF_CCN using "pct_snfist_patient.dta" keep if increase_snfist==1 save "matching_12_19_2.dta", replace clear use "matching_12_19_2.dta"