|
/* Example SAS program to create balanced enumerated person */
/* (combined) long longitudinal file. */
/* Created by: Simon Freidin (Updated by: Nicole Watson) */
/* ********************************************************************* */
/* Section 1: locate datasets, get balanced cases, load renaming macro */
/* ********************************************************************* */
* (1.1) Location of datasets (edit to reflect your paths);
libname wave1 'e:\a\written datasets\a60\SAS a60c';
libname wave2 'e:\b\written datasets\b60\SAS b60c';
libname wave3 'e:\c\written datasets\c60\SAS c60c';
libname wave4 'e:\d\written datasets\d60\SAS d60c';
libname wave5 'e:\e\written datasets\e60\SAS e60c';
libname wave6 'e:\f\written datasets\f60\SAS f60c';
libname long 'e:\a\data\long'; * output datasets;
* Master file;
data master;
set wave6.master_f60c (keep=xwaveid ahhrpid afstatus bhhrpid bfstatus chhrpid cfstatus
dhhrpid dfstatus ehhrpid efstatus fhhrpid ffstatus);
* Wave 1 enumerated persons;
data w1c;
set wave1.Combined_a60c;
* Wave 2 enumerated persons;
data w2c;
set wave2.Combined_b60c;
* Wave 3 enumerated persons;
data w3c;
set wave3.Combined_c60c;
* Wave 4 enumerated persons;
data w4c;
set wave4.Combined_d60c;
* Wave 5 enumerated persons;
data w5c;
set wave5.Combined_e60c;
* Wave 6 enumerated persons;
data w6c;
set wave6.Combined_f60c;
run;
* (1.2) Identify cases responding in all waves from the master file;
* status codes: 1=face to face interview, 2=telephone interview;
* Release 6 balanced panel, n = 8864 ;
data masters (keep=xwaveid ahhrpid bhhrpid chhrpid dhhrpid ehhrpid fhhrpid);
set master;
if afstatus in (1,2) and bfstatus in (1,2) and cfstatus in (1,2)
and dfstatus in (1,2) and efstatus in (1,2) and ffstatus in (1,2);
run;
* (1.3) Macro to rename variables, dropping first character of variable name,;
* ID's are not renamed;
* Writes a sas program to 'c:\temp', alter path if no c:\temp, also alter paths in %include statements;
%macro rename (ds);
data ren;
set &ds;
if _n_=1;
proc transpose data=ren out=ren2;var _all_;
data ren3;
file 'c:\temp\rencmds.sas';
set ren2 end=eof;
if _n_=1 then put " rename";
if _name_ not in ("XWAVEID","xwaveid",
"AHHRHID","AHHRPID","BHHRPID","BHHRHID","CHHRPID","CHHRHID","DHHRPID","DHHRHID",
"EHHRHID","EHHRPID","FHHRHID","FHHRPID",
"ahhrhid","ahhrpid","bhhrpid","bhhrhid","chhrpid","chhrhid","dhhrpid","dhhrhid","ehhrhid","ehhrpid",
"fhhrhid","fhhrpid")
then do;
_name2_=_name_ || '=' || substr(_name_,2);
put " " _name2_;
end;
if eof then put " ;";
run;
%mend;
run;
/* **************************************************************** */
/* Section 2: create "long" responding person longitudinal file */
/* **************************************************************** */
* (2.1) Rename waves. Run macro and then include generated rename;
* command file. Keep only those records in selected master file.;
%rename(w1c);run;
data longcw1;
set w1c;
%include 'c:\temp\rencmds.sas';
proc sort data=masters; by xwaveid;
proc sort data=longcw1; by xwaveid;
data longcw1;
merge masters (in=inc) longcw1;
by xwaveid;
if inc;
run;
%rename(w2c); run;
data longcw2;
set w2c;
%include 'c:\temp\rencmds.sas';
proc sort data=masters; by xwaveid;
proc sort data=longcw2; by xwaveid;
data longcw2;
merge masters (in=inc) longcw2;
by xwaveid;
if inc;
run;
%rename(w3c); run;
data longcw3;
set w3c;
%include 'c:\temp\rencmds.sas';
proc sort data=masters; by xwaveid;
proc sort data=longcw3; by xwaveid;
data longcw3;
merge masters (in=inc) longcw3;
by xwaveid;
if inc;
run;
%rename(w4c); run;
data longcw4;
set w4c;
%include 'c:\temp\rencmds.sas';
proc sort data=masters; by xwaveid;
proc sort data=longcw4; by xwaveid;
data longcw4;
merge masters (in=inc) longcw4;
by xwaveid;
if inc;
run;
%rename(w5c); run;
data longcw5;
set w5c;
%include 'c:\temp\rencmds.sas';
proc sort data=masters; by xwaveid;
proc sort data=longcw5; by xwaveid;
data longcw5;
merge masters (in=inc) longcw5;
by xwaveid;
if inc;
run;
%rename(w6c); run;
data longcw6;
set w6c;
%include 'c:\temp\rencmds.sas';
proc sort data=masters; by xwaveid;
proc sort data=longcw6; by xwaveid;
data longcw6;
merge masters (in=inc) longcw6;
by xwaveid;
if inc;
run;
* (2.2) Put datasets together to create the long longitudinal responding;
* person file, and add a year variable.;
data longc;
set longcw1 (in=w1) longcw2 (in=w2) longcw3 (in=w3) longcw4 (in=w4) longcw5 (in=w5) longcw6 (in=w6);
* Create year;
year=0;
if (w1=1) then year=2001;
if (w2=1) then year=2002;
if (w3=1) then year=2003;
if (w4=1) then year=2004;
if (w5=1) then year=2005;
if (w6=1) then year=2006;
run;
proc freq data = longc;
table year;
run;
* (2.3) Save permanent dataset;
data long.longc;
set longc;
*proc contents varnum data=long.longc;
run;
/* Supplementary programme to add longitudinal weights variables for Responding and Enumerated Persons specifically to be used in a balanced file of 6 waves. */
data weights;
set wave6.Combined_f60c;
keep xwaveid flnwtrp flnwte;
rename flnwtrp=lnwtrp flnwte=lnwte;
run;
data longc;
set long.longc;
drop lnwte lnwtrp;
run;
proc sort data=weights; by xwaveid;
proc sort data=longc; by xwaveid;
data long.longfinal;
merge longc (in=inlong) weights;
by xwaveid;
if inlong;
run;
data test;
set long.longfinal;
keep xwaveid year lnwte lnwtrp;
run;
proc sort data=test; by year;
proc means; var lnwtrp; by year;
run;
|