%macro mcartest; /* PROVIDE VALUES FOR THE FOLLOWING MACRO VARIABLES */ %let datafile = "C:\Users\Bharat\Desktop\7037 Project\hbat_missing_new"; * FILE PATH FOR RAW DATA; %let numvars = 26; * NUMBER OF VARS IN DATA FILE; %let misscode = .; * SPECIFY MISSING VALUE CODE; %let varnames = v1_miss v2_miss v3_miss v4_miss v5_miss; * SPECIFY VARIABLE NAMES; %let seednum = 564321; * SPECIFY RANDOM SEED; /* DO NOT ALTER THE CODE BELOW */ data one; infile &datafile ; input &varnames ; array m[&numvars] &varnames ; array r[&numvars] r1 - r&numvars ; do i = 1 to &numvars; if m[i] = &misscode then m[i] = .; end; drop i; do i = 1 to &numvars; r[i] = 1; if m[i] = . then r[i] = 0; 21 end; drop i; proc sort; by r1-r&numvars; proc mi data = one seed = &seednum nimpute = 0 noprint; var &varnames; em outem = emcov; proc iml; use one; read all var {&varnames} into y; read all var {%do i = 1 %to &numvars; r&i %end;} into r; use emcov; read all var {&varnames} into em; mu = em[1,]; sigma = em[2:nrow(em),]; /* ASSIGN AN INDEX VARIABLE DENOTING EACH CASE’S PATTERN */ jcol = j(nrow(y), 1 , 1); do i = 2 to nrow(y); rdiff = r[i,] - r[i - 1,]; if max(rdiff) = 0 & min(rdiff) = 0 then jcol[i,] = jcol[i - 1,]; else jcol[i,] = jcol[i - 1,] + 1; end; /* NUMBER OF DISTINCT MISSING DATA PATTERNS */ j = max(jcol); /* PUT THE NUMBER OF CASES IN EACH PATTERN IN A COL VECTOR M */ /* PUT THE MISSING DATA INDICATORS FOR EACH PATTERN IN A MATRIX RJ */ m = j(j, 1, 0); rj = j(j, ncol(r), 0); do i = 1 to j; count = 0; do k = 1 to nrow(y); if jcol[k,] = i then do; count = count + 1; end; 22 if jcol[k,] = i & count = 1 then rj[i,] = r[k,]; m[i,] = count; end; end; /* COMPUTE D^2 STATISTIC FOR EACH J PATTERN */ d2j = j(j, 1, 0); do i = 1 to j; /* OBSERVED VALUES FOR PATTERN J */ yj = y[loc(jcol = i),loc(rj[i,] = 1)]; /* VARIABLE MEANS FOR PATTERN J */ ybarobsj = yj[+,]/nrow(yj); /* D = P X Pj MATRIX OF INDICATORS (SEE P. 1199) */ Dj = j(ncol(y), rj[i,+], 0); count = 1; do k = 1 to ncol(rj); if rj[i,k] = 1 then do; Dj[k, count] = 1; count = count + 1; end; end; /* REDUCE EM ESTIMATES TO CONTAIN OBSERVED ELEMENTS */ muobsj = mu * Dj; sigmaobsj = t(Dj) * sigma * Dj; /* THE CONTRIBUTION TO THE D^2 STATISTIC FOR EACH OF THE J PATTERNS */ d2j[i,] = m[i,] * (ybarobsj - muobsj) * inv(sigmaobsj) * t(ybarobsj - muobsj); end; 23 /* THE D^2 STATISTIC */ d2 = d2j[+,]; /* DF FOR D^2 */ df = rj[+,+] - ncol(rj); p = 1 - probchi(d2,df); /* PRINT ANALYSIS RESULTS */ file print; put "Number of Observed Variables = " (ncol(rj)) 3.0; put "Number of Missing Data Patterns = " (j) 3.0; put; put "Summary of Missing Data Patterns (0 = Missing, 1 = Observed)"; put; put "Frequency | Pattern | d2j"; put; do i = 1 to nrow(rj); put (m[i,]) 6.0 " | " @; do j = 1 to ncol(rj); put (rj[i,j]) 2.0 @; end; put " | " (d2j[i,]) 8.6; end; put; put "Sum of the Number of Observed Variables Across Patterns (Sigma psubj) = " (rj[+,+]) 5.0; put; put "Little’s (1988) Chi-Square Test of MCAR"; put; put "Chi-Square (d2) = " (d2) 10.3; put "df (Sigma psubj - p) = " (df) 7.0; put "p-value = " (p) 10.3; %mend mcartest; %mcartest; run;