/************************************************. * Syntax to replace missing values in a case by the median of the non missing values. Raynald Levesque rlevesque@videotron.ca ************************************************/. * Warnings are reported when a case has no missing values (because the RMV command cannot do its job). Of course, these warnings are to be ignored. SET MPRINT=on. * Define dummy data file for illustration purposes. NEW file. INPUT PROGRAM. SET SEED=98675423. VECTOR q(8F8.2). LOOP id=1 TO 25. LEAVE id. LOOP #cnt=1 TO 8. * say about 10% of answers should have missing value. IF UNIFORM(1)<.9 q(#cnt)=1+TRUNC(UNIFORM(9)). END LOOP. END CASE. END LOOP. END FILE. END INPUT PROGRAM. EXECUTE. LIST. *assume without loss of generality that all data are numeric. *if this is not the case: * save the Numeric Columns you are interested in a file NC along with the numeric case id. * delete the NC from you main file and save the resulting file as FILEB. * apply the following code to the file containing the NC. * merge the resulting file with FILEB. *Construct the variable names to be used after the FLIP. STRING nnames(A8). COMPUTE cn=$casenum. COMPUTE nnames=CONCAT('v',LTRIM(STRING(cn,F6.0))). EXECUTE. * Define a macro which will replace the missing values. */////////////////////////////////////////////////////. DEFINE !doit (nbvar=!TOKENS(1)). FLIP /NEWNAMES=nnames. VECTOR !CONCAT('r(',!nbvar,'F8)'). SUMMARIZE /TABLES=v1 TO !CONCAT(v,!nbvar) /FORMAT=NOLIST TOTAL /TITLE='Print Medians for checking purposes' /MISSING=VARIABLE /CELLS=MEDIAN . !DO !cnt=1 !TO !nbvar RMV !CONCAT(r,!cnt) = MEDIAN(!CONCAT(v,!cnt,',ALL)'). !DOEND MATCH FILES FILE=* /KEEP=case_lbl r1 TO !CONCAT(r,!nbvar). FLIP. *### in next line 8 is the number of variables in initial file. MATCH FILES FILE=* /KEEP=q1 TO q8 id. !ENDDEFINE. */////////////////////////////////////////////////////. *### in next line 25 is the number of cases in the original file. !doit nbvar=25. LIST.