I am trying to take stock of the extent of missingness over multiple years for multiple subsets of variables. So, I've been working on a macro to automate this. There is a problem in my code (in blue) where I try to generate a variable that is a count of missings for each row. The counts in the resulting variable are incorrect. %LET STEST2 = VAR1 VAR2 VAR3... VAR35 /* &SVARS */
/* LISTN (LISTNAME) = TEST */
%MACRO PERCENTCOMPLETE(YEARS,SVARS,LISTN);
%LET COUNT = %SYSFUNC(COUNTW(&YEARS));
%DO I = 1 %TO &COUNT;
%LET YEAR = %SCAN(&YEARS, &I);
%PUT YEAR = &YEAR LISTN = &LISTN SVARS = &SVARS;
DATA WORK.SVARS&YEAR&LISTN;
SET S2&YEAR;
KEEP &SVARS ;
RUN ;
DATA WORK.MODELVARS&YEAR&LISTN;
SET SVARS&YEAR&LISTN;
ARRAY VARS {*} _NUMERIC_ ;
NUM_VAR&YEAR&LISTN = DIM(VARS);
RUN ;
DATA PERCOM&YEAR&LISTN ;
SET MODELVARS&YEAR&LISTN ;
MISSCOUNT&YEAR&LISTN = CMISS(OF _ALL_); MISSPER&YEAR&LISTN = MISSCOUNT&YEAR&LISTN/NUM_VAR&YEAR&LISTN;
LENGTH COMOBS&YEAR&LISTN 3. ;
COMOBS&YEAR&LISTN = 0 ;
IF MISSCOUNT&YEAR&LISTN = 0 THEN COMOBS&YEAR&LISTN = 1 ;
LENGTH EMPOBS&YEAR&LISTN 3.;
EMPOBS&YEAR&LISTN = 0 ;
IF MISSPER&YEAR&LISTN = 1 THEN EMPOBS&YEAR&LISTN = 1 ;
RUN ;
%END;
%MEND ;
%PERCENTCOMPLETE(2017 2018 2019 2020 2021 2022 2023, &STEST2, TEST); I know that I can use: MISSCOUNT&YEAR&LISTN = CMISS(OF VAR1 -- VAR35); However, I want to be able to run this for different subsets that have different starting and ending variables. At this point, I could have just copied and pasted the code 800 times with that small edit, but I am being stubborn. All suggestions very appreciated!
... View more