From da6b7478a8a7062ac7fd75977abc3d9c9c6c8fc7 Mon Sep 17 00:00:00 2001 From: Dominic Ricottone Date: Sun, 17 Nov 2024 23:37:37 -0600 Subject: [PATCH] Incomplete work on AS04 Replication of Abramowitz, Saunders (2004). Some issues remain in replication of Table 2. Some changes were required of the SAS import procedure. --- AS04/Table 1.do | 82 +++++++++ AS04/Table 1.sas | 28 +++ AS04/Table 2.sas | 15 ++ AS04/prep.sas | 173 ++++++++++++++++++ ...nes_timeseries_cdf_syntax_sas_20220916.sas | 36 ++-- 5 files changed, 316 insertions(+), 18 deletions(-) create mode 100644 AS04/Table 1.do create mode 100644 AS04/Table 1.sas create mode 100644 AS04/Table 2.sas create mode 100644 AS04/prep.sas diff --git a/AS04/Table 1.do b/AS04/Table 1.do new file mode 100644 index 0000000..48d4788 --- /dev/null +++ b/AS04/Table 1.do @@ -0,0 +1,82 @@ +clear all +cd "../data/anes" + +use "anes_timeseries_cdf_stata_20220916.dta" +keep if inlist(VCF0004,1994,1996,1998,2000) +svyset VCF0006a [pweight=VCF0009z], vce(linearized) + +recode VCF0302 (5=1 "Dem") (2 3 4 8 9=2 "Indep") (1=3 "Rep") (else=.), generate(party) + +label variable party "Party ID" + +/* +table VCF0302 party, missing +*/ + +recode VCF0702 (0 1=0 "Non") (2=1 "Voter") (else=.), generate(voter) +recode VCF0717 (0 1=0 "Non") (2=1 "Influencer") (else=.), generate(influencer) +recode VCF0720 (0 1=0 "Non") (2=1 "Influencer") (else=.), generate(displayer) +recode VCF0718 (0 1=0 "Non") (2=1 "Influencer") (else=.), generate(attender) +recode VCF0719 (0 1=0 "Non") (2=1 "Influencer") (else=.), generate(worker) +recode VCF0721 (0 1=0 "Non") (2=1 "Influencer") (else=.), generate(donor) + +label variable voter "Voter?" +label variable influencer "(Try to) Influence others?" +label variable displayer "Display buttons/stickers?" +label variable attender "Attend rally/meeting?" +label variable worker "Work on campaign?" +label variable donor "Donate to campaign?" + +/* +table VCF0702 voter, missing +table VCF0717 influencer, missing +table VCF0720 displayer, missing +table VCF0718 attender, missing +table VCF0719 worker, missing +table VCF0721 donor, missing +*/ + +egen activity = rowtotal(voter influencer displayer attender worker donor) +recode activity (0=0) (1=1) (2=2) (3 4 5 6=3 "3+"), generate(r_activity) + +label variable activity "Count of activities" +label variable r_activity "Levels of activities" + +/* +tab activity r_activity, missing +*/ + +generate partisan = voter & (influencer | displayer | attender | worker | donor) + +label variable partisan "Partisan: voter and engaged in an activity" + +/* +tab voter activity, missing +tab partisan voter, missing +tab partisan activity, missing +*/ + +// Activity - Voting +mean voter, over(party) +// Activity - Persuading others +mean influencer, over(party) +// Activity - Displaying button/stickers +mean displayer, over(party) +// Activity - Attending rally/meeting +mean attender, over(party) +// Activity - Working for party/candidate +mean worker, over(party) +// Activity - Contributing money +mean donor, over(party) + +// Overall Activity Score +tab r_activity party, nofreq col +// Republican/3+ is off - 13.6 displayed as 13 instead of 14; probably to force percentages totaling to 100 + +// Active partisans +mean partisan, over(party) +// Independent is off - 21.0 displayed as 22 instead of 21 + +// Valid N +tab party + diff --git a/AS04/Table 1.sas b/AS04/Table 1.sas new file mode 100644 index 0000000..a333b8d --- /dev/null +++ b/AS04/Table 1.sas @@ -0,0 +1,28 @@ +/* The following lines should match the import routine */ +libname library '~/data/anes'; + +/* Activities */ +proc means data=library.as04 mean maxdec=2; + var voter influencer displayer attender worker donor; + class party; + format voter influencer displayer attender worker donor no_yes_f. party party_f.; +run; + +/* Overall Activity Scale score */ +proc freq data=library.as04; + tables r_activity*party / nofreq nopercent norow; + format r_activity threeplus_f. party party_f.; +run; + +/* Active partisans */ +proc means data=library.as04 mean maxdec=2; + var partisan; + class party; + format partisan no_yes_f. party party_f.; +run; + +/* Party N */ +proc freq data=library.as04; + tables party / nocum nopercent; + format party party_f.; +run; diff --git a/AS04/Table 2.sas b/AS04/Table 2.sas new file mode 100644 index 0000000..0db7274 --- /dev/null +++ b/AS04/Table 2.sas @@ -0,0 +1,15 @@ +/* The following lines should match the import routine */ +libname library '~/data/anes'; + +/* Democrats */ +proc freq data=library.as04_d; + tables (conserv_d_alt entitlement_d govtspend_d blackaid_d affact1_d affact2_d womenrole_d abortlegal_d)*activity / noprint measures; +run; +/* not matching on affact and womenrole */ +/* close enough on abortlegal (reported .113 vs replicated .111) */ + +/* Republicans */ +proc freq data=library.as04_r; + tables (conserv_r entitlement_r govtspend_r blackaid_r affact1_r affact2_r womenrole_r abortlegal_r)*activity / noprint measures; +run; +/* not matching on affact */ diff --git a/AS04/prep.sas b/AS04/prep.sas new file mode 100644 index 0000000..6e0b363 --- /dev/null +++ b/AS04/prep.sas @@ -0,0 +1,173 @@ +/* The following lines should match the import routine */ +libname library '~/data/anes'; +%LET dataset = anes ; + +proc freq data=library.&dataset; + tables VCF0013 VCF0302 VCF0702 VCF0717 VCF0718 VCF0719 VCF0720 VCF0721 VCF0803 VCF0809 VCF0830 VCF0834 VCF0838 VCF0839 VCF0867; +run; + +proc freq data=library.&dataset; + tables VCF0867*VCF0867A / missing; +run; + +data library.as04; + set library.&dataset; + + /* + * Note: + * The SAS syntax provided by ANES resets "don't know" (DK) responses and + * refusals to the missing value several variables. (At latest count: + * VCF0302, VCF0702, VCF0717, VCF0718, VCF0719, VCF0720, VCF0721, VCF0867.) + * This must be edited. + */ + + party = .; + if (VCF0302=5) then party = 1; + if (VCF0302 in (2, 3, 4, 8, 9)) then party = 2; + if (VCF0302=1) then party = 3; + label party = "Party"; + + voter = .; + if (VCF0702 in (0,1)) then voter = 0; + if (VCF0702=2) then voter = 1; + label voter = "Voted?"; + + influencer = .; + if (VCF0717 in (0,1)) then influencer = 0; + if (VCF0717=2) then influencer = 1; + label influencer = "(Try to) influence others?"; + + attender = .; + if (VCF0718 in (0,1)) then attender = 0; + if (VCF0718=2) then attender = 1; + label attender = "Attended rally/meeting?"; + + worker = .; + if (VCF0719 in (0,1)) then worker = 0; + if (VCF0719=2) then worker = 1; + label worker = "Worked on campaign?"; + + displayer = .; + if (VCF0720 in (0,1)) then displayer = 0; + if (VCF0720=2) then displayer = 1; + label displayer = "Displayed button/sticker?"; + + donor = .; + if (VCF0721 in (0,1)) then donor = 0; + if (VCF0721=2) then donor = 1; + label donor = "Donated to campaign?"; + + activity = sum(voter, influencer, attender, worker, displayer, donor); + label activity = "Count of activities"; + + r_activity = .; + if (activity=0) then r_activity = 0; + if (activity=1) then r_activity = 1; + if (activity=2) then r_activity = 2; + if (activity>=3) then r_activity = 3; + label r_activity = "Activities levels"; + + partisan = 0; + if (activity>=2) and (voter=1) then partisan = 1; + label partisan = "Partisan: voter and activities"; + + conserv_r = .; + if (VCF0803 in (1,2,3,4,5,6,7)) then conserv_r = VCF0803 - 4; + if (VCF0803=9) then conserv_r = 0; + conserv_r_alt = conserv_r; + if (VCF0803=0) then conserv_r_alt = 0; + conserv_d = -conserv_r; + conserv_d_alt = conserv_d; + if (VCF0803=0) then conserv_d_alt = 0; + + govtspend_d = .; + if (VCF0839 in (1,2,3,4,5,6,7)) then govtspend_d = VCF0839 - 4; + if (VCF0839=9) then govtspend_d = 0; + govtspend_d_alt = govtspend_d; + if (VCF0839=0) then govtspend_d_alt = 0; + govtspend_r = -govtspend_d; + govtspend_r_alt = govtspend_r; + if (VCF0839=0) then govtspend_r_alt = 0; + + blackaid_r = .; + if (VCF0830 in (1,2,3,4,5,6,7)) then blackaid_r = VCF0830 - 4; + if (VCF0830=9) then blackaid_r = 0; + blackaid_r_alt = blackaid_r; + if (VCF0830=0) then blackaid_r_alt = 0; + blackaid_d = -blackaid_r; + blackaid_d_alt = blackaid_d; + if (VCF0830=0) then blackaid_d_alt = 0; + + womenrole_r = .; + if (VCF0834 in (1,2,3,4,5,6,7)) then womenrole_r = VCF0834 - 4; + if (VCF0834=9) then womenrole_r = 0; + womenrole_r_alt = womenrole_r; + if (VCF0834=0) then womenrole_r_alt = 0; + womenrole_d = -womenrole_r; + womenrole_d_alt = womenrole_d; + if (VCF0834=0) then womenrole_d_alt = 0; + + abortlegal_d = .; + if (VCF0838 in (1,2)) then abortlegal_d = VCF0838 - 3; + if (VCF0838 in (3,4)) then abortlegal_d = VCF0838 - 2; + if (VCF0838=9) then abortlegal_d = 0; + abortlegal_d_alt = abortlegal_d; + if (VCF0838=0) then abortlegal_d_alt = 0; + abortlegal_r = -abortlegal_d; + abortlegal_r_alt = abortlegal_r; + if (VCF0838=0) then abortlegal_r_alt = 0; + + entitlement_r = .; + if (VCF0809 in (1,2,3,4,5,6,7)) then entitlement_r = VCF0809 - 4; + if (VCF0809=9) then entitlement_r = 0; + entitlement_r_alt = entitlement_r; + if (VCF0809=0) then entitlement_r_alt = 0; + entitlement_d = -entitlement_r; + entitlement_d_alt = entitlement_d; + if (VCF0809=0) then entitlement_d_alt = 0; + + affact1_r = .; + if (VCF0867=1) then affact1_r = -1; + if (VCF0867=5) then affact1_r = 1; + if (VCF0867=8) then affact1_r = 0; + affact1_r_alt = affact1_r; + if (VCF0867=9) then affact1_r_alt = 0; + affact1_d = -affact1_r; + affact1_d_alt = affact1_d; + if (VCF0867=9) then affact1_d_alt = 0; + + affact2_r = .; + if (VCF0867A in (1,2,4,5)) then affact2_r = VCF0867A - 3; + if (VCF0867A=7) then affact2_r = 0; + if (VCF0867A=8) and (VCF0867=1) then affact2_r = -1; + if (VCF0867A=8) and (VCF0867=5) then affact2_r = 1; + affact2_r_alt = affact2_r; + if (VCF0867A=9) then affact2_r_alt = 0; + affact2_d = -affact2_r; + affact2_d_alt = affact2_d; + if (VCF0867A=9) then affact2_d_alt = 0; + + + /* Subset data to years of analysis: 1994-2000 */ + if (VCF0004 in (1994,1996,1998,2000)) ; +run; + +data library.as04_d; + set library.as04; + /* Subset to only Democrats. */ + if (party=1) ; +run; + +data library.as04_r; + set library.as04; + /* Subset to only Republicans. */ + if (party=3) ; +run; + +proc format; + value party_f 1 = "Democrat" + 2 = "Independent" + 3 = "Republican"; + value no_yes_f 0 = "No" 1 = "Yes"; + value threeplus_f 3 = "3+"; +run; diff --git a/data/anes/anes_timeseries_cdf_syntax_sas_20220916.sas b/data/anes/anes_timeseries_cdf_syntax_sas_20220916.sas index af46d08..13d39cd 100644 --- a/data/anes/anes_timeseries_cdf_syntax_sas_20220916.sas +++ b/data/anes/anes_timeseries_cdf_syntax_sas_20220916.sas @@ -3,13 +3,13 @@ /* ENCODING CP1252 */ /* The following line should contain the complete path and name of your raw data file */ -FILENAME datafile 'anes_timeseries_cdf_syntax_rawdata_20220916.dat' ; +FILENAME datafile '~/data/anes/anes_timeseries_cdf_syntax_rawdata_20220916.dat' ; /* The following line should contain the directory in which you wish your SAS file to be stored */ -libname library '' ; +libname library '~/data/anes' ; /* The following line contains the name (without the extension) for your SAS dataset */ -%LET dataset = anes_tim ; +%LET dataset = anes ; proc format library = library ; value VCF0013F @@ -8000,7 +8000,7 @@ LABEL IF VCF0290 >= 999 OR VCF0290 = 998 THEN VCF0290 =. ; IF VCF0291 >= 999 OR VCF0291 = 998 THEN VCF0291 =. ; IF VCF0301 = 0 THEN VCF0301 =. ; - IF VCF0302 >= 9 OR VCF0302 = 8 THEN VCF0302 =. ; + *IF VCF0302 >= 9 OR VCF0302 = 8 THEN VCF0302 =. ; IF VCF0303 = 0 THEN VCF0303 =. ; IF VCF0305 = 0 THEN VCF0305 =. ; IF VCF0306 >= 9 OR VCF0306 = 0 THEN VCF0306 =. ; @@ -8220,7 +8220,7 @@ LABEL IF VCF0675 = 9 THEN VCF0675 =. ; IF VCF0700 = 9 THEN VCF0700 =. ; IF VCF0701 = 0 THEN VCF0701 =. ; - IF VCF0702 = 0 THEN VCF0702 =. ; + *IF VCF0702 = 0 THEN VCF0702 =. ; IF VCF0703 = 0 THEN VCF0703 =. ; IF VCF0704 = 0 THEN VCF0704 =. ; IF VCF0704a = 0 THEN VCF0704a =. ; @@ -8236,11 +8236,11 @@ LABEL IF VCF0714 = 0 THEN VCF0714 =. ; IF VCF0715 = 0 THEN VCF0715 =. ; IF VCF0716 = 0 THEN VCF0716 =. ; - IF VCF0717 = 0 THEN VCF0717 =. ; - IF VCF0718 = 0 THEN VCF0718 =. ; - IF VCF0719 = 0 THEN VCF0719 =. ; - IF VCF0720 = 0 THEN VCF0720 =. ; - IF VCF0721 = 0 THEN VCF0721 =. ; + *IF VCF0717 = 0 THEN VCF0717 =. ; + *IF VCF0718 = 0 THEN VCF0718 =. ; + *IF VCF0719 = 0 THEN VCF0719 =. ; + *IF VCF0720 = 0 THEN VCF0720 =. ; + *IF VCF0721 = 0 THEN VCF0721 =. ; IF VCF0722 = 0 THEN VCF0722 =. ; IF VCF0723 = 0 THEN VCF0723 =. ; IF VCF0723a = 0 THEN VCF0723a =. ; @@ -8273,12 +8273,12 @@ LABEL IF VCF0749 = 99 THEN VCF0749 =. ; IF VCF0750 = 9 THEN VCF0750 =. ; IF VCF0801 >= 99 OR VCF0801 = 98 THEN VCF0801 =. ; - IF VCF0803 = 0 THEN VCF0803 =. ; + *IF VCF0803 = 0 THEN VCF0803 =. ; IF VCF0804 = 0 THEN VCF0804 =. ; IF VCF0805 = 0 THEN VCF0805 =. ; IF VCF0806 = 0 THEN VCF0806 =. ; IF VCF0808 = 0 THEN VCF0808 =. ; - IF VCF0809 = 0 THEN VCF0809 =. ; + *IF VCF0809 = 0 THEN VCF0809 =. ; IF VCF0811 >= 9 OR VCF0811 = 0 THEN VCF0811 =. ; IF VCF0813 = 0 THEN VCF0813 =. ; IF VCF0814 = 0 THEN VCF0814 =. ; @@ -8298,14 +8298,14 @@ LABEL IF VCF0827a >= 9 OR VCF0827a = 0 THEN VCF0827a =. ; IF VCF0828 = 0 THEN VCF0828 =. ; IF VCF0829 = 0 THEN VCF0829 =. ; - IF VCF0830 = 0 THEN VCF0830 =. ; + *IF VCF0830 = 0 THEN VCF0830 =. ; IF VCF0832 = 0 THEN VCF0832 =. ; IF VCF0833 = 9 THEN VCF0833 =. ; - IF VCF0834 = 0 THEN VCF0834 =. ; + *IF VCF0834 = 0 THEN VCF0834 =. ; IF VCF0836 = 0 THEN VCF0836 =. ; IF VCF0837 = 0 THEN VCF0837 =. ; - IF VCF0838 = 0 THEN VCF0838 =. ; - IF VCF0839 = 0 THEN VCF0839 =. ; + *IF VCF0838 = 0 THEN VCF0838 =. ; + *IF VCF0839 = 0 THEN VCF0839 =. ; IF VCF0840 = 9 THEN VCF0840 =. ; IF VCF0841 = 0 THEN VCF0841 =. ; IF VCF0842 = 0 THEN VCF0842 =. ; @@ -8328,8 +8328,8 @@ LABEL IF VCF0864 >= 8 OR VCF0864 = 0 THEN VCF0864 =. ; IF VCF0865 >= 8 OR VCF0865 = 0 THEN VCF0865 =. ; IF VCF0866 >= 8 OR VCF0866 = 0 THEN VCF0866 =. ; - IF VCF0867 = 9 THEN VCF0867 =. ; - IF VCF0867a >= 9 OR VCF0867a = 8 THEN VCF0867a =. ; + *IF VCF0867 = 9 THEN VCF0867 =. ; + *IF VCF0867a >= 9 OR VCF0867a = 8 THEN VCF0867a =. ; IF VCF0870 >= 8 OR VCF0870 = 0 THEN VCF0870 =. ; IF VCF0871 >= 8 OR VCF0871 = 0 THEN VCF0871 =. ; IF VCF0872 >= 9 OR VCF0872 = 8 THEN VCF0872 =. ; -- 2.45.2