* This is a general macro to create dummy variables. * rlevesque@videotron.ca 2002/12/28. SET MPRINT=no. * Save the following macro in a file called dumcode.sps. *////////////////////. DEFINE !DumCode(NomVar =!CharEnd ('/') /PreNam =!CharEnd ('/') /RefCat =!DEFAULT("NONE") !CharEnd ('/') /FPath =!CMDEnd) /* NomVar Name of nominal variable for which dummy var need to be created */ /* PreNam Root (or stem) of new dummy variables */ /* RefCat No dummy variable is created for the Reference Category */ /* (Do not use this parameter if there is none) */ /* FPath Full path and name of data file */ GET FILE=!FPath. *Find all categories. AGGREGATE /OUTFILE=* /BREAK=!NomVar /N_BREAK=N. STRING vname1 TO vname3 (A7). COMPUTE catvalue=!NomVar. COMPUTE vname1=RTRIM(LTRIM(STRING(catvalue,F8.0))). COMPUTE vname2=!QUOTE(!NomVar). COMPUTE vname3=CONCAT(!QUOTE(!EVAL(!PreNam)),vname1). DO IF catvalue<>!RefCat OR !QUOTE(!RefCat)="NONE". WRITE OUTFILE='c:\\temp\\define dum.sps' / 'COMPUTE ' vname3 '=(' vname2 '=' catvalue ').' / 'VALUE LABELS ' vname3 ' 0 "no" 1 "yes".'. END IF. EXECUTE. GET FILE=!FPath. INCLUDE 'C:\\temp\\define dum.sps'. EXECUTE. !ENDDEFINE. *////////////////////. * One does not need to know the number of categories to call the macro. * the categories can equal 0, or any positive integer. * the categories do not have to be consecutive. * Using the INCLUDE statement, only 2 lines of code are needed to run the macro. INCLUDE 'c:\\temp\\dumcode.sps'. *Next line creates dummy variables when 0 is the reference variable. !DumCode NomVar=jobcat /PreNam=job /RefCat=1 /FPath='C:\\Program Files\\SPSS\\employee data.sav'. * Next line creates dummy variables when 2 is the reference variable. !DumCode NomVar=jobcat /PreNam=job /RefCat=2 /FPath='C:\\Program Files\\SPSS\\employee data.sav'. * Next line creates dummy variables when there is no reference variable. !DumCode NomVar=jobcat /PreNam=job /FPath='C:\\Program Files\\SPSS\\employee data.sav'. *****************************. * Treatment of missing or negative variable: * System missing or user missing values results in missing values of the dummy variables. * No tests are made that the values of NomVar are indeed integers.