* A program to create TAXSIM variables from the public SCF data. Creates a flatfile for the internet TAXSIM program using the 1998 public data.; * Kevin Moore (kevin.b.moore@frb.gov) 4/06; * This version excludes the state variable - only federal tax information is returned by TAXSIM; * Users that wish to calculate state tax information may set the STATE variable to -1 (in two places in the program). This will cause TAXSIM to compute state tax information for each observation for all states. Users may then average the tax variables for an approximation of federal and state tax liabilities and rates.; * ASSUMING ALL HHS THAT REPORT FILING SEPARATELY FILE JOINTLY; * NON-INCOME DOLLAR VALUES IN NOMINAL SURVEY YEAR DOLLARS, ALL INCOME AMOUNTS IN NOMINAL DOLLARS FROM ONE YEAR PRIOR TO THE SURVEY; * Items to change in each survey year program 1. Eligibility year for widowed filing status 2. Ceilings on home acquisition and home equity debt 3. Limit on charitable contributions 4. Itemized deduction AGI limits 5. Exemption amounts and phaseout limits 6. Standard deduction amounts 7. All year/dataset/filename references 8. Any SCF variable/question changes 9. Payroll tax rates and limits 10. LT/ST capitol gains/losses ratios; OPTIONS MPRINT; OPTIONS LINESIZE=80; LIBNAME SCF98 '/mecs/scf4/public/scf98/data/transf/' ACCESS=READONLY; FILENAME INTAX98 '/mecs/scf5/outside/taxsim/data/input/intax98.txt'; FILENAME TAXSIM98 '/mecs/scf5/outside/taxsim/data/output/test/t98pubtax.out'; * HAVE TO ADJUST ALL MACROS FOR PUBLIC DATASET AND FOR USE ON IMPUTED DATA; * testing Arthur's TERMCON macro from recodes.scf.loans.1, removing all jcode related code; %MACRO TERMCON(NPMT=,NYR=,NMO=,PFREQ=,PMT=,TPER=); IF (&NYR=0 & &NPMT=0) THEN DO; &NMO=0; END; ELSE IF (&NYR^=0|&NPMT^=0) THEN DO; IF (&NYR^=0) THEN DO; IF (&NYR=-1) THEN DO; &NMO=&NYR; IF (&NPMT=0) THEN DO; &NPMT=-1; END; END; ELSE IF (&NYR>0) THEN DO; &NMO=&NYR*12; IF (&NPMT=0) THEN DO; IF (&PFREQ IN (-1 -2)) THEN DO; &NPMT=-7; END; ELSE IF (&PFREQ=-7) THEN DO; &NPMT=-7; END; ELSE IF (&PFREQ=8) THEN DO; &NPMT=1; END; ELSE IF (&PFREQ>.Z) THEN DO; %MOCONV(AMT=&NMO,PER=&PFREQ,MOAMT=&NPMT,IML=NO); END; END; END; END; ELSE IF (&NPMT=-1) THEN DO; &NMO=-1; IF (&NYR=0) THEN DO; &NYR=-1; END; END; ELSE IF (&NPMT>0) THEN DO; PFREQ=&PFREQ; IF (PFREQ<=0 & &TPER>0) THEN PFREQ=&TPER; IF (PFREQ IN (-1 -2)) THEN DO; &NMO=-7; END; ELSE IF (PFREQ=-7) THEN DO; &NMO=-7; END; ELSE IF (PFREQ>.Z) THEN DO; %IMOCONV(AMT=&NPMT,PER=PFREQ,CAMT=&NMO,IML=NO); END; IF (&NMO>0) THEN DO; &NYR=MAX(1,INT(.5+(&NMO/12))); &NMO=MAX(1,ROUND(&NMO)); END; IF (&NYR=0) THEN DO; PUT "UNABLE TO CONVERT TERM " YY1= &NPMT= &NYR= &NMO= &PFREQ= &PMT= &TPER=; END; END; END; %MEND TERMCON; * conversion to monthly frequency; * NOTE: if per is missing, but amount is given, this macro returns the original value as MOAMT; %MACRO MOCONV(AMT=,PER=,MOAMT=&AMT,IML=YES,WKS=52,HRS=40,YEAR8=NO); IF (&PER=1) THEN &MOAMT=&AMT*5*&WKS/12; ELSE IF (&PER=2) THEN &MOAMT=&AMT*&WKS/12; ELSE IF (&PER=3) THEN &MOAMT=&AMT*26*(&WKS/52)/12; ELSE IF (&PER=4) THEN &MOAMT=&AMT; ELSE IF (&PER=5) THEN &MOAMT=&AMT/3; ELSE IF (&PER=6) THEN &MOAMT=&AMT/12; ELSE IF (&PER=20) THEN &MOAMT=&AMT*10/12; ELSE IF (&PER=21) THEN &MOAMT=&AMT*3/12; %IF (&YEAR8 EQ YES) %THEN %DO; ELSE IF (&PER=8) THEN &MOAMT=&AMT/12; %END; ELSE IF (&PER=11) THEN &MOAMT=&AMT*(&WKS/52)/6; ELSE IF (&PER=12) THEN &MOAMT=&AMT*(&WKS/52)/2; ELSE IF (&PER=23) THEN &MOAMT=&AMT*13/12; ELSE IF (&PER=24) THEN &MOAMT=&AMT*8.67/12; ELSE IF (&PER=31) THEN &MOAMT=&AMT*(&WKS/52)*2; ELSE IF (&PER=18) THEN &MOAMT=&AMT*&HRS*&WKS/12; ELSE IF (&PER=0) THEN &MOAMT=0; ELSE IF (&PER>.Z & &PER^=-1 & &PER^=-2) THEN DO; &MOAMT=.; %IF (&IML EQ YES) %THEN %DO; PRINT "ERROR: CANNOT TRANSLATE PER FOR " Y1 &AMT &PER &MOAMT; %END; %ELSE %DO; PUT / "ERROR: CANNOT TRANSLATE PER FOR " Y1= &AMT= &PER= &MOAMT=; %END; END; ELSE IF (&AMT>.Z & &AMT<-2) THEN DO; &MOAMT=.; %IF (&IML EQ YES) %THEN %DO; PRINT "ERROR: AMOUNT NEGATIVE, CANNOT TRANSLATE " YY1 &AMT &PER &MOAMT; %END; %ELSE %DO; PUT / "ERROR: AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= &AMT= &PER= &MOAMT=; %END; END; ELSE IF (&AMT<=.Z) THEN &MOAMT=&AMT; ELSE IF (&AMT^=-1 & &AMT^=-2) THEN DO; %IF (&IML EQ YES) %THEN %DO; PRINT "VALUE NOT CONVERTED FOR " Y1 X30075 &PER &AMT "SETTING AMT=."; &MOAMT=.; %END; %ELSE %DO; PUT "VALUE NOT CONVERTED FOR " Y1= &PER= &AMT= "SETTING AMT=."; &MOAMT=.; %END; END; %MEND MOCONV; * conversion from monthly frequency to another specified frequency; * NOTE: if per is missing, but amount is given, this macro returns the original value as CAMT; %MACRO IMOCONV(AMT=,PER=,CAMT=&AMT,IML=YES,WKS=52,HRS=40,YEAR8=NO); IF (&AMT>0) THEN DO; IF (&PER=1) THEN &CAMT=&AMT*12/(5*52); ELSE IF (&PER=2) THEN &CAMT=MAX(1,INT(.5+(&AMT*12/&WKS))); ELSE IF (&PER=3) THEN &CAMT=MAX(1,INT(.5+(&AMT*12/26))); ELSE IF (&PER=4) THEN &CAMT=MAX(1,INT(.5+(&AMT))); ELSE IF (&PER=5) THEN &CAMT=MAX(1,INT(.5+(&AMT*3))); ELSE IF (&PER=6) THEN &CAMT=MAX(1,INT(.5+(&AMT*12))); ELSE IF (&PER=21) THEN &CAMT=MAX(1,INT(.5+(&AMT*4))); ELSE IF (&PER=20) THEN &CAMT=MAX(1,INT(.5+(&AMT*12/10))); %IF (&YEAR8 EQ YES) %THEN %DO; ELSE IF (&PER=8) THEN &CAMT=MAX(1,INT(.5+(&AMT*12))); %END; ELSE IF (&PER=11) THEN &CAMT=&AMT*6/(&WKS/52); ELSE IF (&PER=12) THEN &CAMT=&AMT*2/(&WKS/52); ELSE IF (&PER=31) THEN &CAMT=&AMT/(2*(&WKS/52)); ELSE IF (&PER=14) THEN &CAMT=&AMT/(2*(&WKS/52)); ELSE IF (&PER=18) THEN &CAMT=&AMT*12/(&HRS*&WKS); ELSE IF (&PER=0) THEN &CAMT=0; ELSE IF (&PER>.Z) THEN DO; &CAMT=&AMT; %IF (&IML EQ YES) %THEN %DO; PRINT "ERROR: CANNOT TRANSLATE PER FOR " Y1 X30075 &AMT &PER &CAMT; %END; %ELSE %DO; PUT "ERROR: CANNOT TRANSLATE PER FOR " Y1= &AMT= &PER= &CAMT=; %END; END; END; ELSE IF (&AMT>.Z & &AMT<-2) THEN DO; &CAMT=&AMT; %IF (&IML EQ YES) %THEN %DO; PRINT "ERROR: AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1 &AMT &PER &CAMT; %END; %ELSE %DO; PUT "ERROR: AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= &AMT= &PER= &CAMT=; %END; END; ELSE IF (&AMT=0) THEN &CAMT=0; ELSE IF (&AMT<=.Z) THEN &CAMT=&AMT; ELSE IF (&AMT^=-1 & &AMT^=-2) THEN DO; %IF (&IML EQ YES) %THEN %DO; PRINT "VALUE NOT CONVERTED FOR " Y1 &PER &AMT "SETTING CAMT=."; &CAMT=.; %END; %ELSE %DO; PUT "VALUE NOT CONVERTED FOR " Y1= &PER= &AMT= "SETTING CAMT=."; &CAMT=.; %END; END; %MEND IMOCONV; %MACRO ACONV(F); ((&F=2)*52.18+(&F=3)*26.09+(&F=4)*12+(&F=5)*4+(&F=6)+(&F=8)+ (&F=11)*2+(&F=12)*6+(&F=31)*24+(&F=14)+(&F=22)) %MEND ACONV; %MACRO MORTPAY(AMTB=,MPAY=,IR=,TERM=); &MPAY=ROUND((MORT((&AMTB),.,((&IR/10000)/12),(&TERM))),.01); %MEND MORTPAY; DATA T98(KEEP=YY1 Y1 AMTOWEM1 CURBALM1 AINTDCTM1 CINTDCTM1 SINTDCTM1 X723 X7571 X820 X811 X809 X814 X806 X805 X804 X812 CMOPAYM1 CMOPAYM2 CMOPAYM3 WGT NUMORT TOTDEDCTM X920 X1020 X911 X1011 X701 X1101 X1102 X1103 X1114 X1125 X1105 X1116 X1127 X1108 X1119 X1130 X1136 X1104 X1115 X1126 X1106 X1117 X1128 TOTDEDCTL TOTAQDBTL TOTEQDBTL AMTOWEO1 CURBALO1 AINTDCTO1 CINTDCTO1 SINTDCTO1 TOTDEDCTO X1701 X1703 X1803 X1903 X702 X714 X715 X7135 X716 TOTAMTOUTM TOTAMTOUTO X802 X902 X1002 X905 X1005 X1715 X1815 X1915 X1713 X1813 X1913 X7137 X6723 X1711 X1811 X1911 GRFAMTOUTM HAAMTOUTM X5746 X5744 QUALOTHPROP OVERLIM ADJDEDCT ADJDEDCTO FMVOTHPROP HOUSE ADJDEDCTL ADJEQDBTL ADJAMTOUTO AVINTDCTM1 AVINTDCTM2 AVINTDCTM3 AVINTDCTO1 AVINTDCTO2 AVINTDCTO3 X810 X721 X722 J721 J722 X1720 X1820 X1920 RESTAXM1 PROPTXRATE X7182 TOTINTINC TOTLOCINVEX TOTINVEX TOTLNINVEX QUALOANINV HINVEX GCHARITY CHARITYAMT X5751 X7651 X7652 X5823 TOTITEMDCT STDDCT ITEMIZE CITEMIZE AGI TOTINVPDCT QUALINVPROP AGICL DEDCTLIM X7372 X7018 X8023 X105 NPEU NPEUINC PERSEXP KIDS TOTEXPT FILESTAT TOTEXPTAMT EXPTLIM RAGE SPAGE YEAR STATE MARITST WSINCOME WSINCSP TBUSINC NTAXINC INTINC DIVINC CAPGLINC RENTINC UNEMPINC CHSPALINC AFDCINC PENINC OTHINC GSSINC OTHPINC NONTAX RENT UNADJTOTDEDCT CHCAREXP AGEXMP X5729 TOTXINC PAYROLLIAB PAYROLLMTR PAYROLLATR LWP KIDSU17 STCAPINC LTCAPINC AMTPREFDEDCT AMTNPREFDEDCT); SET SCF98.P98I6; WGT=(X42001/5); * Coding income and AGI variables with -1 and -2 to zero; ARRAY NEG {*} X5704 X5714 X5724 X5729 X5751 X7651 X7652; DO I=1 TO DIM(NEG); IF NEG{I} IN(-2 -1) THEN NEG{I}=0; END; * Computing filing status, will also assign head of hh status to Rs who have a qualified dependent. Using TAXSIM codes for filing status, assume all couples living together file joint returns. Also using x5744/x5746 to ensure no missclassifications; * Absent spouse/partner indicator; IF (X100=5) | (X106=5 & X107=5) THEN ABSP_P=1; ELSE ABSP_P=0; PERSEXP=1+(X105 IN(1 2))*(ABSP_P=0); KIDS=(X108 IN(4 13))*(X110 < 19) + (X114 IN(4 13))*(X116 < 19) + (X120 IN(4 13))*(X122 < 19) + (X126 IN(4 13))*(X128 < 19) + (X132 IN(4 13))*(X134 < 19) + (X202 IN(4 13))*(X204 < 19) + (X208 IN(4 13))*(X210 < 19) + (X214 IN(4 13))*(X216 < 19) + (X220 IN(4 13))*(X222 < 19); * Child tax credit - must be under 17; KIDSU17=(X108 IN(4 13))*(X110 < 17) + (X114 IN(4 13))*(X116 < 17) + (X120 IN(4 13))*(X122 < 17) + (X126 IN(4 13))*(X128 < 17) + (X132 IN(4 13))*(X134 < 17) + (X202 IN(4 13))*(X204 < 17) + (X208 IN(4 13))*(X210 < 17) + (X214 IN(4 13))*(X216 < 17) + (X220 IN(4 13))*(X222 < 17); TOTEXPT=PERSEXP+KIDS; FILESTAT=0; * Codes for filestat, special treatment necessary for absent spouse/parnter cases - assuming these hhs file as single or head of household. 0= No return filed 1= Single 2= Married filing jointly 4= Head of HH 5= Qualified widower; IF (X5744 IN(1 6) & X5746=0 & PERSEXP=1 & KIDS=0) THEN FILESTAT=1; ELSE IF (X5744 IN(1 6) & X5746 IN(3 4) & PERSEXP IN(1 2) & KIDS=0) THEN FILESTAT=1; ELSE IF (X5744 IN(1 6) & X5746=0 & ABSP_P=1 & PERSEXP=1 & KIDS=0) THEN FILESTAT=1; ELSE IF (X5744 IN(1 6) & X5746 IN(1 2) & PERSEXP=2) THEN FILESTAT=2; ELSE IF (X5744 IN(1 6) & X5746=0 & PERSEXP=1 & KIDS > 0) THEN FILESTAT=4; ELSE IF (X5744 IN(1 6) & X5746 IN(3 4) & PERSEXP IN(1 2) & KIDS > 0) THEN FILESTAT=4; ELSE IF (X5744 IN(1 6) & X5746=0 & PERSEXP=1 & KIDS > 0 & ABSP_P=1) THEN FILESTAT=4; ELSE IF (X5744 IN(1 6) & X5746=0 & PERSEXP=1 & KIDS > 0 & X8023=5 & X7372=5 & X8007 >= 1995) THEN FILESTAT=5; * Extra code to determine filing status when the sample is not limited to hhs who report filing or intend to file a tax return. Cannot separate out single filers in couples where only one person files, also do not have an estimate of AGI, will just use x5729, which assumes no adjustments to income; ELSE IF (X5744=5) THEN DO; IF (PERSEXP=1 & KIDS=0) THEN FILESTAT=1; ELSE IF (PERSEXP=2) THEN FILESTAT=2; ELSE IF (PERSEXP=1 & KIDS > 0) THEN FILESTAT=4; ELSE IF (PERSEXP=1 & KIDS > 0 & X8023=5 & X7372=5 & X8007 >= 1995) THEN FILESTAT=5; END; ELSE IF (FILESTAT=0 & Y1=YY1*10+1) THEN PUT "NO FILING STATUS?? " Y1= X5744= X5746= X8023= X105= PERSEXP= KIDS= X100= X106= X107= X7372= X7018= /; * Indicator for R living with a partner; LWP=(X8023=2); RAGE=X14; SPAGE=X19; ************Mortgage interest deduction; * Convert real estate taxes on primary residence into a yearly amount; RESTAXM1=0; IF (X721 > 0) THEN DO; RESTAXM1=X721*%ACONV(X722); END; * Create arrays for various mortgage loan components; ARRAY TLMTH {*} TLMTHM1 TLMTHM2 TLMTHM3; ARRAY CMOPAY {*} CMOPAYM1 CMOPAYM2 CMOPAYM3; ARRAY PAYLFT {*} PAYLFTM1 PAYLFTM2 PAYLFTM3; ARRAY AMTOWE {*} AMTOWEM1 AMTOWEM2 AMTOWEM3; ARRAY AMTOWE_1 {*} AMTOWE_1M1 AMTOWE_1M2 AMTOWE_1M3; ARRAY AINTDCT {*} AINTDCTM1 AINTDCTM2 AINTDCTM3; ARRAY LNAGE {*} LNAGEM1 LNAGEM2 LNAGEM3; ARRAY CURBAL {*} CURBALM1 CURBALM2 CURBALM3; ARRAY CURBAL_1 {*} CURBAL_1M1 CURBAL_1M2 CURBAL_1M3; ARRAY CINTDCT {*} CINTDCTM1 CINTDCTM2 CINTDCTM3; ARRAY DCTDIFF {*} DCTDIFFM1 DCTDIFFM2 DCTDIFFM3; ARRAY SINTDCT {*} SINTDCTM1 SINTDCTM2 SINTDCTM3; ARRAY AVINTDCT {*} AVINTDCTM1 AVINTDCTM2 AVINTDCTM3; ARRAY NMPMT {*} X807 X907 X1007; ARRAY NMYR {*} X806 X906 X1006; ARRAY REGPAYF {*} X809 X909 X1009; ARRAY REGPAY {*} X808 X908 X1008; ARRAY TYPAYF {*} X814 X914 X1014; ARRAY TYPAY {*} X813 X913 X1013; ARRAY LNSTYR {*} X802 X902 X1002; ARRAY HBALLN {*} X811 X911 X1011; ARRAY BALLN {*} X812 X912 X1012; ARRAY HAVELN {*} X723 X830 X931; ARRAY AMTBORR {*} X804 X904 X1004; ARRAY JAMTBORR {*} J804 J904 J1004; ARRAY AMTOUT {*} X805 X905 X1005; ARRAY JAMTOUT {*} J805 J905 J1005; ARRAY INTRATE {*} X816 X916 X1016; ARRAY ONSCHED {*} X7571 X7570 X7569; * Initialize some variables; DO I=1 TO DIM(TLMTH); TLMTH{I}=0; CMOPAY{I}=0; PAYLFT{I}=0; AMTOWE{I}=0; AMTOWE_1{I}=0; AINTDCT{I}=0; LNAGE{I}=0; CURBAL{I}=0; CURBAL_1{I}=0; CINTDCT{I}=0; DCTDIFF{I}=0; SINTDCT{I}=0; AVINTDCT{I}=0; END; NUMORT=(X723=1)+(X830=1)+(X931=1); TOTAMTOUTM=0; TOTDEDCTM=0; GRFAMTOUTM=0; HAAMTOUTM=0; * using the TERMCON and MONCONV macros to determine the remaining term of the loan and to convert all payment to monthly frequency; DO I=1 TO DIM(NMPMT); %TERMCON(NPMT=NMPMT{I},NYR=NMYR{I},NMO=TLMTH{I},PFREQ=REGPAYF{I},PMT=REGPAY{I}, TPER=TYPAYF{I}); IF (REGPAY{I} > 0) THEN DO; %MOCONV(AMT=REGPAY{I},MOAMT=CMOPAY{I},PER=REGPAYF{I},IML=NO,YEAR8=YES); END; ELSE DO; %MOCONV(AMT=TYPAY{I},MOAMT=CMOPAY{I},PER=TYPAYF{I},IML=NO,YEAR8=YES); END; IF NMYR{I} NOT IN (0 -1 -7) THEN DO; PAYLFT{I}=(TLMTH{I}-((1998-LNSTYR{I})*12)); LNAGE{I}=TLMTH{I}-PAYLFT{I}; END; ELSE DO; PAYLFT{I}=0; LNAGE{I}=0; END; END; * Need to adjust monthly payments when taxes and/or insurance is included. If there is no balloon payment, and if the mort function value is less than the reported monthly payment amount then use mort function value as monthly payment. If there is no balloon and the mort function value is greater than the reported monthly amount, use the reported monthly amount. If there is a balloon and the amount borrowed is greater than the balloon, subtract the amount of the balloon and use this adjusted amount borrowed to figure the mort function value. If there is a balloon and the amount borrowed is less than the balloon, leave the amount borrowed as is. If the amount borrowed is equal to the balloon, then the mort function value is assumed to be just the amount borrowed times the interest rate. Once we have the mort value function compare it to the reported amount using the same rules as in the no balloon case. Only need to check this for first mortgage.; IF ((X723=1) & (X810 IN(1 2 3)) & TLMTHM1 > 0 & X816 > 0) THEN DO; IF (X811=1) THEN DO; %MORTPAY(AMTB=X804,MPAY=AMOPAYM1,IR=X816,TERM=TLMTHM1); IF (CMOPAYM1 > AMOPAYM1) THEN CMOPAYM1=AMOPAYM1; * ELSE IF (CMOPAYM1 <= AMOPAYM1) & Y1=YY1*10+1 THEN PUT "ADJUSTED MONTHLY PAYMENT GREATER THAN COMPUTED MONTHLY PAYMENT " Y1= X804= CMOPAYM1= AMOPAYM1= X816= X810= X721= X722= RESTAXM1= TLMTHM1= X811= X812= /; END; ELSE IF (X811=2) THEN DO; IF (X804 > X812) THEN ADJBORR=X804-X812; ELSE IF (X804 < X812) THEN ADJBORR=X804; IF ADJBORR > 0 THEN %MORTPAY(AMTB=ADJBORR,MPAY=AMOPAYM1,IR=X816,TERM=TLMTHM1); IF (X804=X812) THEN AMOPAYM1=((X804)*(X816/10000))/12; IF (CMOPAYM1 > AMOPAYM1) THEN CMOPAYM1=AMOPAYM1; * ELSE IF (CMOPAYM1 <= AMOPAYM1) & Y1=YY1*10+1 THEN PUT "ADJUSTED MONTHLY PAYMENT GREATER THAN COMPUTED MONTHLY PAYMENT " Y1= X804= CMOPAYM1= AMOPAYM1= X816= X810= X721= X722= RESTAXM1= TLMTHM1= X811= X812= /; END; END; * First check for balloon payment, and if balloon is equal to amount borrowed, use amount borrowed times the interest rate as interest deduction, as long as this amount is not more than the annualized payment amount. If the balloon is not equal to amount borrowed or the annual payment criteria is not met, compute with non-balloon payment loans. If the term of the loan is coded -1 or -7 and there is a positive outstanding balance and interest rate, use that to compute the interest deduction. If the interest rate is equal to -1, then set interest deduction to zero.; * Computing the balance outstanding two ways, one starting from the begining of the loan (CURBAL) and one starting from what is left to be paid (AMTOWE); * NOT INCLUDING LAND CONTRACTS; DO I=1 TO DIM(HAVELN); IF (HAVELN{I}=1 & HBALLN{I}=2 & NMYR{I} NOT IN(0 -1 -7) & INTRATE{I}^=-1 & AMTBORR{I}=BALLN{I} & (CMOPAY{I}*12 <= AMTBORR{I}*(INTRATE{I}/10000))) THEN DO; SINTDCT{I}=CMOPAY{I}*12; AINTDCT{I}=SINTDCT{I}; CINTDCT{I}=SINTDCT{I}; END; ELSE IF (HAVELN{I}=1 & HBALLN{I} IN(1 2) & NMYR{I} NOT IN(0 -1 -7) & INTRATE{I}^=-1) THEN DO; IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & PAYLFT{I} > 0) THEN DO; * a fix for payments reported as yearly that appear to be monthly; IF (CMOPAY{I} < AMTBORR{I}*.005) THEN CMOPAY{I}=MAX(REGPAY{I},TYPAY{I}); AMTOWE{I}=CMOPAY{I}*((1-1/(1+(INTRATE{I}/10000)/12)**PAYLFT{I})/ ((INTRATE{I}/10000)/12)) +(HBALLN{I}=2)*(BALLN{I}/((1+(INTRATE{I}/10000))**PAYLFT{I})); AMTOWE_1{I}=CMOPAY{I}*((1-1/(1+(INTRATE{I}/10000)/12)**(PAYLFT{I}+12))/ ((INTRATE{I}/10000)/12)) +(HBALLN{I}=2)*(BALLN{I}/((1+(INTRATE{I}/10000))**(PAYLFT{i}+12))); IF LNSTYR{I}^=1998 THEN AINTDCT{I}=(CMOPAY{I}*12)-(AMTOWE_1{I}-AMTOWE{I}); ELSE IF LNSTYR{I}=1998 THEN AINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); END; ELSE IF (TLMTH{I} < 0 | CMOPAY{I} < 0 | PAYLFT{I} < 0) THEN DO; AMTOWE{I}=0; AMTOWE_1{I}=0; AINTDCT{I}=0; END; IF (TLMTH{I} > 0 & AMTBORR{I} > 0 & LNAGE{I} > 0) THEN DO; CURBAL{I}=AMTBORR{I}*(((1+(INTRATE{I}/10000)/12)**TLMTH{I})- ((1+(INTRATE{I}/10000)/12)**(LNAGE{I})))/ (((1+(INTRATE{I}/10000)/12)**TLMTH{I})-1); CURBAL_1{I}=AMTBORR{I}*(((1+(INTRATE{I}/10000)/12)**TLMTH{I})- ((1+(INTRATE{I}/10000)/12)**(LNAGE{I}-12)))/ (((1+(INTRATE{I}/10000)/12)**TLMTH{I})-1); CINTDCT{I}=(CMOPAY{I}*12)-(CURBAL_1{I}-CURBAL{I}); END; ELSE IF (TLMTH{I} < 0 | AMTBORR{I} < 0 | LNAGE{I} < 0) THEN DO; CURBAL{I}=0; CURBAL_1{I}=0; CINTDCT{I}=0; END; IF (AMTOUT{I} > 0 & INTRATE{I} > 0) THEN SINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); ELSE SINTDCT{I}=0; * Also fixing cases where mortgage ends or starts in the survey year. Setting interest deduction to amount outstanding for year prior to the survey times the interest rate for mortgages ending in the survey year. For cases where mortgage starts in the survey year, just use amount borrowed times the interest rate; IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & PAYLFT{I}=0) THEN DO; CINTDCT{I}=CURBAL_1{I}*(INTRATE{I}/10000); AINTDCT{I}=CINTDCT{I}; END; IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & LNSTYR{I}=1998) THEN DO; CINTDCT{I}=SINTDCT{I}; AINTDCT{I}=SINTDCT{I}; END; * Ad hoc fix for negative interest deductions. Basically sets the interest deduction equal to curball1_1 times the interest rate if curball1 and curball1_1 are positive, otherwise the interest deduction equals the reported amount outstanding times the interest rate.; IF ((AINTDCT{I} < 0 | CINTDCT{I} < 0) & CURBAL{I} > 0 & CURBAL_1{I} > 0) THEN DO; CINTDCT{I}=CURBAL_1{I}*(INTRATE{I}/10000); AINTDCT{I}=CINTDCT{I}; END; ELSE IF ((AINTDCT{I} < 0 | CINTDCT{I} < 0) & (CURBAL{I} <= 0 & CURBAL_1{I} <= 0)) THEN DO; CINTDCT{I}=SINTDCT{I}; AINTDCT{I}=SINTDCT{I}; END; IF (SINTDCT{I} > 0 & CINTDCT{I} > 0) THEN DCTDIFF{I}=CINTDCT{I}-SINTDCT{I}; ELSE DCTDIFF{I}=0; END; ELSE IF (HAVELN{I}=1 & (NMYR{I} IN(-1 -7) | NMPMT{I} IN(-1 -7)) & AMTOUT{I} > 0 & INTRATE{I} > 0) THEN DO; SINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); AINTDCT{I}=SINTDCT{I}; CINTDCT{I}=SINTDCT{I}; END; ELSE IF (HAVELN{I}=1 & (INTRATE{I}=-1)) THEN DO; AINTDCT{I}=0; CINTDCT{I}=0; SINTDCT{I}=0; END; * Averaging across the three measures of interest deduction; IF ((CINTDCT{I} + AINTDCT{I} + SINTDCT{I}) > 0) THEN DO; AVINTDCT{I}=(CINTDCT{I}+AINTDCT{I}+SINTDCT{I})/3; END; ELSE AVINTDCT{I}=0; * Constraining interest deduction amount to be no more than the reported yearly mortgage payment - using avintdct for comparison. Also putting in a fix for cases were the interest deduction is more than 25 percent of the current amount outstanding. If this is the case then the use the simple interest deduction.; IF (HAVELN{I}=1 & AVINTDCT{I} > 0 & CMOPAY{I} > 0 & (AVINTDCT{I} > CMOPAY{I}*12)) THEN DO; AVINTDCT{I}=CMOPAY{I}*12; CINTDCT{I}=AVINTDCT{I}; AINTDCT{I}=AVINTDCT{I}; SINTDCT{I}=AVINTDCT{I}; END; IF (HAVELN{I}=1 & AVINTDCT{I} > 0 & AMTOUT{I} > 0 & (AVINTDCT{I} > .25*AMTOUT{I})) THEN DO; AVINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); CINTDCT{I}=AVINTDCT{I}; AINTDCT{I}=AVINTDCT{I}; END; * Some checks for strange cases; IF (HAVELN{I}=1 & Y1=YY1*10+1 & AVINTDCT{I}=0) THEN PUT "HAS MORTGAGE, BUT NO INTEREST DEDUCTION " Y1= HAVELN{I}= NMPMT{I}= NMYR{I}= TLMTH{I}= REGPAYF{I}= REGPAY{I}= CMOPAY{I}= TYPAY{I}= TYPAYF{I}= LNSTYR{I}= PAYLFT{I}= LNAGE{I}= AMTOUT{I}= JAMTOUT{I}= AMTOWE{I}= AMTOWE_1{I}= AINTDCT{I}= CURBAL{I}= CURBAL_1{I}= CINTDCT{I}= AVINTDCT{I}= DCTDIFF{I}= SINTDCT{I}= INTRATE{I}= AMTBORR{I}= JAMTBORR{I}= ONSCHED{I}= HBALLN{I}= BALLN{I}= /; IF (HAVELN{I}=1 & Y1=YY1*10+1 & (AVINTDCT{I} > .25*AMTOUT{I})) THEN PUT "DEDUCTION LARGER THAN 25% OF BALANCE OUTSTANDING " Y1= HAVELN{I}= NMPMT{I}= NMYR{I}= TLMTH{I}= REGPAYF{I}= REGPAY{I}= CMOPAY{I}= TYPAY{I}= TYPAYF{I}= LNSTYR{I}= PAYLFT{I}= LNAGE{I}= AMTOUT{I}= JAMTOUT{I}= AMTOWE{I}= AMTOWE_1{I}= AINTDCT{I}= CURBAL{I}= CURBAL_1{I}= CINTDCT{I}= AVINTDCT{I}= DCTDIFF{I}= SINTDCT{I}= INTRATE{I}= AMTBORR{I}= JAMTBORR{I}= ONSCHED{I}= HBALLN{I}= BALLN{I}= /; * Dealing with multiple unit homes/buildings here. If R reports info on the whole building, then divide mortgage interest deduction by the number of units in the building; IF (X702=1 & X714=1 & X7135=5) THEN DO; TOTDEDCTM=TOTDEDCTM+(AVINTDCT{I}/X715)*(HAVELN{I}=1); END; ELSE TOTDEDCTM=TOTDEDCTM+AVINTDCT{I}; * Total amount outstanding on loans; TOTAMTOUTM=TOTAMTOUTM+AMTOUT{I}; * Need to divide mortgages up by date, pre 10/13/87 mortgages are considered grandfathered debt by IRS - approximating by using 1987 as the cutoff date since month of loan is not available in the public data.; IF (LNSTYR{I} <= 1987) THEN DO; GRFAMTOUTM=GRFAMTOUTM+AMTOUT{I}; END; ELSE IF (LNSTYR{I} > 1987) THEN DO; HAAMTOUTM=HAAMTOUTM+AMTOUT{I}; END; END; * NOTE: Change in collapsing of loan purpose codes from 1995 and earlier.; * Need to check the LOC grid for HELOCs and determine is the interest is deductible. Will need to assign HELOCs with use code of 1 or 2 as home acquisition debt (same as a mortgage, counts toward mortgage balance limit), while HELOCs with use code of 3-10 counted as home equity debt. Ignoring the mopup as we don't know if that LOC is secured by a home; ARRAY CMOPAYL {*} CMOPAYL1 CMOPAYL2 CMOPAYL3; ARRAY SINTDCTL {*} SINTDCTL1 SINTDCTL2 SINTDCTL3; ARRAY AQDBT {*} AQDBTL1 AQDBTL2 AQDBTL3; ARRAY EQDBT {*} EQDBTL1 EQDBTL2 EQDBTL3; ARRAY SBYHOME {*} X1103 X1114 X1125; ARRAY DOOWE {*} X1105 X1116 X1127; ARRAY LNPURP {*} X1106 X1117 X1128; ARRAY AMTOUTL {*} X1108 X1119 X1130; ARRAY TYPAYL {*} X1109 X1120 X1131; ARRAY TYPAYLF {*} X1110 X1121 X1132; ARRAY INTRATEL {*} X1111 X1122 X1133; * Initialize some variables; TOTAQDBTL=0; TOTEQDBTL=0; TOTDEDCTL=0; TOTLOCINVEX=0; DO I=1 TO DIM(CMOPAYL); CMOPAYL{I}=0; SINTDCTL{I}=0; AQDBT{I}=0; EQDBT{I}=0; END; IF (X1101=1) THEN DO; DO I=1 TO DIM(SBYHOME); IF (SBYHOME{I}=1 & DOOWE{I}=1) THEN DO; IF (TYPAYL{I} > 0) THEN DO; %MOCONV(AMT=TYPAYL{I},MOAMT=CMOPAYL{I},PER=TYPAYLF{I},IML=NO,YEAR8=YES); END; ELSE IF (TYPAYL{I} IN(0 -1 -2)) THEN DO; CMOPAYL{I}=0; END; IF (INTRATEL{I} > 0) THEN DO; SINTDCTL{I}=((INTRATEL{I}/10000)*AMTOUTL{I}); END; ELSE IF (INTRATEL{I} IN(0 -1)) THEN DO; SINTDCTL{I}=0; END; IF (SINTDCTL{I} > 0 & CMOPAYL{I} > 0 & SINTDCTL{I} > CMOPAYL{I}*12) THEN DO; SINTDCTL{I}=CMOPAYL{I}*12; END; IF (LNPURP{I} IN(1 2)) THEN DO; AQDBT{I}=AMTOUTL{I}; END; ELSE IF (LNPURP{I} NOT IN(1 2)) THEN DO; EQDBT{I}=AMTOUTL{I}; END; TOTDEDCTL=TOTDEDCTL+SINTDCTL{I}; TOTAQDBTL=TOTAQDBTL+AQDBT{I}; TOTEQDBTL=TOTEQDBTL+EQDBT{I}; END; END; DO I=1 TO DIM(SBYHOME); IF (SBYHOME{I}=1 & DOOWE{I}=1 & Y1=YY1*10+1 & AQDBT{I}=0 & EQDBT{I}=0) THEN PUT Y1= SBYHOME{I}= DOOWE{I}= LNPURP{I}= AMTOUTL{I}= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}= INTRATEL{I}= SINTDCTL{I}= AQDBT{I}= EQDBT{I}= /; END; END; * Using code similar to that used in mortgage grid, but also need to know what type of property and if there is income from the property.; * Create arrays for various other property loan components; ARRAY TLMTHO {*} TLMTHO1 TLMTHO2 TLMTHO3; ARRAY CMOPAYO {*} CMOPAYO1 CMOPAYO2 CMOPAYO3; ARRAY AMOPAYO {*} AMOPAYO1 AMOPAYO2 AMOPAYO3; ARRAY PAYLFTO {*} PAYLFTO1 PAYLFTO2 PAYLFTO3; ARRAY AMTOWEO {*} AMTOWEO1 AMTOWEO2 AMTOWEO3; ARRAY AMTOWE_1O {*} AMTOWE_1O1 AMTOWE_1O2 AMTOWE_1O3; ARRAY AINTDCTO {*} AINTDCTO1 AINTDCTO2 AINTDCTO3; ARRAY LNAGEO {*} LNAGEO1 LNAGEO2 LNAGEO3; ARRAY CURBALO {*} CURBALO1 CURBALO2 CURBALO3; ARRAY CURBAL_1O {*} CURBAL_1O1 CURBAL_1O2 CURBAL_1O3; ARRAY CINTDCTO {*} CINTDCTO1 CINTDCTO2 CINTDCTO3; ARRAY DCTDIFFO {*} DCTDIFFO1 DCTDIFFO2 DCTDIFFO3; ARRAY SINTDCTO {*} SINTDCTO1 SINTDCTO2 SINTDCTO3; ARRAY AVINTDCTO {*} AVINTDCTO1 AVINTDCTO2 AVINTDCTO3; ARRAY QUALPROP {*} QPROP1 QPROP2 QPROP3; ARRAY QUALPINV {*} QPINV1 QPINV2 QPINV3; ARRAY ADJBORRO {*} ADJBORRO1 ADJBORRO2 ADJBORRO3; ARRAY NMPMTO {*} X1717 X1817 X1917; ARRAY NMYRO {*} X1716 X1816 X1916; ARRAY REGPAYFO {*} X1719 X1819 X1919; ARRAY REGPAYO {*} X1718 X1818 X1918; ARRAY TYPAYFO {*} X1724 X1824 X1924; ARRAY TYPAYO {*} X1723 X1823 X1923; ARRAY LNSTMNO {*} X1712 X1812 X1912; ARRAY LNSTYRO {*} X1713 X1813 X1913; ARRAY HBALLNO {*} X1721 X1821 X1921; ARRAY BALLNO {*} X1722 X1822 X1922; ARRAY AMTBORRO {*} X1714 X1814 X1914; ARRAY JAMTBORRO {*} J1714 J1814 J1914; ARRAY AMTOUTO {*} X1715 X1815 X1915; ARRAY JAMTOUTO {*} J1715 J1815 J1915; ARRAY HAVELNO {*} X1711 X1811 X1911; ARRAY INTRATEO {*} X1726 X1826 X1926; ARRAY ONSCHEDO {*} X7554 X7553 X7552; ARRAY HINCOMEO {*} X1729 X1829 X1929; ARRAY INCOMEO {*} X1730 X1830 X1930; ARRAY PROPTYPE {*} X1703 X1803 X1903; ARRAY PERPROP {*} X1705 X1805 X1905; ARRAY PROPVAL {*} X1706 X1806 X1906; ARRAY TAXINS {*} X1720 X1820 X1920; * Initialize some variables; DO I=1 TO DIM(TLMTHO); TLMTHO{I}=0; CMOPAYO{I}=0; PAYLFTO{I}=0; AMTOWEO{I}=0; AMTOWE_1O{I}=0; AINTDCTO{I}=0; LNAGEO{I}=0; CURBALO{I}=0; CURBAL_1O{I}=0; CINTDCTO{I}=0; DCTDIFFO{I}=0; SINTDCTO{I}=0; AVINTDCTO{I}=0; QUALPROP{I}=0; QUALPINV{I}=0; ADJBORRO{I}=0; END; TOTAMTOUTO=0; TOTDEDCTO=0; QUALOTHPROP=0; QUALINVPROP=0; TOTINVPDCT=0; FMVOP=0; DO I=1 TO DIM(NMPMTO); %TERMCON(NPMT=NMPMTO{I},NYR=NMYRO{I},NMO=TLMTHO{I},PFREQ=REGPAYFO{I},PMT=REGPAYO{I}, TPER=TYPAYFO{I}); IF (REGPAYO{I} > 0) THEN DO; %MOCONV(AMT=REGPAYO{I},MOAMT=CMOPAYO{I},PER=REGPAYFO{I},IML=NO,YEAR8=YES); END; ELSE DO; %MOCONV(AMT=TYPAYO{I},MOAMT=CMOPAYO{I},PER=TYPAYFO{I},IML=NO,YEAR8=YES); END; IF NMYRO{I} NOT IN (0 -1 -7) THEN DO; PAYLFTO{I}=(TLMTHO{I}-((1998-LNSTYRO{I})*12)); LNAGEO{I}=TLMTHO{I}-PAYLFTO{I}; END; ELSE DO; PAYLFTO{I}=0; LNAGEO{I}=0; END; END; * Need to adjust monthly payments when taxes and/or insurance is included. If there is no balloon payment, and if the mort function value is less than the reported monthly payment amount then use mort function value as monthly payment. If there is no balloon and the mort function value is greater than the reported monthly amount, use the reported monthly amount. If there is a balloon and the amount borrowed is greater than the balloon, subtract the amount of the balloon and use this adjusted amount borrowed to figure the mort function value. If there is a balloon and the amount borrowed is less than the balloon, leave the amount borrowed as is. If the amount borrowed is equal to the balloon, then the mort function value is assumed to be just the amount borrowed times the interest rate. Once we have the mort value function compare it to the reported amount using the same rules as in the no balloon case.; DO I=1 TO DIM(HAVELNO); IF ((HAVELNO{I}=1) & (TAXINS{I} IN(1 2 3)) & TLMTHO{I} > 0 & INTRATEO{I} > 0) THEN DO; IF (HBALLNO{I}=1) THEN DO; %MORTPAY(AMTB=AMTBORRO{I},MPAY=AMOPAYO{I},IR=INTRATEO{I},TERM=TLMTHO{I}); IF (CMOPAYO{I} > AMOPAYO{I}) THEN CMOPAYO{I}=AMOPAYO{I}; * ELSE IF (AMOPAYO{I} >= CMOPAYO{I}) & Y1=YY1*10+1 THEN PUT "ADJUSTED MONTHLY PAYMENT GREATER THAN COMPUTED MONTHLY PAYMENT " Y1= AMTBORRO{I}= CMOPAYO{I}= AMOPAYO{I}= INTRATEO{I}= TAXINS{I}= TLMTHO{I}= HBALLNO{I}= BALLNO{I}= /; END; ELSE IF (HBALLNO{I}=5) THEN DO; IF (AMTBORRO{I} > BALLNO{I}) THEN ADJBORRO{I}=(AMTBORRO{I}-BALLNO{I}); ELSE IF (AMTBORRO{I} < BALLNO{I}) THEN ADJBORRO{I}=AMTBORRO{I}; IF ADJBORRO{I} > 0 THEN %MORTPAY(AMTB=ADJBORRO{I},MPAY=AMOPAYO{I},IR=INTRATEO{I},TERM=TLMTHO{I}); IF (AMTBORRO{I}=BALLNO{I}) THEN AMOPAYO{I}=((AMTBORRO{I})*(INTRATEO{I}/10000))/12; IF (CMOPAYO{I} > AMOPAYO{I}) THEN CMOPAYO{I}=AMOPAYO{I}; * ELSE IF (AMOPAYO{I} >= CMOPAYO{I}) & Y1=YY1*10+1 THEN PUT "ADJUSTED MONTHLY PAYMENT GREATER THAN COMPUTED MONTHLY PAYMENT " Y1= AMTBORRO{I}= CMOPAYO{I}= AMOPAYO{I}= INTRATEO{I}= TAXINS{I}= TLMTHO{I}= HBALLNO{I}= BALLNO{I}= /; END; END; END; * First check for balloon payment, and if balloon is equal to amount borrowed, use amount borrowed times the interest rate as interest deduction, as long as this amount is not more than the annualized payment amount. If the balloon is not equal to amount borrowed or the annual payment criteria is not met, compute with non-balloon payment loans. If the term of the loan is coded -1 or -7 and there is a positive outstanding balance and interest rate, use that to compute the interest deduction. If the interest rate is equal to -1, then set interest deduction to zero.; * Computing the balance outstanding two ways, one starting from the begining of the loan (CURBAL) and one starting from what is left to be paid (AMTOWE); * Only including other properties of type listed below - also only including properties from which no income is received or the income is less than the yearly mortgage payment. This is an attempt to approximate the IRS use requirement of 14 days or 10% of the rental days for the mortgage interest on the property to qualify.; DO I=1 TO DIM(HAVELNO); IF (PROPTYPE{I} IN(12 21 40 49 999) & (HINCOMEO{I}=5 | INCOMEO{I}=-1)) | (PROPTYPE{I} IN(12 21 40 49 999) & HINCOMEO{I}=1 & INCOMEO{I} < (CMOPAYO{I}*12)) THEN DO; * indicator and counter of qualified properties; QUALPROP{I}=(HAVELNO{I}=1); QUALOTHPROP=QUALOTHPROP+QUALPROP{I}; FMVOP=FMVOP+PROPVAL{I}*(HAVELNO{I}=1); IF (HAVELNO{I}=1 & HBALLNO{I}=5 & NMYRO{I} NOT IN(0 -1 -7) & INTRATEO{I}^=-1 & AMTBORRO{I}=BALLNO{I} & (CMOPAYO{I}*12 <= AMTBORRO{I}*(INTRATEO{I}/10000))) THEN DO; SINTDCTO{I}=CMOPAYO{I}*12; AINTDCTO{I}=SINTDCTO{I}; CINTDCTO{I}=SINTDCTO{I}; END; ELSE IF (HAVELNO{I}=1 & HBALLNO{I} IN(1 5) & NMYRO{I} NOT IN(0 -1 -7) & INTRATEO{I}^=-1) THEN DO; IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I} > 0) THEN DO; * a fix for payments reported as yearly that appear to be monthly; IF (CMOPAYO{I} < AMTBORRO{I}*.005) THEN CMOPAYO{I}=MAX(REGPAYO{I},TYPAYO{I}); AMTOWEO{I}=CMOPAYO{I}*((1-1/(1+(INTRATEO{I}/10000)/12)**PAYLFTO{I})/ ((INTRATEO{I}/10000)/12)) +(HBALLNO{I}=5)*(BALLNO{I}/((1+(INTRATEO{I}/10000))**PAYLFTO{I})); AMTOWE_1O{I}=CMOPAYO{I}*((1-1/(1+(INTRATEO{I}/10000)/12)**(PAYLFTO{I}+12))/ ((INTRATEO{I}/10000)/12)) +(HBALLNO{I}=5)*(BALLNO{I}/((1+(INTRATEO{I}/10000))**(PAYLFTO{i}+12))); IF LNSTYRO{I}^=1998 THEN AINTDCTO{I}=(CMOPAYO{I}*12)-(AMTOWE_1O{I}-AMTOWEO{I}); ELSE IF LNSTYRO{I}=1998 THEN AINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); END; ELSE IF (TLMTHO{I} < 0 | CMOPAYO{I} < 0 | PAYLFTO{I} < 0) THEN DO; AMTOWEO{I}=0; AMTOWE_1O{I}=0; AINTDCTO{I}=0; END; IF (TLMTHO{I} > 0 & AMTBORRO{I} > 0 & LNAGEO{I} > 0) THEN DO; CURBALO{I}=AMTBORRO{I}*(((1+(INTRATEO{I}/10000)/12)**TLMTHO{I})- ((1+(INTRATEO{I}/10000)/12)**(LNAGEO{I})))/ (((1+(INTRATEO{I}/10000)/12)**TLMTHO{I})-1); CURBAL_1O{I}=AMTBORRO{I}*(((1+(INTRATEO{I}/10000)/12)**TLMTHO{I})- ((1+(INTRATEO{I}/10000)/12)**(LNAGEO{I}-12)))/ (((1+(INTRATEO{I}/10000)/12)**TLMTHO{I})-1); CINTDCTO{I}=(CMOPAYO{I}*12)-(CURBAL_1O{I}-CURBALO{I}); END; ELSE IF (TLMTHO{I} < 0 | AMTBORRO{I} < 0 | LNAGEO{I} < 0) THEN DO; CURBALO{I}=0; CURBAL_1O{I}=0; CINTDCTO{I}=0; END; IF (AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); ELSE SINTDCTO{I}=0; * Also fixing cases where mortgage ends or starts in the survey year. Setting interest deduction to amount outstanding for year prior to the survey times the interest rate for mortgages ending in the survey year. For cases where mortgage starts in the survey year, just use amount borrowed times the interest rate; IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I}=0) THEN DO; CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); AINTDCTO{I}=CINTDCTO{I}; END; IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=1998) THEN DO; CINTDCTO{I}=SINTDCTO{I}; AINTDCTO{I}=SINTDCTO{I}; END; * Ad hoc fix for negative interest deductions. Basically sets the interest deduction equal to curball1_1 times the interest rate if curball1 and curball1_1 are positive, otherwise the interest deduction equals the reported amount outstanding times the interest rate.; IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & CURBALO{I} > 0 & CURBAL_1O{I} > 0) THEN DO; CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); AINTDCTO{I}=CINTDCTO{I}; END; ELSE IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & (CURBALO{I} <= 0 & CURBAL_1O{I} <= 0)) THEN DO; CINTDCTO{I}=SINTDCTO{I}; AINTDCTO{I}=SINTDCTO{I}; END; IF (SINTDCTO{I} > 0 & CINTDCTO{I} > 0) THEN DCTDIFFO{I}=CINTDCTO{I}-SINTDCTO{I}; ELSE DCTDIFFO{I}=0; END; ELSE IF (HAVELNO{I}=1 & (NMYRO{I} IN(-1 -7) & NMPMTO{I} IN(-1 -7)) & AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN DO; SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); AINTDCTO{I}=SINTDCTO{I}; CINTDCTO{I}=SINTDCTO{I}; END; ELSE IF (HAVELNO{I}=1 & (INTRATEO{I}=-1)) THEN DO; AINTDCTO{I}=0; CINTDCTO{I}=0; SINTDCTO{I}=0; END; * Averaging across the three measures of interest deduction; IF ((CINTDCTO{I} + AINTDCTO{I} + SINTDCTO{I}) > 0) THEN DO; AVINTDCTO{I}=(CINTDCTO{I}+AINTDCTO{I}+SINTDCTO{I})/3; END; ELSE AVINTDCTO{I}=0; * Constraining interest deduction amount to be no more than the reported year mortgage payment - using avintdedct as prefered interest deduction measure. Also putting in a fix for cases were the interest deduction is more than 25 percent of the current amount outstanding. If this is the case then the use the simple interest deduction.; IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & CMOPAYO{I} > 0 & (AVINTDCTO{I} > CMOPAYO{I}*12)) THEN DO; AVINTDCTO{I}=CMOPAYO{I}*12; CINTDCTO{I}=AVINTDCTO{I}; AINTDCTO{I}=AVINTDCTO{I}; SINTDCTO{I}=AVINTDCTO{I}; END; IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & AMTOUTO{I} > 0 & (AVINTDCTO{I} > .25*AMTOUTO{I})) THEN DO; AVINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); CINTDCTO{I}=AVINTDCTO{I}; AINTDCTO{I}=AVINTDCTO{I}; END; * Check for strange cases; IF (HAVELNO{I}=1 & Y1=YY1*10+1 & (AVINTDCTO{I} > .25*AMTOUTO{I})) THEN PUT "DEDUCTION LARGER THAN 25% OF BALANCE OUTSTANDING " Y1= HAVELNO{I}= NMPMTO{I}= NMYRO{I}= TLMTHO{I}= REGPAYFO{I}= REGPAYO{I}= CMOPAYO{I}= TYPAYO{I}= TYPAYFO{I}= LNSTYRO{I}= PAYLFTO{I}= LNAGEO{I}= AMTOUTO{I}= JAMTOUTO{I}= AMTOWEO{I}= AMTOWE_1O{I}= AINTDCTO{I}= CURBALO{I}= CURBAL_1O{I}= CINTDCTO{I}= DCTDIFFO{I}= SINTDCTO{I}= AVINTDCTO{I}= INTRATEO{I}= AMTBORRO{I}= JAMTBORRO{I}= ONSCHEDO{I}= HBALLNO{I}= BALLNO{I}= HINCOMEO{I}= INCOMEO{I}= PROPTYPE{I}= PERPROP{I}= /; * Compute total deduction and total amount outstanding; TOTDEDCTO=TOTDEDCTO+((AVINTDCTO{I})*PERPROP{I}/10000)*(HAVELNO{I}=1); TOTAMTOUTO=TOTAMTOUTO+AMTOUTO{I}; END; END; * Compute total deduction and total amount outstanding for qualified properties. Since a filer can only have 2 qualified homes (primary and secondary), need to check for a primary residence mortgage, and need to check if a hh has other homes/properties, need to decide which to count for the deduction. The basic rule assumes that hh's are rational and report the home/properties with the biggest deductions.; ADJDEDCTO=0; ADJAMTOUTO=0; FMVOTHPROP=0; IF (QUALOTHPROP > 0) THEN DO; IF (QUALOTHPROP=1) THEN DO; ADJDEDCTO=TOTDEDCTO; ADJAMTOUTO=TOTAMTOUTO; FMVOTHPROP=FMVOP; END; ELSE IF (QUALOTHPROP >= 2) THEN DO; IF (AVINTDCTO1 >= AVINTDCTO2 & AVINTDCTO1 >= AVINTDCTO3) THEN DO; ADJDEDCTO=AVINTDCTO1; ADJAMTOUTO=X1715; FMVOTHPROP=X1706*(X1705/10000); END; ELSE IF (AVINTDCTO2 >= AVINTDCTO1 & AVINTDCTO2 >= AVINTDCTO3) THEN DO; ADJDEDCTO=AVINTDCTO2; ADJAMTOUTO=X1815; FMVOTHPROP=X1806*(X1805/10000); END; ELSE IF (AVINTDCTO3 >= AVINTDCTO1 & AVINTDCTO3 >= AVINTDCTO2) THEN DO; ADJDEDCTO=AVINTDCTO3; ADJAMTOUTO=X1915; FMVOTHPROP=X1906*(X1905/10000); END; END; END; * Check for cases where fair market value of home limits the amount of home equity debt hh can report. If the home acquisition debt is greater than the FMV of the home, then no home equity debt is reportable. But, if the home acquisition debt is less than the FMV of the home, then either all the home equity debt or a reduced amount of the home equity debt is reportable. In the second case, take the min of the difference between HA debt and FMV, and the HE debt amount.; IF (X701=-7 & X7133=1) THEN DO; HOUSE=(X7134/10000)*X716; END; ELSE HOUSE=SUM(0,X604,X614,X623,X716,(X513+X526)); IF (TOTEQDBTL > 0 & GRFAMTOUTM+HAAMTOUTM+TOTAQDBTL+TOTEQDBTL > (HOUSE)) THEN DO; IF (FILESTAT > 0 & HOUSE-(GRFAMTOUTM+HAAMTOUTM+TOTAQDBTL) > 0) THEN DO; ADJEQDBTL=MIN((HOUSE-(GRFAMTOUTM+HAAMTOUTM+TOTAQDBTL)),TOTEQDBTL,100000); ADJDEDCTL=TOTDEDCTL*(ADJEQDBTL/TOTEQDBTL); END; ELSE IF (FILESTAT > 0 & HOUSE-(GRFAMTOUTM+HAAMTOUTM+TOTAQDBTL) <= 0) THEN DO; ADJEQDBTL=0; ADJDEDCTL=0; END; END; ELSE IF (TOTEQDBTL ^=. & TOTDEDCTL ^=.) THEN DO; ADJEQDBTL=TOTEQDBTL; ADJDEDCTL=TOTDEDCTL; END; IF (TOTEQDBTL > 0 & GRFAMTOUTM+HAAMTOUTM+TOTAQDBTL+TOTEQDBTL > (HOUSE) & Y1=YY1*10+1) THEN PUT "MORTGAGE GREATER THAN FMV FOR PRIMARY RESIDENCE " Y1= HOUSE= GRFAMTOUTM= HAAMTOUTM= TOTAQDBTL= ADJEQDBTL= TOTEQDBTL= TOTDEDCTM= ADJDEDCTO= ADJDEDCTL= X701= X501= X503= X723= /; * Now apply the IRS limits to get the adjusted deduction amount, if the limit applies, otherwise, just compute total deduction (home acquisition and home equity); ADJDEDCT=0; * case 1 - grandfathered debt, no home acquisition debt, maybe home equity; IF (X5744 IN(1 5 6) & GRFAMTOUTM > 0 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0) THEN DO; IF (FILESTAT > 0 & ADJEQDBTL <= 100000) THEN DO; OVERLIM=0; ADJDEDCT=TOTDEDCTM+ADJDEDCTL; END; ELSE IF (FILESTAT > 0 & ADJEQDBTL > 100000) THEN DO; OVERLIM=1; ADJDEDCT=((GRFAMTOUTM+100000)/(GRFAMTOUTM+ADJEQDBTL))*ADJDEDCTL; END; END; * case 2 - some grandfathered debt, some home acquisition debt, maybe home equity; ELSE IF (X5744 IN(1 5 6) & GRFAMTOUTM > 0 & (HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0)) THEN DO; IF (FILESTAT > 0 & (ADJEQDBTL=0 | ADJEQDBTL <= 100000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 1000000)) THEN DO; OVERLIM=0; ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; END; ELSE IF (FILESTAT > 0 & ADJEQDBTL > 100000 & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 1000000)) THEN DO; OVERLIM=1; ADJDEDCT=((GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+100000) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); END; ELSE IF (FILESTAT > 0 & (ADJEQDBTL=0 | ADJEQDBTL > 0) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 1000000)) THEN DO; OVERLIM=1; ADJDEDCT=((1100000)/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); END; END; * case 3 - no grandfathered debt, maybe home acquisition, maybe home equity; ELSE IF (X5744 IN(1 5 6) & GRFAMTOUTM=0 & (HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | ADJEQDBTL > 0)) THEN DO; IF (FILESTAT > 0 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 0 & ADJEQDBTL <= 100000) THEN DO; OVERLIM=0; ADJDEDCT=ADJDEDCTL; END; ELSE IF (FILESTAT > 0 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 100000) THEN DO; OVERLIM=1; ADJDEDCT=((100000)/ADJEQDBTL)*ADJDEDCTL; END; ELSE IF (FILESTAT > 0 &(HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL <= 1000000) & ADJEQDBTL <= 100000) THEN DO; OVERLIM=0; ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; END; ELSE IF (FILESTAT > 0 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL <= 1000000) & ADJEQDBTL > 100000) THEN DO; OVERLIM=1; ADJDEDCT=((HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+100000)/ (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); END; ELSE IF (FILESTAT > 0 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL > 1000000) & (ADJEQDBTL=0 | ADJEQDBTL > 0)) THEN DO; OVERLIM=1; ADJDEDCT=((1100000)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); END; END; * a few obs will come out here, but they either have -1 as the interest rate or are land contracts; IF ((GRFAMTOUTM > 0 | HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | ADJEQDBTL > 0) & ADJDEDCT=0 & X5744 IN(1 5 6) & Y1=YY1*10+1) THEN PUT "MORTGAGE DEDUCTION SHOULD NOT BE ZERO " Y1= X5744= X5746= GRFAMTOUTM= HAAMTOUTM= ADJAMTOUTO= TOTAQDBTL= ADJEQDBTL= TOTDEDCTM= ADJDEDCTO= ADJDEDCTL= OVERLIM= QUALOTHPROP= CINTDCTM1= CINTDCTM2= CINTDCTM3= X702= X714= X7135= X723=/; * IF ((GRFAMTOUTM > 0 | HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | ADJEQDBTL > 0) & OVERLIM=. & Y1=YY1*10+1) THEN PUT "OVER LIMIT INDICATOR MISSING " Y1= X5744= X5746= GRFAMTOUTM= HAAMTOUTM= ADJAMTOUTO= TOTAQDBTL= ADJEQDBTL= TOTDEDCTM= ADJDEDCTO= ADJDEDCTL= OVERLIM= ADJDEDCT=/; IF ADJDEDCT >= 100000 & Y1=YY1*10+1 THEN PUT "HUGE MORTGAGE INTEREST DEDUCTION " Y1= TOTDEDCTM= GRFAMTOUTM= HAAMTOUTM= TOTAQDBTL= ADJDEDCTL= ADJEQDBTL= ADJDEDCTO= ADJAMTOUTO= HOUSE= QUALOTHPROP= FMVOTHPROP= X5744= X5746= ADJDEDCT= X5729=/; ************Real estate taxes; * TAXSIM doesn't want local property taxes in amount of itemized deductions, listed as a separate variable; * Property tax rate, for some cases with high property tax rates R reports paying an amount on a monthly basis that appears to be a yearly payment, adjusting those cases below; PROPTXRATE=0; IF (HOUSE > 0 & RESTAXM1 > 0) THEN PROPTXRATE=(RESTAXM1/HOUSE)*100; IF (PROPTXRATE > 10 & Y1=YY1*10+1) THEN PUT "HIGH PROPERTY TAX RATE " Y1= HOUSE= RESTAXM1= X721= J721= X722= J722= X501= X601= X701= PROPTXRATE=/; IF (PROPTXRATE > 10 & X722=4) THEN RESTAXM1=X721; ************Investment interest expense; * Calculating deductible interest expenses. It appears from the IRS regulations that a taxpayer can only deduct allowable interest expense up to the amount of interest income received. So we need to add up dividend/interest income. Capital gains is not included in this amount. Investment expenses (in the SCF data) consists of interest paid on loans for investments, we have no information on other investment expenses.; * NOTE: Due to the collapsing of loan purpose codes in the public version of the data, in addition to loan types 76, 78, and 79, loan types 71-75 are included in the calculation of investment interest expense.; * To calculate investment interest expense, using the same code for LOCs, investment properties and other loans as used for mortgage interest deduction, but modifying the code to only count investment properties and loans for investments.; * LOCs - only counting loans not secured by the residence and with asset or real estate investment as loan purpose.; IF (X1101=1) THEN DO; DO I=1 TO DIM(SBYHOME); IF (SBYHOME{I}=5 & DOOWE{I}=1 & LNPURP{I}=7) THEN DO; IF (TYPAYL{I} > 0) THEN DO; %MOCONV(AMT=TYPAYL{I},MOAMT=CMOPAYL{I},PER=TYPAYLF{I},IML=NO,YEAR8=YES); END; ELSE IF (TYPAYL{I} IN(0 -1 -2)) THEN DO; CMOPAYL{I}=0; END; IF (INTRATEL{I} > 0) THEN DO; SINTDCTL{I}=((INTRATEL{I}/10000)*AMTOUTL{I}); END; ELSE IF (INTRATEL{I} IN(0 -1)) THEN DO; SINTDCTL{I}=0; END; IF (SINTDCTL{I} > 0 & CMOPAYL{I} > 0 & SINTDCTL{I} > CMOPAYL{I}*12) THEN DO; SINTDCTL{I}=CMOPAYL{I}*12; END; TOTLOCINVEX=TOTLOCINVEX+SINTDCTL{I}; END; END; DO I=1 TO DIM(SBYHOME); IF (SBYHOME{I}=5 & DOOWE{I}=1 & LNPURP{I}=7 & Y1=YY1*10+1 & SINTDCTL{I}=0) THEN PUT Y1= SBYHOME{I}= DOOWE{I}= LNPURP{I}= AMTOUTL{I}= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}= INTRATEL{I}= SINTDCTL{I}= AQDBT{I}= EQDBT{I}= /; END; END; * Other properties - only counting properties held for investment purposes, and hh must receive income from the property.; DO I=1 TO DIM(HAVELNO); IF (PROPTYPE{I} IN(41 42 45 47) & (INCOMEO{I} > 0)) THEN DO; * indicator and counter of qualified properties; QUALPINV{I}=(HAVELNO{I}=1); QUALINVPROP=QUALINVPROP+QUALPINV{I}; IF (HAVELNO{I}=1 & HBALLNO{I}=5 & NMYRO{I} NOT IN(0 -1 -7) & INTRATEO{I}^=-1 & AMTBORRO{I}=BALLNO{I} & (CMOPAYO{I}*12 <= AMTBORRO{I}*(INTRATEO{I}/10000))) THEN DO; SINTDCTO{I}=CMOPAYO{I}*12; AINTDCTO{I}=SINTDCTO{I}; CINTDCTO{I}=SINTDCTO{I}; END; ELSE IF (HAVELNO{I}=1 & HBALLNO{I} IN(1 5) & NMYRO{I} NOT IN(0 -1 -7) & INTRATEO{I}^=-1) THEN DO; IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I} > 0) THEN DO; * a fix for payments reported as yearly that appear to be monthly; IF (CMOPAYO{I} < AMTBORRO{I}*.005) THEN CMOPAYO{I}=MAX(REGPAYO{I},TYPAYO{I}); AMTOWEO{I}=CMOPAYO{I}*((1-1/(1+(INTRATEO{I}/10000)/12)**PAYLFTO{I})/ ((INTRATEO{I}/10000)/12)) +(HBALLNO{I}=5)*(BALLNO{I}/((1+(INTRATEO{I}/10000))**PAYLFTO{I})); AMTOWE_1O{I}=CMOPAYO{I}*((1-1/(1+(INTRATEO{I}/10000)/12)**(PAYLFTO{I}+12))/ ((INTRATEO{I}/10000)/12)) +(HBALLNO{I}=5)*(BALLNO{I}/((1+(INTRATEO{I}/10000))**(PAYLFTO{i}+12))); IF LNSTYRO{I}^=1998 THEN AINTDCTO{I}=(CMOPAYO{I}*12)-(AMTOWE_1O{I}-AMTOWEO{I}); ELSE IF LNSTYRO{I}=1998 THEN AINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); END; ELSE IF (TLMTHO{I} < 0 | CMOPAYO{I} < 0 | PAYLFTO{I} < 0) THEN DO; AMTOWEO{I}=0; AMTOWE_1O{I}=0; AINTDCTO{I}=0; END; IF (TLMTHO{I} > 0 & AMTBORRO{I} > 0 & LNAGEO{I} > 0) THEN DO; CURBALO{I}=AMTBORRO{I}*(((1+(INTRATEO{I}/10000)/12)**TLMTHO{I})- ((1+(INTRATEO{I}/10000)/12)**(LNAGEO{I})))/ (((1+(INTRATEO{I}/10000)/12)**TLMTHO{I})-1); CURBAL_1O{I}=AMTBORRO{I}*(((1+(INTRATEO{I}/10000)/12)**TLMTHO{I})- ((1+(INTRATEO{I}/10000)/12)**(LNAGEO{I}-12)))/ (((1+(INTRATEO{I}/10000)/12)**TLMTHO{I})-1); CINTDCTO{I}=(CMOPAYO{I}*12)-(CURBAL_1O{I}-CURBALO{I}); END; ELSE IF (TLMTHO{I} < 0 | AMTBORRO{I} < 0 | LNAGEO{I} < 0) THEN DO; CURBALO{I}=0; CURBAL_1O{I}=0; CINTDCTO{I}=0; END; IF (AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); ELSE SINTDCTO{I}=0; * Also fixing cases where mortgage ends or starts in the survey year. Setting interest deduction to amount outstanding for year prior to the survey times the interest rate for mortgages ending in the survey year. For cases where mortgage starts in the survey year, just use amount borrowed times the interest rate; IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I}=0) THEN DO; CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); AINTDCTO{I}=CINTDCTO{I}; END; IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=1998) THEN DO; CINTDCTO{I}=SINTDCTO{I}; AINTDCTO{I}=SINTDCTO{I}; END; * Ad hoc fix for negative interest deductions. Basically sets the interest deduction equal to curball1_1 times the interest rate if curball1 and curball1_1 are positive, otherwise the interest deduction equals the reported amount outstanding times the interest rate.; IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & CURBALO{I} > 0 & CURBAL_1O{I} > 0) THEN DO; CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); AINTDCTO{I}=CINTDCTO{I}; END; ELSE IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & (CURBALO{I} <= 0 & CURBAL_1O{I} <= 0)) THEN DO; CINTDCTO{I}=SINTDCTO{I}; AINTDCTO{I}=SINTDCTO{I}; END; IF (SINTDCTO{I} > 0 & CINTDCTO{I} > 0) THEN DCTDIFFO{I}=CINTDCTO{I}-SINTDCTO{I}; ELSE DCTDIFFO{I}=0; END; ELSE IF (HAVELNO{I}=1 & (NMYRO{I} IN(-1 -7) & NMPMTO{I} IN(-1 -7)) & AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN DO; SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); AINTDCTO{I}=SINTDCTO{I}; CINTDCTO{I}=SINTDCTO{I}; END; ELSE IF (HAVELNO{I}=1 & (INTRATEO{I}=-1)) THEN DO; AINTDCTO{I}=0; CINTDCTO{I}=0; SINTDCTO{I}=0; END; * Averaging across the three measures of interest deduction; IF ((CINTDCTO{I} + AINTDCTO{I} + SINTDCTO{I}) > 0) THEN DO; AVINTDCTO{I}=(CINTDCTO{I}+AINTDCTO{I}+SINTDCTO{I})/3; END; ELSE AVINTDCTO{I}=0; * Constraining interest deduction amount to be no more than the reported year mortgage payment - using avintdedct as prefered interest deduction measure. Also putting in a fix for cases were the interest deduction is more than 25 percent of the current amount outstanding. If this is the case then the use the simple interest deduction.; IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & CMOPAYO{I} > 0 & (AVINTDCTO{I} > CMOPAYO{I}*12)) THEN DO; AVINTDCTO{I}=CMOPAYO{I}*12; CINTDCTO{I}=AVINTDCTO{I}; AINTDCTO{I}=AVINTDCTO{I}; SINTDCTO{I}=AVINTDCTO{I}; END; IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & AMTOUTO{I} > 0 & (AVINTDCTO{I} > .25*AMTOUTO{I})) THEN DO; AVINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); CINTDCTO{I}=AVINTDCTO{I}; AINTDCTO{I}=AVINTDCTO{I}; END; * Checking for strange cases; IF (HAVELNO{I}=1 & Y1=YY1*10+1 & (AVINTDCTO{I} > .25*AMTOUTO{I})) THEN PUT "DEDUCTION LARGER THAN 25% OF BALANCE OUTSTANDING " Y1= HAVELNO{I}= NMPMTO{I}= NMYRO{I}= TLMTHO{I}= REGPAYFO{I}= REGPAYO{I}= CMOPAYO{I}= TYPAYO{I}= TYPAYFO{I}= LNSTYRO{I}= PAYLFTO{I}= LNAGEO{I}= AMTOUTO{I}= JAMTOUTO{I}= AMTOWEO{I}= AMTOWE_1O{I}= AINTDCTO{I}= CURBALO{I}= CURBAL_1O{I}= CINTDCTO{I}= DCTDIFFO{I}= SINTDCTO{I}= AVINTDCTO{I}= INTRATEO{I}= AMTBORRO{I}= JAMTBORRO{I}= ONSCHEDO{I}= HBALLNO{I}= BALLNO{I}= HINCOMEO{I}= INCOMEO{I}= PROPTYPE{I}= PERPROP{I}= /; * Compute total investment interest expense; TOTINVPDCT=TOTINVPDCT+((AVINTDCTO{I})*PERPROP{I}/10000)*(HAVELNO{I}=1); END; END; * Other loans - only counting loans for investment purposes; ARRAY TLMTHI {*} TLMTHI1 TLMTHI2 TLMTHI3 TLMTHI4 TLMTHI5 TLMTHI6; ARRAY CMOPAYI {*} CMOPAYI1 CMOPAYI2 CMOPAYI3 CMOPAYI4 CMOPAYI5 CMOPAYI6; ARRAY PAYLFTI {*} PAYLFTI1 PAYLFTI2 PAYLFTI3 PAYLFTI4 PAYLFTI5 PAYLFTI6; ARRAY AMTOWEI {*} AMTOWEI1 AMTOWEI2 AMTOWEI3 AMTOWEI4 AMTOWEI5 AMTOWEI6; ARRAY AMTOWE_1I {*} AMTOWE_1I1 AMTOWE_1I2 AMTOWE_1I3 AMTOWE_1I4 AMTOWE_1I5 AMTOWE_1I6; ARRAY AINTEXPI {*} AINTEXPI1 AINTEXPI2 AINTEXPI3 AINTEXPI4 AINTEXPI5 AINTEXPI6; ARRAY LNAGEI {*} LNAGEI1 LNAGEI2 LNAGEI3 LNAGEI4 LNAGEI5 LNAGEI6; ARRAY CURBALI {*} CURBALI1 CURBALI2 CURBALI3 URBALI4 CURBALI5 CURBALI6; ARRAY CURBAL_1I {*} CURBAL_1I1 CURBAL_1I2 CURBAL_1I3 CURBAL_1I4 CURBAL_1I5 CURBAL_1I6; ARRAY CINTEXPI {*} CINTEXPI1 CINTEXPI2 CINTEXPI3 CINTEXPI4 CINTEXPI5 CINTEXPI6; ARRAY DCTDIFFI {*} DCTDIFFI1 DCTDIFFI2 DCTDIFFI3 DCTDIFFI4 DCTDIFFI5 DCTDIFFI6; ARRAY SINTEXPI {*} SINTEXPI1 SINTEXPI2 SINTEXPI3 SINTEXPI4 SINTEXPI5 SINTEXPI6; ARRAY AVINTEXPI {*} AVINTEXPI1 AVINTEXPI2 AVINTEXPI3 AVINTEXPI4 AVINTEXPI5 AVINTEXPI6; ARRAY QUALN {*} QLN1 QLN2 QLN3 QLN4 QLN5 QLN6; ARRAY NMPMTI {*} X2716 X2733 X2816 X2833 X2916 X2933; ARRAY NMYRI {*} X2717 X2734 X2817 X2834 X2917 X2934; ARRAY REGPAYFI {*} X7527 X7526 X7525 X7524 X7523 X7522; ARRAY REGPAYI {*} X2718 X2735 X2818 X2835 X2918 X2935; ARRAY TYPAYFI {*} X2720 X2737 X2820 X2837 X2920 X2937; ARRAY TYPAYI {*} X2719 X2736 X2819 X2836 X2919 X2936; ARRAY LNSTYRI {*} X2713 X2730 X2813 X2830 X2913 X2930; ARRAY AMTBORRI {*} X2714 X2731 X2814 X2831 X2914 X2931; ARRAY JAMTBORRI {*} J2714 J2731 J2814 J2831 J2914 J2931; ARRAY AMTOUTI {*} X2723 X2740 X2823 X2840 X2923 X2940; ARRAY JAMTOUTI {*} J2723 J2740 J2823 J2840 J2923 J2940; ARRAY INTRATEI {*} X2724 X2741 X2824 X2841 X2924 X2941; ARRAY ONSCHEDI {*} X7521 X7520 X7519 X7518 X7517 X7516;; ARRAY LNTYPE {*} X2710 X2727 X2810 X2827 X2910 X2927; ARRAY BUSLN {*} X6842 X6843 X6844 X6845 X6846 X6847; * Initialize some variables; DO I=1 TO DIM(TLMTHI); TLMTHI{I}=0; CMOPAYI{I}=0; PAYLFTI{I}=0; AMTOWEI{I}=0; AMTOWE_1I{I}=0; AINTEXPI{I}=0; LNAGEI{I}=0; CURBALI{I}=0; CURBAL_1I{I}=0; CINTEXPI{I}=0; DCTDIFFI{I}=0; SINTEXPI{I}=0; AVINTEXPI{I}=0; QUALN{I}=0; END; TOTLNINVEX=0; QUALOANINV=0; DO I=1 TO DIM(NMPMTI); %TERMCON(NPMT=NMPMTI{I},NYR=NMYRI{I},NMO=TLMTHI{I},PFREQ=REGPAYFI{I},PMT=REGPAYI{I}, TPER=TYPAYFI{I}); IF (REGPAYI{I} > 0) THEN DO; %MOCONV(AMT=REGPAYI{I},MOAMT=CMOPAYI{I},PER=REGPAYFI{I},IML=NO,YEAR8=YES); END; ELSE DO; %MOCONV(AMT=TYPAYI{I},MOAMT=CMOPAYI{I},PER=TYPAYFI{I},IML=NO,YEAR8=YES); END; IF NMYRI{I} NOT IN (0 -1 -7) THEN DO; PAYLFTI{I}=(TLMTHI{I}-((1998-LNSTYRI{I})*12)); LNAGEI{I}=TLMTHI{I}-PAYLFTI{I}; END; ELSE DO; PAYLFTI{I}=0; LNAGEI{I}=0; END; END; DO I=1 TO MIN(6,X2709); IF (LNTYPE{I}=7 & BUSLN{I} IN(0 5 8)) THEN DO; * indicator and counter of qualified loans; QUALN{I}=1; QUALOANINV=QUALOANINV+QUALN{I}; IF (NMYRI{I} NOT IN(0 -1 -7) & INTRATEI{I}^=-1) THEN DO; IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & PAYLFTI{I} > 0) THEN DO; * a fix for payments reported as yearly that appear to be monthly; IF (CMOPAYI{I} < AMTBORRI{I}*.005) THEN CMOPAYI{I}=MAX(REGPAYI{I},TYPAYI{I}); AMTOWEI{I}=CMOPAYI{I}*((1-1/(1+(INTRATEI{I}/10000)/12)**PAYLFTI{I})/ ((INTRATEI{I}/10000)/12)); AMTOWE_1I{I}=CMOPAYI{I}*((1-1/(1+(INTRATEI{I}/10000)/12)**(PAYLFTI{I}+12))/ ((INTRATEI{I}/10000)/12)); IF LNSTYRI{I}^=1998 THEN AINTEXPI{I}=(CMOPAYI{I}*12)-(AMTOWE_1I{I}-AMTOWEI{I}); ELSE IF LNSTYRI{I}=1998 THEN AINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); END; ELSE IF (TLMTHI{I} < 0 | CMOPAYI{I} < 0 | PAYLFTI{I} < 0) THEN DO; AMTOWEI{I}=0; AMTOWE_1I{I}=0; AINTEXPI{I}=0; END; IF (TLMTHI{I} > 0 & AMTBORRI{I} > 0 & LNAGEI{I} > 0) THEN DO; CURBALI{I}=AMTBORRI{I}*(((1+(INTRATEI{I}/10000)/12)**TLMTHI{I})- ((1+(INTRATEI{I}/10000)/12)**(LNAGEI{I})))/ (((1+(INTRATEI{I}/10000)/12)**TLMTHI{I})-1); CURBAL_1I{I}=AMTBORRI{I}*(((1+(INTRATEI{I}/10000)/12)**TLMTHI{I})- ((1+(INTRATEI{I}/10000)/12)**(LNAGEI{I}-12)))/ (((1+(INTRATEI{I}/10000)/12)**TLMTHI{I})-1); CINTEXPI{I}=(CMOPAYI{I}*12)-(CURBAL_1I{I}-CURBALI{I}); END; ELSE IF (TLMTHI{I} < 0 | AMTBORRI{I} < 0 | LNAGEI{I} < 0) THEN DO; CURBALI{I}=0; CURBAL_1I{I}=0; CINTEXPI{I}=0; END; IF (AMTOUTI{I} > 0 & INTRATEI{I} > 0) THEN SINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); ELSE SINTEXPI{I}=0; * Also fixing cases where loan ends or starts in the survey year. Setting interest expense to amount outstanding for year prior to the survey times the interest rate for loans ending in the survey year. For cases where the loan starts in the survey year, just use amount borrowed times the interest rate; IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & PAYLFTI{I}=0) THEN DO; CINTEXPI{I}=CURBAL_1I{I}*(INTRATEI{I}/10000); AINTEXPI{I}=CINTEXPI{I}; END; IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & LNSTYRI{I}=1998) THEN DO; CINTEXPI{I}=SINTEXPI{I}; AINTEXPI{I}=SINTEXPI{I}; END; * Ad hoc fix for negative interest expenses. Basically sets the interest deduction equal to curball1_1 times the interest rate if curball1 and curball1_1 are positive, otherwise the interest expense equals the reported amount outstanding times the interest rate.; IF ((AINTEXPI{I} < 0 | CINTEXPI{I} < 0) & CURBALI{I} > 0 & CURBAL_1I{I} > 0) THEN DO; CINTEXPI{I}=CURBAL_1I{I}*(INTRATEI{I}/10000); AINTEXPI{I}=CINTEXPI{I}; END; ELSE IF ((AINTEXPI{I} < 0 | CINTEXPI{I} < 0) & (CURBALI{I} <= 0 & CURBAL_1I{I} <= 0)) THEN DO; CINTEXPI{I}=SINTEXPI{I}; AINTEXPI{I}=SINTEXPI{I}; END; IF (SINTEXPI{I} > 0 & CINTEXPI{I} > 0) THEN DCTDIFFI{I}=CINTEXPI{I}-SINTEXPI{I}; ELSE DCTDIFFI{I}=0; END; * Added an extra provision here for loans that are not regualar installment loans. If the loan is a other kind of loan, just using the amount outstanding times the interest rate as interest expense.; ELSE IF (NMYRI{I} IN(-1 -7) & NMPMTI{I} IN(-1 -7) & AMTOUTI{I} > 0 & INTRATEI{I} > 0) | (CMOPAYI{I} > 0 & INTRATEI{I} > 0 & TLMTHI{I}=0 & AMTOUTI{I} > 0) THEN DO; SINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); AINTEXPI{I}=SINTEXPI{I}; CINTEXPI{I}=SINTEXPI{I}; END; ELSE IF (INTRATEI{I}=-1) THEN DO; AINTEXPI{I}=0; CINTEXPI{I}=0; SINTEXPI{I}=0; END; * Averaging across the three measures of interest expense; IF ((CINTEXPI{I} + AINTEXPI{I} + SINTEXPI{I}) > 0) THEN DO; AVINTEXPI{I}=(CINTEXPI{I}+AINTEXPI{I}+SINTEXPI{I})/3; END; ELSE AVINTEXPI{I}=0; * Constraining interest expense amount to be no more than the reported year loan payment - using avintdedct as prefered interest expense measure. Also putting in a fix for cases were the interest deduction is more than 25 percent of the current amount outstanding. If this is the case then the use the simple interest deduction.; IF (AVINTEXPI{I} > 0 & CMOPAYI{I} > 0 & (AVINTEXPI{I} > CMOPAYI{I}*12)) THEN DO; AVINTEXPI{I}=CMOPAYI{I}*12; CINTEXPI{I}=AVINTEXPI{I}; AINTEXPI{I}=AVINTEXPI{I}; SINTEXPI{I}=AVINTEXPI{I}; END; IF (AVINTEXPI{I} > 0 & AMTOUTI{I} > 0 & (AVINTEXPI{I} > .25*AMTOUTI{I})) THEN DO; AVINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); CINTEXPI{I}=AVINTEXPI{I}; AINTEXPI{I}=AVINTEXPI{I}; END; * Checking for strange cases; IF (Y1=YY1*10+1 & (AVINTEXPI{I} > .25*AMTOUTI{I})) THEN PUT "DEDUCTION LARGER THAN 25% OF BALANCE OUTSTANDING " Y1= NMPMTI{I}= NMYRI{I}= TLMTHI{I}= REGPAYFI{I}= REGPAYI{I}= CMOPAYI{I}= TYPAYI{I}= TYPAYFI{I}= LNSTYRI{I}= PAYLFTI{I}= LNAGEI{I}= AMTOUTI{I}= JAMTOUTI{I}= AMTOWEI{I}= AMTOWE_1I{I}= AINTEXPI{I}= CURBALI{I}= CURBAL_1I{I}= CINTEXPI{I}= DCTDIFFI{I}= SINTEXPI{I}= AVINTEXPI{I}= INTRATEI{I}= AMTBORRI{I}= JAMTBORRI{I}= ONSCHEDI{I}= LNTYPE{I}= /; * Compute loan investment interest expense; TOTLNINVEX=TOTLNINVEX+AVINTEXPI{I}; END; END; * Total investment interest expense, if investment interest expense is greater than interest/dividend income, then expense is limited to income amount; TOTINTINC=X5708+X5710; TOTINVEX=0; TOTINVEX=TOTLOCINVEX+TOTINVPDCT+TOTLNINVEX; IF TOTINVEX > 0 THEN HINVEX=1; ELSE HINVEX=0; IF TOTINVEX > TOTINTINC & Y1=YY1*10+1 THEN PUT "TOO MUCH INVESTMENT INTEREST EXPENSE " Y1= TOTINVEX= TOTLOCINVEX= TOTINVPDCT= TOTLNINVEX= TOTINTINC=/; IF (TOTINVEX > TOTINTINC) THEN TOTINVEX=TOTINTINC; *************AGI; * AGI; IF (X5744 IN(1 6) & X5746 IN(0 3)) THEN AGI=X7651; ELSE IF (X5744 IN(1 6) & X5746 IN(1)) THEN AGI=X5751; ELSE IF (X5744 IN(1 6) & X5746 IN(2)) THEN AGI=X7651+X7652; ELSE IF (X5744 IN(1 6) & X5746 IN(4)) THEN AGI=X7652; ELSE IF X5744=5 THEN AGI=X5729; IF AGI=-1 THEN AGI=0; * Constructing some agi classes to compare the amount of deductions I compute to the IRS tables.; AGICL=0; IF (AGI <= 0) THEN AGICL=-1; ELSE IF (0 < AGI < 5000) THEN AGICL=1; ELSE IF (5000 <= AGI < 10000) THEN AGICL=2; ELSE IF (10000 <= AGI < 15000) THEN AGICL=3; ELSE IF (15000 <= AGI < 20000) THEN AGICL=4; ELSE IF (20000 <= AGI < 25000) THEN AGICL=5; ELSE IF (25000 <= AGI < 30000) THEN AGICL=6; ELSE IF (30000 <= AGI < 35000) THEN AGICL=7; ELSE IF (35000 <= AGI < 40000) THEN AGICL=8; ELSE IF (40000 <= AGI < 45000) THEN AGICL=9; ELSE IF (45000 <= AGI < 50000) THEN AGICL=10; ELSE IF (50000 <= AGI < 55000) THEN AGICL=11; ELSE IF (55000 <= AGI < 60000) THEN AGICL=12; ELSE IF (60000 <= AGI < 75000) THEN AGICL=13; ELSE IF (75000 <= AGI < 100000) THEN AGICL=14; ELSE IF (100000 <= AGI < 200000) THEN AGICL=15; ELSE IF (200000 <= AGI < 500000) THEN AGICL=16; ELSE IF (500000 <= AGI < 1000000) THEN AGICL=17; ELSE IF (AGI >= 1000000) THEN AGICL=18; * Computing a rough estimate of how many NPEU people we have and what their income distribution is like. Cannot separate out income when multiple people in NPEU; NPEU=(X113=5)+(X119=5)+(X125=5)+(X131=5)+(X137=5)+(X207=5)+(X213=5)+(X219=5)+(X225=5); NPEUINC=MAX(0,(X6403+X6415)); **************Charitable Contributions; * Contributions to charity, only know if hh contributed $500 or more. Need to use agi to compute limits on charitable deductions, assuming all contributions fall under 50% limit organizations. For TAXSIM, will classify all contributions as cash contributions (from IRS tables, 80 to 90 percent of contributions in a given year are cash). Remember to give TAXSIM X5823, TAXSIM will apply the limits. Limits are applied here and the CHARITYAMT variable is used for comparisons with IRS numbers.; GCHARITY=(X5822=1); CHARITYAMT=0; IF (X5822=1 & X5823 > 0) THEN DO; IF ((FILESTAT > 0) & (X5823 > .5*AGI)) THEN CHARITYAMT=.5*AGI; ELSE IF ((FILESTAT > 0) & (X5823 <= .5*AGI)) THEN CHARITYAMT=X5823; END; IF (X5822=1 & X5823 > 0 & CHARITYAMT < 0) THEN CHARITYAMT=0; **********Total itemized deductions and exemptions * Total itemized deductions, including property taxes here, but remember to separate them out for TAXSIM. Imposing IRS limits on total deductions, rules from itemized deductions worksheet.; DEDCTLIM=0; TOTITEMDCT=0; TEMPITEMDCT=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+CHARITYAMT)); IF TEMPITEMDCT > 0 & (AGI <= 121200 & FILESTAT > 0) THEN DO; TOTITEMDCT=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+CHARITYAMT)); DEDCTLIM=0; END; ELSE IF TEMPITEMDCT > 0 & (AGI > 121200 & FILESTAT > 0) THEN DO; DEDCTLIM=1; IWLINE1=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+CHARITYAMT)); IF (IWLINE1-TOTINVEX <= 0) THEN TOTITEMDCT=IWLINE1; ELSE IF (IWLINE1-TOTINVEX > 0) THEN DO; IWLINE4=(IWLINE1-TOTINVEX)*.80; IWLINE7=AGI-121200; IWLINE8=IWLINE7*.03; IWLINE9=MIN(IWLINE4,IWLINE8); TOTITEMDCT=IWLINE1-IWLINE9; END; END; * Total dollar amount of exemptions, also applying phaseouts; TOTEXPTAMT=0; EXPTLIM=0; IF (FILESTAT=1) THEN DO; IF (AGI <= 121200) THEN TOTEXPTAMT=TOTEXPT*2650; ELSE IF (AGI > 121200) THEN DO; EXPTLIM=1; EWLINE2=TOTEXPT*2650; EWLINE5=AGI-121200; IF EWLINE5 > 122500 THEN TOTEXPTAMT=0; ELSE IF EWLINE5 <= 122500 THEN DO; EWLINE6=ROUND((EWLINE5/2500),1); EWLINE7=EWLINE6*.02; EWLINE8=EWLINE7*EWLINE2; TOTEXPTAMT=EWLINE2-EWLINE8; END; END; END; ELSE IF (FILESTAT IN(2 5)) THEN DO; IF (AGI <= 181800) THEN TOTEXPTAMT=TOTEXPT*2650; ELSE IF (AGI > 181800) THEN DO; EXPTLIM=1; EWLINE2=TOTEXPT*2650; EWLINE5=AGI-181800; IF EWLINE5 > 122500 THEN TOTEXPTAMT=0; ELSE IF EWLINE5 <= 122500 THEN DO; EWLINE6=ROUND((EWLINE5/2500),1); EWLINE7=EWLINE6*.02; EWLINE8=EWLINE7*EWLINE2; TOTEXPTAMT=EWLINE2-EWLINE8; END; END; END; ELSE IF (FILESTAT IN(4)) THEN DO; IF (AGI <= 151500) THEN TOTEXPTAMT=TOTEXPT*2650; ELSE IF (AGI > 151500) THEN DO; EXPTLIM=1; EWLINE2=TOTEXPT*2650; EWLINE5=AGI-151500; IF EWLINE5 > 122500 THEN TOTEXPTAMT=0; ELSE IF EWLINE5 <= 122500 THEN DO; EWLINE6=ROUND((EWLINE5/2500),1); EWLINE7=EWLINE6*.02; EWLINE8=EWLINE7*EWLINE2; TOTEXPTAMT=EWLINE2-EWLINE8; END; END; END; * Standard deduction by filing status, including addition deduction amount for over 65, don't have any info on blindness; STDDCT=0; IF (FILESTAT=1 & RAGE < 65) THEN STDDCT=4150; ELSE IF (FILESTAT=1 & RAGE >= 65) THEN STDDCT=5150; ELSE IF (FILESTAT=2 & RAGE < 65 & SPAGE < 65) THEN STDDCT=6900; ELSE IF (FILESTAT=2 & RAGE >= 65 & SPAGE >= 65) THEN STDDCT=8500; ELSE IF (FILESTAT=2 & (RAGE >= 65 | SPAGE >= 65)) THEN STDDCT=7700; ELSE IF (FILESTAT=4 & RAGE < 65) THEN STDDCT=6050; ELSE IF (FILESTAT=4 & RAGE >= 65) THEN STDDCT=7050; ELSE IF (FILESTAT=5 & RAGE < 65) THEN STDDCT=6900; ELSE IF (FILESTAT=5 & RAGE >= 65) THEN STDDCT=7700; * Did the hh itemize - reported itemization and calculated. Again these variables are just for early comparisons - use the TAXSIM generated itemization status later on.; IF (X5744 IN(1 5 6) & (X7367=1 | X7368=1 | X7369=1)) THEN ITEMIZE=1; ELSE IF (X5744 IN(1 5 6) & (X7367 IN(0 5) & X7368 IN(0 5) & X7369 IN(0 5))) THEN ITEMIZE=0; IF (X5744 IN(1 5 6) & TOTITEMDCT => STDDCT) THEN CITEMIZE=1; ELSE IF (X5744 IN(1 5 6) & TOTITEMDCT < STDDCT) THEN CITEMIZE=0; * Create variables for internet TAXSIM dataset. Since SS is included in x5722, subtracting out SS income reported in section r if SS benefits were received during the tax year; YEAR=1997; STATE=0; IF FILESTAT=4 THEN MARITST=3; ELSE MARITST=FILESTAT; IF FILESTAT IN(1 4 5) THEN AGEXMP=(RAGE > 65); ELSE IF FILESTAT=2 THEN AGEXMP=(RAGE > 65) + (SPAGE > 65); WSINCOME = MAX(0,X5702); WSINCSP=0; TBUSINC = X5704; NTAXINC= MAX(0,X5706); INTINC= MAX(0,X5708); DIVINC= MAX(0,X5710); * Dividing capital gains/losses up into long-term and short-term portions based on the following procedure. Using the aggregate data on long-term and short-term capital gains/losses from the IRS SOI Individual report (table 1.4), the share of gains/losses that are long and short term is determined for 3 broad AGI classes, < 50K, 50 to < 100K, and 100K +. The shares from this computation are then applied to the data (by AGI class).; IF X5712=-1 THEN CAPGLINC=0; ELSE CAPGLINC=X5712; STCAPINC=0; LTCAPINC=0; IF (AGICL IN(-1 1 2 3 4 5 6 7 8 9 10)) THEN DO; IF (CAPGLINC > 0) THEN DO; LTCAPINC=CAPGLINC*.89; STCAPINC=CAPGLINC*.11; END; ELSE IF (CAPGLINC < 0) THEN DO; LTCAPINC=CAPGLINC*.67; STCAPINC=CAPGLINC*.33; END; END; ELSE IF (AGICL IN(11 12 13 14)) THEN DO; IF (CAPGLINC > 0) THEN DO; LTCAPINC=CAPGLINC*.88; STCAPINC=CAPGLINC*.12; END; ELSE IF (CAPGLINC < 0) THEN DO; LTCAPINC=CAPGLINC*.62; STCAPINC=CAPGLINC*.38; END; END; ELSE IF (AGICL IN(15 16 17 18)) THEN DO; IF (CAPGLINC > 0) THEN DO; LTCAPINC=CAPGLINC*.90; STCAPINC=CAPGLINC*.10; END; ELSE IF (CAPGLINC < 0) THEN DO; LTCAPINC=CAPGLINC*.47; STCAPINC=CAPGLINC*.53; END; END; RENTINC= X5714; UNEMPINC = MAX(0,X5716); CHSPALINC=MAX(0,X5718); AFDCINC = MAX(0,X5720); * separate out IRA/Keogh/401K withdrawals from other income and add into pension income; OTHINC= (X5724)*(X5725^=11); GSSINC=MAX(0,((X5306*%ACONV(X5307)*(X7734 <=1997))+(X5311*%ACONV(X5312)*(X7735 <= 1997)))); IF GSSINC=0 THEN PENINC= MAX(0,X5722)+(X5724)*(X5725=11); ELSE IF (GSSINC > 0) THEN PENINC=MAX(0,(X5722-GSSINC))+(X5724)*(X5725=11); OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; NONTAX=NTAXINC+AFDCINC; RENT=MAX(0,(X602*%ACONV(X603)),(X612*%ACONV(X613)),(X619*%ACONV(X620)), (X708*%ACONV(X709))); * unadjtotdedct is the total amount of itemized deductions, but the phaseout limit has not been applied - TAXSIM will do this; UNADJTOTDEDCT=MAX(0,(ADJDEDCT+TOTINVEX+CHARITYAMT)); * Need to split out AMT preference items among deductions. State taxes are computed by TAXSIM, so just need to divide up mortgage interest, investment interest expense, and charitable contributions; AMTPREFDEDCT=MAX(0,TOTINVEX); AMTNPREFDEDCT=MAX(0,(ADJDEDCT+CHARITYAMT)); CHCAREXP=0; TOTXINC=WSINCOME+WSINCSP+DIVINC+OTHPINC+PENINC+GSSINC+UNEMPINC+STCAPINC +LTCAPINC; ARRAY NEG_1 {*} TBUSINC OTHINC TOTXINC OTHPINC; DO I=1 TO DIM(NEG_1); IF NEG_1{I}=-1 THEN NEG_1{I}=0; ELSE NEG_1{I}=NEG_1{I}; END; * Check for cases were totxinc=0 and x5729 > 0 - should be none. Note that X5706 and X5720 are not included in totxinc, so check that they are zero.; IF TOTXINC=0 & X5729 > 0 & X5720=0 & X5706=0 & Y1=YY1*10+1 THEN PUT "TOTXINC IS ZERO BUT X5729 > 0 " YY1= Y1= TOTXINC= X5729= X5702= X5704= X5706= X5708= X5710= X5712= X5714= X5716= X5718= X5720= X5722= X5724= RAGE= SPAGE= FILESTAT= X4100= X4700=/; * Adding in payroll tax liability and mtr, assuming employee pays both employee and employer share, and in 1997 the SE pay 2x the employee amount. Therefore, the rate is the same regardless of SE/EMP status. Also need rules for computing mtr from the payroll tax, for single earner households payroll mtr is just the contribution rate, unless earnings are above the maximum, then the payroll mtr is zero. For dual earner households, need to split up earnings reported in x5702/x5704 to compute the payroll tax liability and mtr. The rule used here is to look at the current earnings for R and Sp, and as long as R and Sp have worked at their current jobs for at least one year, then use the percent each accounts for in total household earnings to split up x5702/x5704. If either R or Sp has been at their current job for less than one year, then split up x5702/x5704 50-50. Only computing the payroll mtr for R in dual earner households. Also, need to check for hhs who worked in 1997, but not currently working. For single earner households of this type, just calculate payroll tax liability and mtr using x5702/x5704. In the case of hhs with a two earners, divide x5702/x5704 50-50 and calculate the payroll liability and mtr. Computing the payroll atr in a similar fashion. For 1997, payroll tax rate was 12.4, with the earnings max of $65400 for OASI and DI, but for HI the rate is 2.9 with no earnings limit. NOTE: Need to adjust for different amounts used to compute the mtr, initially computing payroll mtr for adding $1 to earnings.; ** earnings from wages and businesses for head and spouse/parnter; * need to convert non-annual wages to annual amounts; IF X4113 IN(6 8 14 22 -7) THEN HHWAGES=MAX(0,X4112); ELSE IF X4113=1 THEN HHWAGES=MAX(0,(X4112*(X4111*5))); ELSE IF X4113=2 THEN HHWAGES=MAX(0,(X4112*X4111)); ELSE IF X4113=3 THEN HHWAGES=MAX(0,(X4112*(X4111/2))); ELSE IF X4113=4 THEN HHWAGES=MAX(0,(X4112*(X4111/4.33))); ELSE IF X4113=5 THEN HHWAGES=MAX(0,(X4112*((X4111/4.33)/3))); ELSE IF X4113=11 THEN HHWAGES=MAX(0,(X4112*(X4111/26))); ELSE IF X4113=12 THEN HHWAGES=MAX(0,(X4112*(X4111/8.66))); ELSE IF X4113=18 THEN HHWAGES=MAX(0,(X4112*(X4110*X4111))); ELSE IF X4113=31 THEN HHWAGES=MAX(0,(X4112*(X4111/2.16))); ELSE IF X4113 IN(0 -1) THEN HHWAGES=0; IF X4713 IN(6 8 14 22 -7) THEN SPWAGES=MAX(0,X4712); ELSE IF X4713=1 THEN SPWAGES=MAX(0,(X4712*(X4711*5))); ELSE IF X4713=2 THEN SPWAGES=MAX(0,(X4712*X4711)); ELSE IF X4713=3 THEN SPWAGES=MAX(0,(X4712*(X4711/2))); ELSE IF X4713=4 THEN SPWAGES=MAX(0,(X4712*(X4711/4.33))); ELSE IF X4713=5 THEN SPWAGES=MAX(0,(X4712*((X4711/4.33)/3))); ELSE IF X4713=11 THEN SPWAGES=MAX(0,(X4712*(X4711/26))); ELSE IF X4713=12 THEN SPWAGES=MAX(0,(X4712*(X4711/8.66))); ELSE IF X4713=18 THEN SPWAGES=MAX(0,(X4712*(X4710*X4711))); ELSE IF X4713=31 THEN SPWAGES=MAX(0,(X4712*(X4711/2.16))); ELSE IF X4713 IN(0 -1) THEN SPWAGES=0; IF X4132 IN(6 8 14 22 -7) THEN HHBUS=MAX(0,X4131); ELSE IF X4132=1 THEN HHBUS=MAX(0,(X4131*(X4111*5))); ELSE IF X4132=2 THEN HHBUS=MAX(0,(X4131*X4111)); ELSE IF X4132=3 THEN HHBUS=MAX(0,(X4131*(X4111/2))); ELSE IF X4132=4 THEN HHBUS=MAX(0,(X4131*(X4111/4.33))); ELSE IF X4132=5 THEN HHBUS=MAX(0,(X4131*((X4111/4.33)/3))); ELSE IF X4132=11 THEN HHBUS=MAX(0,(X4131*(X4111/26))); ELSE IF X4132=12 THEN HHBUS=MAX(0,(X4131*(X4111/8.66))); ELSE IF X4132=18 THEN HHBUS=MAX(0,(X4131*(X4110*X4111))); ELSE IF X4132=31 THEN HHBUS=MAX(0,(X4131*(X4111/2.16))); ELSE IF X4132 IN(0 -1) THEN HHBUS=0; IF X4732 IN(6 8 14 22 -7) THEN SPBUS=MAX(0,X4731); ELSE IF X4732=1 THEN SPBUS=MAX(0,(X4731*(X4711*5))); ELSE IF X4732=2 THEN SPBUS=MAX(0,(X4731*X4711)); ELSE IF X4732=3 THEN SPBUS=MAX(0,(X4731*(X4711/2))); ELSE IF X4732=4 THEN SPBUS=MAX(0,(X4731*(X4711/4.33))); ELSE IF X4732=5 THEN SPBUS=MAX(0,(X4731*((X4711/4.33)/3))); ELSE IF X4732=11 THEN SPBUS=MAX(0,(X4731*(X4711/26))); ELSE IF X4732=12 THEN SPBUS=MAX(0,(X4731*(X4711/8.66))); ELSE IF X4732=18 THEN SPBUS=MAX(0,(X4731*(X4710*X4711))); ELSE IF X4732=31 THEN SPBUS=MAX(0,(X4731*(X4711/2.16))); ELSE IF X4732 IN(0 -1) THEN SPBUS=0; REARN=HHWAGES+HHBUS; SPEARN=SPWAGES+SPBUS; HHEARN=REARN+SPEARN; PAYROLLIAB=0; PAYROLLMTR=0; PAYROLLATR=0; IF (X4106 IN(1 2 3 -7) & X4706=0) | (X4106=0 & X4706 IN(1 2 3 -7)) | (X4106=0 & X4706=0 & X102=0 & (X5702 > 0 | X5704 > 0)) THEN DO; PAYROLLIAB=MIN(65400,(X5702+X5704*(X5704 >0)))*.124 + (X5702+X5704*(X5704 >0))*.029 ; PAYROLLMTR=(((X5702+X5704*(X5704 > 0)+1) <= 65400)*12.4)+2.9; IF (PAYROLLIAB >0) THEN PAYROLLATR=100*(PAYROLLIAB/(X5702+X5704*(X5704 > 0))); END; ELSE IF (X4106 IN(1 2 3 -7) & X4706 IN(1 2 3 -7)) THEN DO; IF (X4115 >=1 & X4715 >=1 & HHEARN > 0) THEN DO; PAYROLLIAB=MIN(65400,((X5702+X5704*(X5704>0))*(REARN/HHEARN)))*.124 + ((X5702+X5704*(X5704 >0))*(REARN/HHEARN))*.029 + MIN(65400,((X5702+X5704*(X5704 >0))*(SPEARN/HHEARN)))*.124 + ((X5702+X5704*(X5704 >0))*(REARN/HHEARN))*.029; PAYROLLMTR=(((X5702+X5704*(X5704 >0)+1)*(REARN/HHEARN) <= 65400)*12.4)+2.9; IF ((MIN(65400,((X5702+X5704*(X5704>0))*(REARN/HHEARN)))*.124 + ((X5702+X5704*(X5704 >0))*(REARN/HHEARN))*.029) > 0) THEN PAYROLLATR=100*((MIN(65400,((X5702+X5704*(X5704>0))*(REARN/HHEARN)))*.124 + ((X5702+X5704*(X5704 >0))*(REARN/HHEARN))*.029)/ ((X5702+X5704*(X5704 > 0))*(REARN/HHEARN))); END; ELSE IF (X4115 =-1 & X4715=-1) | (X4115 >=1 & X4715=-1) | (X4115=-1 & X4715 >=1) | (HHEARN=0) THEN DO; PAYROLLIAB=MIN(65400,((X5702+X5704*(X5704 >0))*(.5)))*.124 + ((X5702+X5704*(X5704 >0))*(.5))*.029 + MIN(65400,((X5702+X5704*(X5704 >0))*(.5)))*.124 + ((X5702+X5704*(X5704 >0))*(.5))*.029; PAYROLLMTR=(((X5702+X5704*(X5704 >0)+1)*(.5) <= 65400)*12.4)+2.9; IF (PAYROLLIAB*.5 > 0) THEN PAYROLLATR=100*((PAYROLLIAB*.5)/((X5702+X5704*(X5704 >0))*(.5))); END; END; ELSE IF (X4106=0 & X4706=0 & X102^=0 & (X5702 > 0 | X5704 > 0)) THEN DO; PAYROLLIAB=MIN(65400,((X5702+X5704*(X5704 >0))*(.5)))*.124 + ((X5702+X5704*(X5704 >0))*(.5))*.029 + MIN(65400,((X5702+X5704*(X5704 >0))*(.5)))*.124 + ((X5702+X5704*(X5704 >0))*(.5))*.029; PAYROLLMTR=(((X5702+X5704*(X5704 >0)+1)*(.5) <= 65400)*12.4)+2.9; IF (PAYROLLIAB*.5 > 0) THEN PAYROLLATR=100*((PAYROLLIAB*.5)/((X5702+X5704*(X5704 >0))*(.5))); END; ELSE IF PAYROLLIAB=0 & PAYROLLMTR=0 & PAYROLLATR=0 & (X5702 > 0 | X5704 > 0) & Y1=YY1*10+1 THEN PUT "NO PAYROLL LIABILITY, MTR, OR ATR " Y1= X102= X4106= X4706= X4115= X4715= X4112= X4113= X4131= X4132= X4712= X4713= X4731= X4732= X5702= X5704= HHWAGES= HHBUS= SPWAGES= SPBUS= REARN= SPEARN= HHEARN= /; IF PAYROLLMTR=0 & (0 < (X5702+X5704*(X5704 > 0)) < 65400) & Y1=YY1*10+1 THEN PUT "ZERO PAYROLLMTR " Y1= X102= X4106= X4706= X4115= X4715= X4112= X4113= X4131= X4132= X4712= X4713= X4731= X4732= X5702= X5704= HHWAGES= HHBUS= SPWAGES= SPBUS= REARN= SPEARN= HHEARN= /; * Check for missing variables; ARRAY CHVARS {*} YY1 Y1 AMTOWEM1 CURBALM1 AINTDCTM1 CINTDCTM1 SINTDCTM1 X723 X7571 X820 X811 X809 X814 X806 X805 X804 X812 CMOPAYM1 CMOPAYM2 CMOPAYM3 WGT NUMORT TOTDEDCTM X920 X1020 X911 X1011 X701 X1101 X1102 X1103 X1114 X1125 X1105 X1116 X1127 X1108 X1119 X1130 X1136 X1104 X1115 X1126 X1106 X1117 X1128 TOTDEDCTL TOTAQDBTL TOTEQDBTL AMTOWEO1 CURBALO1 AINTDCTO1 CINTDCTO1 SINTDCTO1 TOTDEDCTO X1701 X1703 X1803 X1903 X702 X714 X715 X7135 X716 TOTAMTOUTM TOTAMTOUTO X802 X902 X1002 X905 X1005 X1715 X1815 X1915 X1713 X1813 X1913 X7137 X6723 X1711 X1811 X1911 GRFAMTOUTM HAAMTOUTM X5746 X5744 QUALOTHPROP ADJDEDCT ADJDEDCTO FMVOTHPROP HOUSE ADJDEDCTL ADJEQDBTL ADJAMTOUTO AVINTDCTM1 AVINTDCTM2 AVINTDCTM3 AVINTDCTO1 AVINTDCTO2 AVINTDCTO3 X810 X721 X722 J721 J722 X1720 X1820 X1920 RESTAXM1 PROPTXRATE X7182 TOTINTINC TOTLOCINVEX TOTINVEX TOTLNINVEX QUALOANINV HINVEX GCHARITY CHARITYAMT X5751 X7651 X7652 X5823 TOTITEMDCT STDDCT ITEMIZE CITEMIZE AGI TOTINVPDCT QUALINVPROP AGICL DEDCTLIM X7372 X7018 X8023 X105 NPEU NPEUINC PERSEXP KIDS TOTEXPT FILESTAT TOTEXPTAMT EXPTLIM RAGE SPAGE YEAR STATE MARITST WSINCOME WSINCSP TBUSINC NTAXINC INTINC DIVINC CAPGLINC RENTINC UNEMPINC CHSPALINC AFDCINC PENINC OTHINC GSSINC OTHPINC NONTAX RENT UNADJTOTDEDCT CHCAREXP AGEXMP X5729 TOTXINC PAYROLLIAB PAYROLLMTR PAYROLLATR LWP KIDSU17 STCAPINC LTCAPINC AMTPREFDEDCT AMTNPREFDEDCT; DO I=1 TO DIM(CHVARS); IF CHVARS{I}=. THEN PUT "MISSING VALUE FOR " Y1= CHVARS{I}=; END; RUN; * Create a dataset to send to Feenberg at NBER, STATE VAR SET TO ZERO; DATA DAN98; SET T98; TOTPINEX=0; STATE=0; FILE INTAX98; IF FILESTAT > 0; PUT Y1 YEAR STATE FILESTAT KIDS AGEXMP WSINCOME WSINCSP DIVINC OTHPINC PENINC GSSINC NONTAX RENT RESTAXM1 AMTPREFDEDCT CHCAREXP UNEMPINC KIDSU17 AMTNPREFDEDCT STCAPINC LTCAPINC; RUN; * Compute some stats on the data; PROC FREQ DATA=T98; TABLES FILESTAT OVERLIM ITEMIZE CITEMIZE; RUN; PROC MEANS DATA=T98; FREQ WGT; VAR YEAR STATE FILESTAT KIDS AGEXMP WSINCOME WSINCSP DIVINC OTHPINC PENINC GSSINC NONTAX RENT RESTAXM1 AMTPREFDEDCT CHCAREXP UNEMPINC KIDSU17 AMTNPREFDEDCT STCAPINC LTCAPINC; RUN; /* * Uncomment this code after you have run the data through TAXSIM; * Merge internet TAXSIM rates back into the dataset; DATA ITAX98P; INFILE TAXSIM98; INPUT Y1 YEAR STATE FEDTAXLIAB STTAXLIAB FICA FEDMTR STMTR FICAR; DROP YEAR; RUN; PROC SORT DATA=ITAX98P; BY Y1; RUN; PROC SORT DATA=T98; BY Y1; RUN; DATA TAX98; MERGE T98 (IN=IN1) ITAX98P; BY Y1; IF IN1; RUN; DATA TAX98; SET TAX98; * only calculating average tax rates for hhs with positive taxable income and a positive tax liability, restricting atr to be at most 100%; IF (TOTXINC > 0 & FEDTAXLIAB > 0) THEN FEDATR=(FEDTAXLIAB/TOTXINC)*100; ELSE FEDATR=0; * Checking out negative and high tax liabilities and rates; IF (FEDTAXLIAB < 0 | FEDMTR < 0) & FILESTAT > 0 & Y1=YY1*10+1 THEN PUT "NEGATIVE FED TAX LIABILITY OR RATE " Y1= FEDTAXLIAB= FEDMTR= FEDATR= STTAXLIAB= STMTR= MARITST= KIDS= AGEXMP= WSINCOME= WSINCSP= DIVINC= OTHPINC= PENINC= GSSINC= NONTAX= RENT= RESTAXM1= UNADJTOTDEDCT= CHCAREXP= UNEMPINC= CITEMIZE= TOTXINC= FILESTAT= TOTITEMDCT= ADJDEDCT= CHARITYAMT= RESTAXM1= TOTINVEX= TOTEXPT= KIDS= PERSEXP= X5744= X5746= AGI= STDDCT= CAPGLINC= TBUSINC= X5729= STATE= /; IF FEDMTR > 45 & FILESTAT > 0 & Y1=YY1*10+1 THEN PUT "HIGH FED MTR1 " Y1= FEDTAXLIAB= FEDMTR= FEDATR= STTAXLIAB= STMTR= MARITST= KIDS= AGEXMP= WSINCOME= WSINCSP= DIVINC= OTHPINC= PENINC= GSSINC= NONTAX= RENT= RESTAXM1= UNADJTOTDEDCT= CHCAREXP= UNEMPINC= CITEMIZE= TOTXINC= FILESTAT= TOTITEMDCT= ADJDEDCT= CHARITYAMT= RESTAXM1= TOTINVEX= TOTEXPT= KIDS= PERSEXP= X5744= X5746= AGI= STDDCT= CAPGLINC= TBUSINC= X5729= STATE= /; IF FEDTAXLIAB > 10000000 & FILESTAT > 0 & Y1=YY1*10+1 THEN PUT "HIGH FED TAX LIABILITY " Y1= FEDTAXLIAB= FEDMTR= FEDATR= STTAXLIAB= STMTR= MARITST= KIDS= AGEXMP= WSINCOME= WSINCSP= DIVINC= OTHPINC= PENINC= GSSINC= NONTAX= RENT= RESTAXM1= UNADJTOTDEDCT= CHCAREXP= UNEMPINC= CITEMIZE= TOTXINC= FILESTAT= TOTITEMDCT= ADJDEDCT= CHARITYAMT= RESTAXM1= TOTINVEX= TOTEXPT= KIDS= PERSEXP= X5744= X5746= AGI= STDDCT= CAPGLINC= TBUSINC= X5729= STATE= /; IF FEDATR > 50 & FILESTAT > 0 & Y1=YY1*10+1 THEN PUT "HIGH FED ATR " Y1= FEDTAXLIAB= FEDMTR= FEDATR= STTAXLIAB= STMTR= MARITST= KIDS= AGEXMP= WSINCOME= WSINCSP= DIVINC= OTHPINC= PENINC= GSSINC= NONTAX= RENT= RESTAXM1= UNADJTOTDEDCT= CHCAREXP= UNEMPINC= CITEMIZE= TOTXINC= FILESTAT= TOTITEMDCT= ADJDEDCT= CHARITYAMT= RESTAXM1= TOTINVEX= TOTEXPT= KIDS= PERSEXP= X5744= X5746= AGI= STDDCT= CAPGLINC= TBUSINC= X5729= STATE= /; RUN; PROC CONTENTS DATA=TAX98; RUN; * Compute some stats on the merged SCF and TAXSIM data; PROC MEANS DATA=TAX98; FREQ WGT; VAR YEAR STATE FILESTAT KIDS AGEXMP WSINCOME WSINCSP DIVINC OTHPINC PENINC GSSINC NONTAX RENT RESTAXM1 AMTPREFDEDCT CHCAREXP UNEMPINC KIDSU17 AMTNPREFDEDCT STCAPINC LTCAPINC FEDTAXLIAB STTAXLIAB FEDMTR STMTR; RUN; */ ENDSAS;