You are on page 1of 5

! Super Revised Hot Deck Imputation.bas !

RANDOMIZE
LET TOT = 4130 ! TOT = Total number of observations !
LET TRIALS = 100 ! Number of trials !
LET N1 = 2635 ! N1 = Number of total observations under employment status 1 !
LET N2 = 1434 ! N2 = Number of total observations under employment status 2 !
LET N3 = 61 ! N3 = Number of total observations under employment status 3 !
LET NRR = 0.3 ! NRR = Nonresponse rate !
LET NON = NRR * TOT ! NON = Number of total nonresponse observations !

!Matrices that will contain the imputed data for the one hundred data sets!
DIM SIMI(TOT*TRIALS,5), SIME(TOT*TRIALS,5)

! Matrices that will contain the data sets which has nonresponse observation for each
imputation class and nonresponse variable !
DIM SIMI1(N1,5), SIMI2(N2,5), SIMI3(N3,5), SIME1(N1,5), SIME2(N2,5),
SIME3(N3,5)

! Matrices that contains the criteria that will be computed later in the program!
DIM CRITIN(TRIALS,3), CRITEX(TRIALS,3)

OPEN #1: NAME "E:\EXPENDITURE30%\ES1MISSE30%.TXT"


MAT READ #1: SIME1
CLOSE #1

OPEN #2: NAME "E:\INCOME30%\ES1MISSI30%.TXT"


MAT READ #2: SIMI1
CLOSE #2

OPEN #3: NAME "E:\EXPENDITURE30%\ES2MISSE30%.TXT"


MAT READ #3: SIME2
CLOSE #3

OPEN #4: NAME "E:\INCOME30%\ES2MISSI30%.TXT"


MAT READ #4: SIMI2
CLOSE #4

OPEN #5: NAME "E:\EXPENDITURE30%\ES3MISSE30%.TXT"


MAT READ #5: SIME3
CLOSE #5

OPEN #6: NAME "E:\INCOME30%\ES3MISSI30%.TXT"


MAT READ #6: SIMI3
CLOSE #6

OPEN #7: NAME "E:\SIMEHD30%.TXT"


ERASE #7

OPEN #8: NAME "E:\SIMIHD30%.TXT"


ERASE #8

OPEN #9: NAME "E:\CRITEX30%.TXT"


ERASE #9

OPEN #10: NAME "E:\CRITIN30%.TXT"


ERASE #10

DO
LET TRIAL = TRIAL + 1 ! Trial count !

REM Hot deck imputation procedure

! PECK# = Observation number that was chosen randomly for the expenditure
variable under education status # !

! PICK# = Observation number that was chosen randomly for the income variable
under education status # !

FOR I= 1 TO N1
IF SIME1(I,5) = 0 THEN
LET PECK1 = INT(RND*N1) + 1
LET SIME1(I,4) = SIME1(PECK1,2)
END IF
IF SIMI1(I,5) = 0 THEN
LET PICK1 = INT(RND*N1) + 1
LET SIMI1(I,4) = SIMI1(PICK1,2)
END IF
NEXT I
FOR J = 1 TO N2
IF SIME2(J,5) = 0 THEN
LET PECK2 = INT(RND*N2) + 1
LET SIME2(J,4) = SIME2(PECK2,2)
END IF
IF SIMI2(J,5) = 0 THEN
LET PICK2 = INT(RND*N2) + 1
LET SIMI2(J,4) = SIMI2(PICK2,2)
END IF
NEXT J
FOR K = 1 TO N3
IF SIME3(K,5) = 0 THEN
LET PECK3 = INT(RND*N3) + 1
LET SIME3(K,4) = SIME3(PECK3,2)
END IF

IF SIMI3(K,5) = 0 THEN
LET PICK3 = INT(RND*N3) + 1
LET SIMI3(K,4) = SIMI3(PICK3,2)
END IF
NEXT K

LET MDSIMI1 = 0
LET MDSIMI2 = 0
LET MDSIMI3 = 0

LET MADSIMI1 = 0
LET MADSIMI2 = 0
LET MADSIMI3 = 0

LET RMSDSIMI1 = 0
LET RMSDSIMI2 = 0
LET RMSDSIMI3 = 0

LET MDSIME1 = 0
LET MDSIME2 = 0
LET MDSIME3 = 0

LET MADSIME1 = 0
LET MADSIME2 = 0
LET MADSIME3 = 0

LET RMSDSIME1 = 0
LET RMSDSIME2 = 0
LET RMSDSIME3 = 0

LET NUMB = 0
FOR A = 1 TO N1
LET NUM = NUM + 1
IF SIMI1(A,5) = 0 THEN
LET DIFFI1 = SIMI1(A,4) - SIMI1(A,3)
LET MDSIMI1 = MDSIMI1 + DIFFI1
LET MADSIMI1 = MADSIMI1 + (ABS(DIFFI1))
LET RMSDSIMI1 = RMSDSIMI1 + (DIFFI1)^2
END IF
IF SIME1(A,5) = 0 THEN
LET DIFFE1 = SIME1(A,4) - SIME1(A,3)
LET MDSIME1 = MDSIME1 + DIFFE1
LET MADSIME1 = MADSIME1 + (ABS(DIFFE1))
LET RMSDSIME1 = RMSDSIME1 + (DIFFE1)^2
END IF
FOR COL = 1 TO 5
LET SIMI(NUM,COL) = SIMI1(A,COL)
LET SIME(NUM,COL) = SIME1(A,COL)
NEXT COL

LET SIMI(NUM,2) = TRIAL


LET SIME(NUM,2) = TRIAL
NEXT A
FOR B = 1 TO N2
LET NUM = NUM + 1
IF SIMI2(B,5) = 0 THEN
LET DIFFI2 = SIMI2(B,4) - SIMI2(B,3)
LET MDSIMI2 = MDSIMI2 + DIFFI2
LET MADSIMI2 = MADSIMI2 + (ABS(DIFFI2))
LET RMSDSIMI2 = RMSDSIMI2 + (DIFFI2)^2
END IF
IF SIME2(B,5) = 0 THEN
LET DIFFE2 = SIME2(B,4) - SIME2(B,3)
LET MDSIME2 = MDSIME2 + DIFFE2
LET MADSIME2 = MADSIME2 + (ABS(DIFFE2))
LET RMSDSIME2 = RMSSIME2 + (DIFFE2)^2
END IF
FOR COL = 1 TO 5
LET SIMI(NUM,COL) = SIMI2(B,COL)
LET SIME(NUM,COL) = SIME2(B,COL)
NEXT COL
LET SIMI(NUM,2) = TRIAL
LET SIME(NUM,2) = TRIAL
NEXT B
FOR C = 1 TO N3
LET NUM = NUM + 1
IF SIMI3(C,5) = 0 THEN
LET DIFFI3 = SIMI3(C,4) - SIMI3(C,3)
LET MDSIMI3 = MDSIMI3 + DIFFI3
LET MADSIMI3 = MADSIMI3 + (ABS(DIFFI3))
LET RMSDSIMI3 = RMSDSIMI3 + (DIFFI3)^2
END IF
IF SIME3(C,5) = 0 THEN
LET DIFFE3 = SIME3(C,4) - SIME3(C,3)
LET MDSIME3 = MDSIME3 + DIFFE3
LET MADSIME3 = MADSIME3 + (ABS(DIFFE3))
LET RMSDSIME3 = RMSSIME3 + (DIFFE3)^2
END IF
FOR COL = 1 TO 5
LET SIMI(NUM,COL) = SIMI3(C,COL)
LET SIME(NUM,COL) = SIME3(C,COL)
NEXT COL
LET SIMI(NUM,2) = TRIAL
LET SIME(NUM,2) = TRIAL
NEXT C

LET CRITIN(TRIAL,1) = (MDSIMI1 + MDSIMI2 + MDSIMI3)/NON


LET CRITEX(TRIAL,1) = (MDSIME1 + MDSIME2 + MDSIME3)/NON
LET CRITIN(TRIAL,2) = (MADSIMI1 + MADSIMI2 + MADSIMI3)/NON
LET CRITEX(TRIAL,2) = (MADSIME1 + MADSIME2 + MADSIME3)/NON
LET CRITIN(TRIAL,3) = SQR((RMSDSIMI1 + RMSDSIMI2 +
RMSDSIMI3)/NON)
LET CRITEX(TRIAL,3) = SQR((RMSDSIME1 + RMSDSIME2 +
RMSDSIME3)/NON)

LOOP UNTIL TRIAL = TRIALS

MAT WRITE #7: SIME


MAT WRITE #8: SIMI

MAT WRITE #9: CRITEX


MAT WRITE #10: CRITIN

CLOSE #7
CLOSE #8
CLOSE #9
CLOSE #10

END

You might also like