/*In which folder is your TIMSS data located?*/ /*kaz*/ %let datafolder=H:\My Webpage\TIMSSDATA; /*kaz*/ /*In which folder do you want to store your new SAS data?*/ /*kaz*/ %let sasfolder=H:\My webpage\SAS; /*kaz*/ /* You will find a line like this. %kokka (fname=usa,fnameB=usa); */ /*kaz*/ /*You can do as many countries as you want at one run*/ /*kaz*/ /*Use Kmerge.sas to merge these three data later*/ /*kaz*/ /*kaz*/ option compress=yes; /*kaz*/ libname library "&sasfolder"; /*kaz*/ libname libdat "&sasfolder"; /*kaz*/ libname tmp "&sasfolder"; /*kaz*/ libname realtmp "&sasfolder"; /*kaz*/ libname here "&sasfolder"; %macro kokka (fname=,fnameB=); *filename rawstud PIPE "gzcat /DL/educ/timss/pop2/data/bsg&fname.1.dat.gz"; *filename rawlink PIPE "gzcat /DL/educ/timss/pop2/data/blg&fname.1.dat.gz"; *filename rawschl PIPE "gzcat /DL/educ/timss/pop2/data/bcg&fnameB.1.dat.gz"; *filename rawmtea PIPE "gzcat /DL/educ/timss/pop2/data/btm&fname.1.dat.gz"; filename rawstud "&datafolder\bsg&fname.1.dat"; filename rawlink "&datafolder\blg&fname.1.dat"; filename rawschl "&datafolder\bcg&fnameB.1.dat"; filename rawmtea "&datafolder\btm&fname.1.dat"; /*kaz*/ PROC FORMAT LIBRARY=library ; *DATA &fname; DATA std&fname; INFILE rawstud LRECL=1024 END=eof LENGTH=lnline LINE=ln MISSOVER ; LENGTH DEFAULT=5 ; LENGTH IDCNTRY 3 ; LENGTH IDSCHOOL 6 ; LENGTH IDCLASS 8 ; LENGTH IDSTUD 8 ; LENGTH ITSEX 3 ; LENGTH IDGRADER 3 ; LENGTH TOTWGT 8 ; LENGTH HOUWGT 8 ; LENGTH SENWGT 8 ; LENGTH WGTFAC1 8 ; LENGTH WGTADJ1 8 ; LENGTH JKZONE 3 ; LENGTH JKINDIC 3 ; LENGTH BIMATSCR 8 ; LENGTH BISCISCR 8 ; LENGTH DPCDATE 6 ; MISSING A B R N ; INPUT IDCNTRY 3 - 5 IDSCHOOL 10 - 15 IDCLASS 16 - 23 IDSTUD 24 - 33 ITSEX 42 - 42 IDGRADER 54 - 54 TOTWGT 496 - 503 .3 HOUWGT 504 - 509 .3 SENWGT 510 - 515 .3 WGTFAC1 516 - 522 .2 WGTADJ1 523 - 528 .3 JKZONE 547 - 548 JKINDIC 549 - 549 BIMATSCR 574 - 579 .2 BISCISCR 586 - 591 .2 DPCDATE 659 - 664 ; %PUT INFO: assign value labels to variables ; FORMAT ITSEX BSG13F. ; FORMAT IDGRADER BSG19F. ; FORMAT JKINDIC BSG435F. ; %PUT INFO: assign labels to variables ; LABEL IDCNTRY = "*COUNTRY ID*" IDSCHOOL = "*SCHOOL ID*" IDCLASS = "*CLASS ID*" IDSTUD = "*STUDENT ID*" ITSEX = "*STUDENT'S SEX*" IDGRADER = "*GRADE*" TOTWGT = "*STUDENT WEIGHT*" HOUWGT = "*HOUSE WEIGHT*" SENWGT = "*SENATE WEIGHT*" WGTFAC1 = "*WEIGHTING FACTOR I (SCHOOL)*" WGTADJ1 = "*WEIGHTING ADJUSTMENT I (SCHOOL)*" JKZONE = "*ZONE CODE*" JKINDIC = "*REPLICATE CODE*" BIMATSCR = "*INTERNATIONAL MATHEMATICS SCORE*" BISCISCR = "*INTERNATIONAL SCIENCE SCORE*" DPCDATE = "*FILE CREATION DATE AT DPC HAMBURG*" ; /*seito*/ *if idgrader=2; Select(ITSEX ); when(8) ITSEX =.A ; when(9) ITSEX =. ; otherwise; end; Select(IDGRADER); when(8) IDGRADER=.A ; when(9) IDGRADER=. ; otherwise; end; Select(DPCDATE ); when(999998) DPCDATE =.A ; when(999999) DPCDATE =. ;otherwise;end; /*seito*/subtotwt=totwgt/(wgtfac1*wgtadj1); /*seito*/proc sort; by idcntry idschool; /*seito*/proc means mean noprint /*data=&fname*/ data=std&fname; /*seito*/by idcntry idschool; /*seito*/var subtotwt; /*seito*/output out=hlmwgt2 mean=Msubtot;run; /*seito*/ /*seito*/data /*&fname*/ std&fname; /*seito*/merge /*&fname*/ std&fname hlmwgt2; /*seito*/by idcntry idschool; /*seito*/ hlmwgt=subtotwt/msubtot; /*withinschl weight HLM,but all get 1*/ /*seito*/drop _type_ _freq_ subtotwt msubtot; /*seito*/ proc sort;by idcntry idschool idstud; %PUT INFO: assign labels to variables ; LABEL ; RUN ; /*kaz*/ PROC FORMAT LIBRARY=library ; DATA link&fname; INFILE rawlink LRECL=1024 END=eof LENGTH=lnline LINE=ln MISSOVER ; LENGTH DEFAULT=5 ; LENGTH IDCNTRY 3 ; LENGTH IDSTUD 8 ; LENGTH IDTEACH 8 ; LENGTH IDSCHOOL 6;/*I added this*/ LENGTH IDLINK 3 ; LENGTH IDGRADER 3 ; LENGTH JKZONE 3 ; LENGTH JKINDIC 3 ; LENGTH BIMATSCR 8 ; LENGTH BISCISCR 8 ; LENGTH MATSUBJ 3 ; LENGTH MATWGT 8 ; LENGTH SCIWGT 8 ; LENGTH TCHWGT 8 ; LENGTH DPCDATE 6 ; MISSING A B R N ; INPUT IDCNTRY 3 - 5 IDSTUD 10 - 19 IDTEACH 20 - 27 IDSCHOOL 10-15 /*I added this*/ IDLINK 28 - 29 IDGRADER 30 - 30 JKZONE 32 - 33 JKINDIC 34 - 34 BIMATSCR 35 - 40 .2 BISCISCR 41 - 46 .2 MATSUBJ 107 - 107 MATWGT 112 - 119 .3 SCIWGT 120 - 127 .3 TCHWGT 128 - 135 .3 DPCDATE 136 - 141 ; %PUT INFO: assign value labels to variables ; FORMAT IDGRADER BLG9F. ; FORMAT JKINDIC BLG12F. ; FORMAT MATSUBJ BLG25F. ; %PUT INFO: assign labels to variables ; LABEL IDCNTRY = "*COUNTRY ID*" IDSTUD = "*STUDENT ID*" IDTEACH = "*TEACHER ID*" IDSCHOOL = "*SCHOOL ID*" /*I added this*/ IDLINK = "*TEACHER LINK NUMBER*" IDGRADER = "*GRADE*" JKZONE = "*ZONE CODE*" JKINDIC = "*REPLICATE CODE*" BIMATSCR = "*INTERNATIONAL MATHEMATICS SCORE*" BISCISCR = "*INTERNATIONAL SCIENCE SCORE *" MATSUBJ = "*Mathematics Teacher Link*" MATWGT = "*Weight for Mathematics Teacher Data*" SCIWGT = "*Weight for Science Teacher Data*" TCHWGT = "*Weight Mat & Sci Teacher Data combin*" DPCDATE = "*FILE CREATION DATE AT DPC HAMBURG*" ; Select(IDTEACH ); when(99999998) IDTEACH =.A ; when(99999999) IDTEACH =. ;otherwise;end; Select(IDLINK ); when(98) IDLINK =.A ; when(99) IDLINK =. ;otherwise;end; Select(IDGRADER); when(8) IDGRADER=.A ; when(9) IDGRADER=. ;otherwise;end; Select(MATWGT ); when(9998) MATWGT =.A ; when(9999) MATWGT =. ;otherwise;end; Select(SCIWGT ); when(9998) SCIWGT =.A ; when(9999) SCIWGT =. ;otherwise;end; Select(TCHWGT ); when(9998) TCHWGT =.A ; when(9999) TCHWGT =. ;otherwise;end; Select(DPCDATE ); when(999998) DPCDATE =.A ; when(999999) DPCDATE =. ;otherwise;end; /*kumi*/ if matsubj=1;/*only math teachers*/ /*kumi*/* IF IDGRADER=2; * Select only 8th graders SURE?; /*kumi*/ lnkwrong=0; /*kumi*/ if idschool ne int(idteach/100) then lnkwrong=1; /*kumi*/ proc sort; by idcntry idschool idstud; %PUT INFO: assign labels to variables ; LABEL ; RUN ; /*kaz*/ PROC FORMAT LIBRARY=library ; DATA mtea&fname; INFILE rawmtea LRECL=1024 END=eof LENGTH=lnline LINE=ln MISSOVER ; LENGTH DEFAULT=5 ; LENGTH IDCNTRY 3 ; LENGTH IDSCHOOL 6 ; LENGTH IDTEACH 8 ; LENGTH IDLINK 3 ; LENGTH IDGRADER 3 ; LENGTH BTBMDATA 3 ; LENGTH DPCDATE 6 ; MISSING A B R N ; INPUT IDCNTRY 3 - 5 IDSCHOOL 10 - 15 IDTEACH 16 - 23 IDLINK 24 - 25 IDGRADER 56 - 56 BTBMDATA 534 - 534 DPCDATE 853 - 858 ; %PUT INFO: assign value labels to variables ; FORMAT IDGRADER BTM16F. ; FORMAT BTBMDATA BTM407F. ; %PUT INFO: assign labels to variables ; LABEL IDCNTRY = "*COUNTRY ID*" IDSCHOOL = "*SCHOOL ID*" IDTEACH = "*TEACHER ID*" IDLINK = "*TEACHER LINK NUMBER*" IDGRADER = "*GRADE*" ILCOPYA = "*DATA COPY STATUS SECTION A*" BTBMDATA = "MAT\HOMEWORK\SMALL INVESTIGATIONS" DPCDATE = "*FILE CREATION DATE AT DPC HAMBURG*" ; /*kaz*/ *if idgrader=2;/*is this fine?*/ /*kaz*/ idkumi=(idteach*10)+idlink; /*kaz*/ if idkumi < -999 then idkumi=(1000*idschool)+999; Select(IDGRADER); when(8) IDGRADER=.A ; when(9) IDGRADER=. ;otherwise;end; Select(DPCDATE ); when(999998) DPCDATE =.A ; when(999999) DPCDATE =. ;otherwise;end; /*kumi for mtea*/ /*kumi for mtea*/ idkumi=(idteach*10)+idlink; /*kumi for mtea*/ if idkumi < -999 then idkumi = (idschool*1000)+999; %PUT INFO: assign labels to variables ; LABEL ; /*kumi for mtea*/ proc sort; /*kumi for mtea*/ by idcntry idschool idkumi idteach; RUN ; /*kaz*/ PROC FORMAT LIBRARY=library ; DATA schl&fname; INFILE rawschl LRECL=1024 END=eof LENGTH=lnline LINE=ln MISSOVER ; LENGTH DEFAULT=5 ; LENGTH IDCNTRY 3 ; LENGTH IDSCHOOL 6 ; LENGTH IDGRADER 3 ; LENGTH BCBGCOMM 3 ; LENGTH WGTFAC1 8 ; LENGTH WGTADJ1 8 ; LENGTH SCHWGT 8 ; LENGTH STOTWGTL 8 ; LENGTH STOTWGTU 8 ; LENGTH STOTWGTE 8 ; LENGTH DPCDATE 6 ; MISSING A B R N ; INPUT IDCNTRY 3 - 5 IDSCHOOL 10 - 15 IDGRADER 23 - 23 BCBGCOMM 25 - 25 WGTFAC1 556 - 562 .2 WGTADJ1 563 - 568 .3 SCHWGT 569 - 576 .3 STOTWGTL 577 - 584 .2 STOTWGTU 585 - 592 .2 STOTWGTE 593 - 600 .2 DPCDATE 637 - 642 ; %PUT INFO: assign value labels to variables ; FORMAT IDGRADER BCG8F. ; FORMAT BCBGCOMM BCG10F. ; %PUT INFO: assign labels to variables ; LABEL IDCNTRY = "*COUNTRY ID*" IDSCHOOL = "*SCHOOL ID*" IDGRADER = "*GRADE INDICATOR*" BCBGCOMM = "GEN\TYPE OF COMMUNITY" WGTFAC1 = "*1ST STAGE WEIGHT (SCHOOL WEIGHT)*" WGTADJ1 = "*ADJUSTMENT FACTOR 1 (SCHOOL WEIGHT)*" SCHWGT = "*SCHOOL LEVEL WEIGHT*" STOTWGTL = "*SUM OF STUDENT WEIGHTS - LOWER GRADE*" STOTWGTU = "*SUM OF STUDENT WEIGHTS - UPPER GRADE*" STOTWGTE = "*SUM OF STUDENT WEIGHTS - EXTRA GRADE*" DPCDATE = "*FILE CREATION DATE AT DPC HAMBURG*" ; Select(IDGRADER); when(8) IDGRADER=.A ; when(9) IDGRADER=. ;otherwise;end; Select(BCBGCOMM); when(8) BCBGCOMM=.A ; when(9) BCBGCOMM=. ; when(6) BCBGCOMM=.B ;otherwise;end; Select(STOTWGTL); when(99998) STOTWGTL=.A ; when(99999) STOTWGTL=. ;otherwise;end; Select(STOTWGTU); when(99998) STOTWGTU=.A ; when(99999) STOTWGTU=. ;otherwise;end; Select(STOTWGTE); when(99998) STOTWGTE=.A ; when(99999) STOTWGTE=. ;otherwise;end; Select(DPCDATE ); when(999998) DPCDATE =.A ; when(999999) DPCDATE =. ;otherwise;end; /*gakko*/ proc sort;by idcntry;run; /*gakko*/ proc means sum data=schl&fname noprint; /*gakko*/ by idcntry; var schwgt;output out=schwgt /*gakko*/ sum=Sschwgt;run; /*gakko*/ data schl&fname; /*gakko*/ merge schl&fname schwgt; /*gakko*/ by idcntry; /*gakko*/ schwgt2=schwgt*(50/Sschwgt);/*This school weight adds up to 50*/ /*gakko*/ rural=0;suburb=0;urban=0;locmiss=0; /*gakko*/ if bcbgcomm=1 or bcbgcomm=2 then rural=1; /*gakko*/ if bcbgcomm=3 then suburb=1; /*gakko*/ if bcbgcomm=4 then urban=1; /*gakko*/ if bcbgcomm < -9 then locmiss=1; %PUT INFO: assign labels to variables ; LABEL ; RUN ; /*kumi*/ data std&fname; /*kumi*/ merge std&fname link&fname; /*kumi*/ by idcntry idschool idstud; /*kumi*/ idkumi=(idteach*10)+idlink; /*kumi*/ if idkumi < -999 then idkumi=(1000*idschool)+999; /*kumi*/ drop _type_ _frq_; /*kumi*/ proc sort ; /*kumi*/ by idschool idkumi idstud; /*kaz*/ proc means data=std&fname;title "&fname students";run; /*kaz*/ proc means data=mtea&fname;title "&fname math teachers";run; /*kaz*/ proc means data=schl&fname;title "&fname principal data";run; /*kaz*/ proc means data=link&fname; /*kaz*/ title "&fname linkage data";run; /*kaz*/ data here.std&fname;set std&fname; /*kaz*/ data here.mtea&fname;set mtea&fname; /*kaz*/ data here.schl&fname;set schl&fname; %mend kokka; %kokka (fname=usa,fnameB=usa); /*kaz*/ /*kaz*/ /*kaz*/ /*%kokka (fname=aus,fnameB=aus); %kokka (fname=aut,fnameB=aut); %kokka (fname=bfl,fnameB=bfl); %kokka (fname=bfr,fnameB=bfr); %kokka (fname=bgr,fnameB=bgr);*no student background; %kokka (fname=can,fnameB=can); %kokka (fname=col,fnameB=col); %kokka (fname=cyp,fnameB=cyp); %kokka (fname=csk,fnameB=csk); %kokka (fname=dnk,fnameB=dnk); %kokka (fname=gbr,fnameB=gbr); %kokka (fname=fra,fnameB=fra); %kokka (fname=deu,fnameB=deu); %kokka (fname=grc,fnameB=grc); %kokka (fname=hkg,fnameB=hkg); %kokka (fname=hun,fnameB=hun); %kokka (fname=isl,fnameB=isl); %kokka (fname=irn,fnameB=irn); %kokka (fname=irl,fnameB=irl); %kokka (fname=isr,fnameB=isr); %kokka (fname=jpn,fnameB=jpn); %kokka (fname=kor,fnameB=kor); %kokka (fname=kwt,fnameB=kwt); %kokka (fname=lva,fnameB=lva); %kokka (fname=ltu,fnameB=ltu); %kokka (fname=nld,fnameB=nld); %kokka (fname=nzl,fnameB=nzl); %kokka (fname=nor,fnameB=nor); %kokka (fname=phl,fnameB=nor);*dummy data; %kokka (fname=prt,fnameB=prt); %kokka (fname=rom,fnameB=rom); %kokka (fname=rus,fnameB=rus); %kokka (fname=sco,fnameB=sco); %kokka (fname=sgp,fnameB=sgp); %kokka (fname=slv,fnameB=slv); %kokka (fname=svn,fnameB=svn); %kokka (fname=zaf,fnameB=nor);*dummy data; %kokka (fname=esp,fnameB=esp); %kokka (fname=swe,fnameB=swe); %kokka (fname=che,fnameB=che); %kokka (fname=tha,fnameB=tha); %kokka (fname=usa,fnameB=usa);*/