1 The SAS System 13:32 Friday, January 29, 2021 NOTE: Copyright (c) 2002-2012 by SAS Institute Inc., Cary, NC, USA. NOTE: SAS (r) Proprietary Software 9.4 (TS1M3 MBCS3170) Licensed to NATIONAL BUREAU OF ECONOMIC RESEARCH, Site 70111350. NOTE: This session is executing on the Linux 3.10.0-1160.2.2.el7.x86_64 (LIN X64) platform. NOTE: Updated analytical products: SAS/STAT 14.1 NOTE: Additional host information: Linux LIN X64 3.10.0-1160.2.2.el7.x86_64 #1 SMP Mon Oct 19 10:20:12 CDT 2020 x86_64 Scientific Linux release 7.9 (Nitrogen) You are running SAS 9. Some SAS 8 files will be automatically converted by the V9 engine; others are incompatible. Please see http://support.sas.com/rnd/migration/planning/platform/64bit.html PROC MIGRATE will preserve current SAS file attributes and is recommended for converting all your SAS libraries from any SAS 8 release to SAS 9. For details and examples, please see http://support.sas.com/rnd/migration/index.html This message is contained in the SAS news file, and is presented upon initialization. Edit the file "news" in the "misc/base" directory to display site-specific news and information in the program log. The command line option "-nonews" will prevent this display. NOTE: SAS initialization used: real time 0.17 seconds cpu time 0.07 seconds 1 2 options mprint; 3 * A program to compute tax rates and liabilities for the 1989-2019 4 SCFs. In this version, households are split into tax units using 5 various assumptions to divide up income and deductions. More 6 details about the assumptions are contained in comments within the code.; 7 * Kevin Moore, 11/20 8 * Items to change in each survey year macro call 9 1. Eligibility year for widowed filing status 10 2. Ceilings on home acquisition and home equity debt 11 3. Limit on charitable contributions 12 4. Itemized deduction AGI limits 13 5. Exemption amounts and phaseout limits 14 6. Standard deduction amounts 15 7. All year/dataset/filename references 16 8. Any SCF variable/question changes 17 9. Payroll tax rates and limits 18 10. LT/ST capitol gains/losses ratios; 19 * This version excludes the state variable - only federal tax 20 information is returned by TAXSIM; 21 * Users that wish to calculate state tax information may set the STATE 2 The SAS System 13:32 Friday, January 29, 2021 22 variable to -1 (in one place in the program). This will cause 23 TAXSIM to compute state tax information for each observation for all 24 states. Users may then average the tax variables for an 25 approximation of federal and state tax liabilities and rates.; 26 * The program should be run in two steps. First run the program 27 with HTAXFILE=YES to create .csv input file for internet TAXSIM v32. 28 After you have put the input file through TAXSIM, run the program 29 again with HTAXFILE=YES, which will pull in the output file from TAXSIM; 30 31 *OPTIONS MPRINT; 32 OPTIONS LINESIZE=120; 33 34 * A few macros used throughout the program; 35 %MACRO TERMCON(NPMT=,NYR=,NMO=,PFREQ=,PMT=,TPER=); 36 IF (&NYR=0 & &NPMT=0) THEN DO; 37 &NMO=0; 38 39 END; 40 ELSE IF (&NYR^=0|&NPMT^=0) THEN DO; 41 IF (&NYR^=0) THEN DO; 42 IF (&NYR=-1) THEN DO; 43 &NMO=&NYR; 44 IF (&NPMT=0) THEN DO; 45 &NPMT=-1; 46 END; 47 END; 48 ELSE IF (&NYR>0) THEN DO; 49 &NMO=&NYR*12; 50 IF (&NPMT=0) THEN DO; 51 IF (&PFREQ IN (-1 -2)) THEN DO; 52 &NPMT=-7; 53 END; 54 ELSE IF (&PFREQ=-7) THEN DO; 55 &NPMT=-7; 56 END; 57 ELSE IF (&PFREQ=8) THEN DO; 58 &NPMT=1; 59 END; 60 ELSE IF (&PFREQ>.Z) THEN DO; 61 %MOCONV(AMT=&NMO,PER=&PFREQ,MOAMT=&NPMT,IML=NO); 62 END; 63 END; 64 END; 65 END; 66 ELSE IF (&NPMT=-1) THEN DO; 67 &NMO=-1; 68 IF (&NYR=0) THEN DO; 69 &NYR=-1; 70 END; 71 END; 72 ELSE IF (&NPMT>0) THEN DO; 73 PFREQ=&PFREQ; 74 IF (PFREQ<=0 & &TPER>0) THEN PFREQ=&TPER; 75 IF (PFREQ IN (-1 -2)) THEN DO; 76 &NMO=-7; 77 END; 78 ELSE IF (PFREQ=-7) THEN DO; 79 &NMO=-7; 3 The SAS System 13:32 Friday, January 29, 2021 80 END; 81 ELSE IF (PFREQ>.Z) THEN DO; 82 %IMOCONV(AMT=&NPMT,PER=PFREQ,CAMT=&NMO,IML=NO); 83 END; 84 IF (&NMO>0) THEN DO; 85 &NYR=MAX(1,INT(.5+(&NMO/12))); 86 &NMO=MAX(1,ROUND(&NMO)); 87 END; 88 IF (&NYR=0) THEN DO; 89 PUT "UNABLE TO CONVERT TERM " YY1= &NPMT= &NYR= &NMO= 90 &PFREQ= &PMT= &TPER=; 91 END; 92 END; 93 END; 94 %MEND TERMCON; 95 96 * conversion to monthly frequency; 97 * NOTE: if per is missing, but amount is given, this macro returns the 98 original value as MOAMT; 99 100 %MACRO MOCONV(AMT=,PER=,MOAMT=&AMT,IML=YES,WKS=52,HRS=40,YEAR8=NO); 101 IF (&PER=1) THEN &MOAMT=&AMT*5*&WKS/12; 102 ELSE IF (&PER=2) THEN &MOAMT=&AMT*&WKS/12; 103 ELSE IF (&PER=3) THEN &MOAMT=&AMT*26*(&WKS/52)/12; 104 ELSE IF (&PER=4) THEN &MOAMT=&AMT; 105 ELSE IF (&PER=5) THEN &MOAMT=&AMT/3; 106 ELSE IF (&PER=6) THEN &MOAMT=&AMT/12; 107 ELSE IF (&PER=20) THEN &MOAMT=&AMT*10/12; 108 ELSE IF (&PER=21) THEN &MOAMT=&AMT*3/12; 109 %IF (&YEAR8 EQ YES) %THEN %DO; 110 ELSE IF (&PER=8) THEN &MOAMT=&AMT/12; 111 %END; 112 ELSE IF (&PER=11) THEN &MOAMT=&AMT*(&WKS/52)/6; 113 ELSE IF (&PER=12) THEN &MOAMT=&AMT*(&WKS/52)/2; 114 ELSE IF (&PER=23) THEN &MOAMT=&AMT*13/12; 115 ELSE IF (&PER=24) THEN &MOAMT=&AMT*8.67/12; 116 ELSE IF (&PER=25) THEN &MOAMT=&AMT*(&WKS/52)/24; 117 ELSE IF (&PER=31) THEN &MOAMT=&AMT*(&WKS/52)*2; 118 ELSE IF (&PER=18) THEN &MOAMT=&AMT*&HRS*&WKS/12; 119 ELSE IF (&PER=0) THEN &MOAMT=0; 120 ELSE IF (&PER>.Z & &PER^=-1 & &PER^=-2) THEN DO; 121 &MOAMT=.; 122 %IF (&IML EQ YES) %THEN %DO; 123 PRINT "ERR CANNOT TRANSLATE PER FOR " Y1 &AMT &PER &MOAMT; 124 %END; 125 %ELSE %DO; 126 PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= &AMT= &PER= &MOAMT=; 127 %END; 128 END; 129 ELSE IF (&AMT>.Z & &AMT<-2) THEN DO; 130 &MOAMT=.; 131 %IF (&IML EQ YES) %THEN %DO; 132 PRINT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " YY1 &AMT &PER &MOAMT; 133 %END; 134 %ELSE %DO; 135 PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= &AMT= 136 &PER= &MOAMT=; 137 %END; 4 The SAS System 13:32 Friday, January 29, 2021 138 END; 139 ELSE IF (&AMT<=.Z) THEN &MOAMT=&AMT; 140 ELSE IF (&AMT^=-1 & &AMT^=-2) THEN DO; 141 %IF (&IML EQ YES) %THEN %DO; 142 PRINT "VALUE NOT CONVERTED FOR " Y1 X30075 &PER &AMT "SETTING AMT=."; 143 &MOAMT=.; 144 %END; 145 %ELSE %DO; 146 PUT "VALUE NOT CONVERTED FOR " Y1= &PER= &AMT= "SETTING AMT=."; 147 &MOAMT=.; 148 %END; 149 END; 150 %MEND MOCONV; 151 152 * conversion from monthly frequency to another specified frequency; 153 * NOTE: if per is missing, but amount is given, this macro returns the 154 original value as CAMT; 155 156 %MACRO IMOCONV(AMT=,PER=,CAMT=&AMT,IML=YES,WKS=52,HRS=40,YEAR8=NO); 157 IF (&AMT>0) THEN DO; 158 IF (&PER=1) THEN &CAMT=&AMT*12/(5*52); 159 ELSE IF (&PER=2) THEN &CAMT=MAX(1,INT(.5+(&AMT*12/&WKS))); 160 ELSE IF (&PER=3) THEN &CAMT=MAX(1,INT(.5+(&AMT*12/26))); 161 ELSE IF (&PER=4) THEN &CAMT=MAX(1,INT(.5+(&AMT))); 162 ELSE IF (&PER=5) THEN &CAMT=MAX(1,INT(.5+(&AMT*3))); 163 ELSE IF (&PER=6) THEN &CAMT=MAX(1,INT(.5+(&AMT*12))); 164 ELSE IF (&PER=21) THEN &CAMT=MAX(1,INT(.5+(&AMT*4))); 165 ELSE IF (&PER=20) THEN &CAMT=MAX(1,INT(.5+(&AMT*12/10))); 166 %IF (&YEAR8 EQ YES) %THEN %DO; 167 ELSE IF (&PER=8) THEN &CAMT=MAX(1,INT(.5+(&AMT*12))); 168 %END; 169 ELSE IF (&PER=11) THEN &CAMT=&AMT*6/(&WKS/52); 170 ELSE IF (&PER=12) THEN &CAMT=&AMT*2/(&WKS/52); 171 ELSE IF (&PER=31) THEN &CAMT=&AMT/(2*(&WKS/52)); 172 ELSE IF (&PER=14) THEN &CAMT=&AMT/(2*(&WKS/52)); 173 ELSE IF (&PER=18) THEN &CAMT=&AMT*12/(&HRS*&WKS); 174 ELSE IF (&PER=0) THEN &CAMT=0; 175 ELSE IF (&PER>.Z) THEN DO; 176 &CAMT=&AMT; 177 %IF (&IML EQ YES) %THEN %DO; 178 PRINT "ERR CANNOT TRANSLATE PER FOR " Y1 X30075 &AMT 179 &PER &CAMT; 180 %END; 181 %ELSE %DO; 182 PUT "ERR CANNOT TRANSLATE PER FOR " Y1= &AMT= &PER= 183 &CAMT=; 184 %END; 185 END; 186 END; 187 ELSE IF (&AMT>.Z & &AMT<-2) THEN DO; 188 &CAMT=&AMT; 189 %IF (&IML EQ YES) %THEN %DO; 190 PRINT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1 &AMT &PER &CAMT; 191 %END; 192 %ELSE %DO; 193 PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= &AMT= 194 &PER= &CAMT=; 195 %END; 5 The SAS System 13:32 Friday, January 29, 2021 196 END; 197 ELSE IF (&AMT=0) THEN &CAMT=0; 198 ELSE IF (&AMT<=.Z) THEN &CAMT=&AMT; 199 ELSE IF (&AMT^=-1 & &AMT^=-2) THEN DO; 200 %IF (&IML EQ YES) %THEN %DO; 201 PRINT "VALUE NOT CONVERTED FOR " Y1 &PER &AMT "SETTING CAMT=."; 202 &CAMT=.; 203 %END; 204 %ELSE %DO; 205 PUT "VALUE NOT CONVERTED FOR " Y1= &PER= &AMT= "SETTING CAMT=."; 206 &CAMT=.; 207 %END; 208 END; 209 %MEND IMOCONV; 210 211 %MACRO ACONV(F); 212 ((&F=2)*52.18+(&F=3)*26.09+(&F=4)*12+(&F=5)*4+(&F=6)+(&F=8)+ 213 (&F=11)*2+(&F=12)*6+(&F=31)*24+(&F=14)+(&F=22)) 214 %MEND ACONV; 215 216 %MACRO MORTPAY(AMTB=,MPAY=,IR=,TERM=); 217 &MPAY=ROUND((MORT((&AMTB),.,((&IR/10000)/12),(&TERM))),.01); 218 %MEND MORTPAY; 219 220 221 *main macro; 222 *parameters 223 SYEAR - survey year 224 TYEAR - tax year, usually survey year-1, but could change to use tax 225 laws from different years 226 WYEAR - qualified widower year, usually tyear-2 227 ITDLIM1 - AGI limit for itemized deductions for single, joint, 228 widower, and head of household filers 229 ITDLIM2 - AGI limit for itemized deductions for married, filing 230 separately filers 231 ITDL10 - itemized deduction worksheet line 10 divisor 232 EXPAMT - personal exemption amount 233 EXPAMT2 - personal exemption amount if residual above AGI threshold 234 EXDL9 - personal exemption worksheet line 9 divisor 235 EXPAGIT1 - residual AGI threshold for single, joint, widower, and head 236 of household filers 237 EXPAGIT2 - residual AGI threshold for married, filing separately filers 238 EXLIM1 - AGI limit for exemptions for single filers 239 EXLIM2 - AGI limit for exemptions for joint or widower filers 240 EXLIM3 - AGI limit for exemptions for married, filing separately filers 241 EXLIM4 - AGI limit for exemptions for head of household filers 242 STDAMT1 - standard deduction amount for single filer or married filing 243 separately, no age exemption 244 STDAMT2 - standard deduction amount for single filer or married filing 245 separately, one age exemption 246 STDAMT3 - standard deduction amount for joint filer or widower, no age exemptions 247 STDAMT4 - standard deduction amount for joint filer or widower, one age exemption 248 STDAMT5 - standard deduction amount for joint filer, two age exemptions 249 STDAMT6 - standard deduction amount for head of household filer, no age exemption 250 STDAMT7 - standard deduction amount for head of household filer, one age exemption 251 FILELIM1 - filing threshold for single filers with no age exemption 252 FILELIM2 - filing threshold for single filers with one age exemption 253 FILELIM3 - filing threshold for joint filers with no age exemption 6 The SAS System 13:32 Friday, January 29, 2021 254 FILELIM4 - filing threshold for joint filers with one age exemption 255 FILELIM5 - filing threshold for joint filers with two age exemptions 256 FILELIM6 - filing threshold for married filing separately filers any age 257 FILELIM7 - filing threshold for head of household filers with no age exemption 258 FILELIM8 - filing threshold for head of household filers with one age exemption 259 FILELIM9 - filing threshold for widower filers with no age exemption 260 FILELIM10 - filing threshold for widower filers with one age exemption 261 LCGAGI1 - share of capital gains treated as long-term gains for filers 262 with AGI < 50k 263 LCLAGI1 - share of capital losses treated as long-term losses for filers 264 with AGI < 50k 265 LCGAGI2 - share of capital gains treated as long-term gains for filers 266 with 50k <= AGI < 100k 267 LCLAGI2 - share of capital losses treated as long-term losses for filers 268 with 50k <= AGI < 100k 269 LCGAGI3 - share of capital gains treated as long-term gains for filers 270 with AGI >= 100k 271 LCLAGI3 - share of capital losses treated as long-term losses for filers 272 with AGI >= 100k 273 PAYTAX - payroll tax rate, assuming employee pays both employer and 274 employee share 275 MEDHI - Medicare tax rate 276 PTLIM - annual payroll tax limit 277 HTAXFILE - flag for including code to merge TAXSIM data into SCF data, 278 set to NO by default, set to YES when you want merge TAXSIM data into 279 the SCF data 280 ; 281 282 %MACRO TAXSCF(SYEAR=,TYEAR=,WYEAR=,ITDLIM1=,ITDLIM2=,ITDL10=,EXPAMT=,EXPAMT2=,EXDL9=,EXPAGIT1=,EXPAGIT2=, 283 EXLIM1=,EXLIM2=,EXLIM3=,EXLIM4=,STDAMT1=,STDAMT2=,STDAMT3=,STDAMT4=,STDAMT5=,STDAMT6=, 284 STDAMT7=,FILELIM1=,FILELIM2=,FILELIM3=,FILELIM4=,FILELIM5=,FILELIM6=,FILELIM7=,FILELIM8=, 285 FILELIM9=,FILELIM10=,LCGAGI1=,LCLAGI1=,LCGAGI2=,LCLAGI2=,LCGAGI3=,LCLAGI3=,PAYTAX=, 286 MEDHI=,PTLIM=,HTAXFILE=YES); 287 %LET SYR2=%SUBSTR(&SYEAR,3,2); 288 289 290 * define libraries for SCF public datasets; 291 %IF &SYEAR GE 2001 %THEN %DO; 292 LIBNAME SCF&SYR2 "../orig/sas7bdat" ACCESS=READONLY; 293 %END; 294 %ELSE %DO; 295 LIBNAME SCF&SYR2 "../orig/sas7bdat" ACCESS=READONLY; 296 %END; 297 * directory for datasets created by the program; 298 LIBNAME OUT "."; 299 * csv file for TAXSIM v32; 300 FILENAME SCFTAX "txpydata&SYR2..csv"; 301 * csv from TAXSIM v32; 302 FILENAME TAXSIM "results&SYR2..csv"; 303 304 * read in public SCF data, assumes dataset name is pXXiY.sas7bdat; 305 * NOTE: Any changes to the libname or data set name must also be made in this data step; 306 DATA MAIN; 307 %IF &SYEAR GE 1995 %THEN %DO; 308 SET SCF&SYR2%STR(.P)&SYR2%STR(I6); 309 %END; 310 %ELSE %IF &SYEAR EQ 1992 %THEN %DO; 311 SET SCF&SYR2%STR(.P)&SYR2%STR(I6); 7 The SAS System 13:32 Friday, January 29, 2021 312 %END; 313 %ELSE %IF &SYEAR EQ 1989 %THEN %DO; 314 SET SCF&SYR2%STR(.P)&SYR2%STR(I6); 315 YY1=XX1; 316 Y1=X1; 317 %END; 318 RUN; 319 320 PROC SORT DATA=MAIN; 321 BY Y1; 322 RUN; 323 324 DATA SCF; 325 326 SET MAIN; 327 file "null.txt"; 328 WGT=(X42001/5); 329 POP=1; 330 331 * setting STATE variable to zero, set to -1 if you want 332 TAXSIM to compute state tax for all 51 states; 333 STATE=0; 334 335 * Small data fix for one case in 1992; 336 %IF &SYEAR EQ 1992 %THEN %DO; 337 IF (YY1=2078 & X107=0) THEN DO; 338 X107=1; 339 END; 340 %END; 341 342 * Small data fix for one case in 1998; 343 %IF &SYEAR EQ 1998 %THEN %DO; 344 IF (YY1=1002 & X105=0) THEN DO; 345 X105=1; 346 END; 347 %END; 348 349 * Small data fix for one case in 2007; 350 %IF &SYEAR EQ 2007 %THEN %DO; 351 IF (YY1=715 & X105=2) THEN DO; 352 X105=0; 353 END; 354 %END; 355 356 * Small data fix for one case in 2013; 357 %IF &SYEAR EQ 2013 %THEN %DO; 358 IF (YY1=4225 & X1016=0) THEN DO; 359 X1016=-1; 360 END; 361 %END; 362 363 * Payment frequency on other loans not asked in 1989, assumed to be 364 monthly; 365 %IF &SYEAR EQ 1989 %THEN %DO; 366 X7527=4*(X2718>0)+X2718*(X2718<=0); 367 X7526=4*(X2735>0)+X2735*(X2735<=0); 368 X7525=4*(X2818>0)+X2818*(X2818<=0); 369 X7524=4*(X2835>0)+X2835*(X2835<=0); 8 The SAS System 13:32 Friday, January 29, 2021 370 X7523=4*(X2918>0)+X2918*(X2918<=0); 371 X7522=4*(X2935>0)+X2935*(X2935<=0); 372 %END; 373 374 * Only one other income variable after 1992, set to zero for 1992 375 forward; 376 %IF &SYEAR GE 1995 %THEN %DO; 377 X5726=0; 378 X5727=0; 379 %END; 380 381 * Spouse/partner in PEU, need to create X7020 for 1989 to 1998; 382 %IF &SYEAR GE 1989 AND &SYEAR LE 1998 %THEN %DO; 383 IF X107 IN(0 2 5 12) THEN X7020=1; 384 ELSE IF X107=1 THEN X7020=2; 385 %END; 386 387 * A few other recodes to construct variables not asked in 1989 and 1992; 388 %IF &SYEAR GE 1989 AND &SYEAR LE 1992 %THEN %DO; 389 X7135=5*(X714=1); 390 X7133=0; 391 X7134=0; 392 X7367=0; 393 X7368=0; 394 X7369=0; 395 X7018=0; 396 X7372=5*(X8023=5); 397 X7001=(X113 IN(2 3 4 5))+(X119 IN(2 3 4 5))+(X125 IN(2 3 4 5))+(X131 IN(2 3 4 5))+(X137 IN(2 3 4 5)) 398 +(X207 IN(2 3 4 5))+(X213 IN(2 3 4 5))+(X219 IN(2 3 4 5))+(X225 IN(2 3 4 5))+(X231 IN(2 3 4 5)); 399 X7377=((X5918=1)+2*(X5918=5))*(&SYEAR EQ 1992); 400 X7392=(X6111=1)+2*(X6111=5); 401 %END; 402 403 * Number of years with spouse/partner; 404 IF &SYEAR=X8005 THEN X7370=-1; 405 ELSE X7370=&SYEAR-X8005; 406 407 * Number of people in NPEU, need to compute for 1989 to 2004, variable exists for 2007 forward; 408 %IF &SYEAR GE 1989 AND &SYEAR LE 2004 %THEN %DO; 409 X7050=X101-X7001; 410 %END; 411 412 413 * Absent spouse/partner indicator; 414 IF (X100=5) | (X106=5 & X107 IN(2 5 12)) THEN ABSP_P=1; 415 ELSE ABSP_P=0; 416 PERSEXP=1+(X105 IN(1 2))*(ABSP_P=0); 417 * Including children living elsewhere that are under 18, max of one extra as 418 there is uncertainty about dependent status; 419 %IF &SYEAR LE 1992 OR &SYEAR GE 2007 %THEN %DO; 420 KIDS=(X108 IN(4 13))*(X110 < 19) + 421 (X114 IN(4 13))*(X116 < 19) + 422 (X120 IN(4 13))*(X122 < 19) + 423 (X126 IN(4 13))*(X128 < 19) + 424 (X132 IN(4 13))*(X134 < 19) + 425 (X202 IN(4 13))*(X204 < 19) + 426 (X208 IN(4 13))*(X210 < 19) + 427 (X214 IN(4 13))*(X216 < 19) + 9 The SAS System 13:32 Friday, January 29, 2021 428 (X220 IN(4 13))*(X222 < 19) + 429 (X226 IN(4 13))*(X228 < 19) + 430 (X5912 > 0 | X5912=-2); 431 %END; 432 %ELSE %IF &SYEAR GE 1995 & &SYEAR LE 2004 %THEN %DO; 433 KIDS=(X108 IN(4 13))*(X110 < 19) + 434 (X114 IN(4 13))*(X116 < 19) + 435 (X120 IN(4 13))*(X122 < 19) + 436 (X126 IN(4 13))*(X128 < 19) + 437 (X132 IN(4 13))*(X134 < 19) + 438 (X202 IN(4 13))*(X204 < 19) + 439 (X208 IN(4 13))*(X210 < 19) + 440 (X214 IN(4 13))*(X216 < 19) + 441 (X220 IN(4 13))*(X222 < 19) + 442 (X5912 > 0 | X5912=-2); 443 %END; 444 445 * For the child tax credit - must be under 17; 446 %IF &SYEAR LE 1992 OR &SYEAR GE 2007 %THEN %DO; 447 KIDSU17=(X108 IN(4 13))*(X110 < 17) + 448 (X114 IN(4 13))*(X116 < 17) + 449 (X120 IN(4 13))*(X122 < 17) + 450 (X126 IN(4 13))*(X128 < 17) + 451 (X132 IN(4 13))*(X134 < 17) + 452 (X202 IN(4 13))*(X204 < 17) + 453 (X208 IN(4 13))*(X210 < 17) + 454 (X214 IN(4 13))*(X216 < 17) + 455 (X220 IN(4 13))*(X222 < 17) + 456 (X226 IN(4 13))*(X228 < 17); 457 %END; 458 %ELSE %IF &SYEAR GE 1995 & &SYEAR LE 2004 %THEN %DO; 459 KIDSU17=(X108 IN(4 13))*(X110 < 17) + 460 (X114 IN(4 13))*(X116 < 17) + 461 (X120 IN(4 13))*(X122 < 17) + 462 (X126 IN(4 13))*(X128 < 17) + 463 (X132 IN(4 13))*(X134 < 17) + 464 (X202 IN(4 13))*(X204 < 17) + 465 (X208 IN(4 13))*(X210 < 17) + 466 (X214 IN(4 13))*(X216 < 17) + 467 (X220 IN(4 13))*(X222 < 17) ; 468 %END; 469 470 %IF &SYEAR LE 1992 OR &SYEAR GE 2007 %THEN %DO; 471 KIDSU18=(X108 IN(4 13))*(X110 < 18) + 472 (X114 IN(4 13))*(X116 < 18) + 473 (X120 IN(4 13))*(X122 < 18) + 474 (X126 IN(4 13))*(X128 < 18) + 475 (X132 IN(4 13))*(X134 < 18) + 476 (X202 IN(4 13))*(X204 < 18) + 477 (X208 IN(4 13))*(X210 < 18) + 478 (X214 IN(4 13))*(X216 < 18) + 479 (X220 IN(4 13))*(X222 < 18) + 480 (X226 IN(4 13))*(X228 < 18); 481 %END; 482 %ELSE %IF &SYEAR GE 1995 & &SYEAR LE 2004 %THEN %DO; 483 KIDSU18=(X108 IN(4 13))*(X110 < 18) + 484 (X114 IN(4 13))*(X116 < 18) + 485 (X120 IN(4 13))*(X122 < 18) + 10 The SAS System 13:32 Friday, January 29, 2021 486 (X126 IN(4 13))*(X128 < 18) + 487 (X132 IN(4 13))*(X134 < 18) + 488 (X202 IN(4 13))*(X204 < 18) + 489 (X208 IN(4 13))*(X210 < 18) + 490 (X214 IN(4 13))*(X216 < 18) + 491 (X220 IN(4 13))*(X222 < 18) ; 492 %END; 493 494 %IF &SYEAR LE 1992 OR &SYEAR GE 2007 %THEN %DO; 495 KIDSU13=(X108 IN(4 13))*(X110 < 13) + 496 (X114 IN(4 13))*(X116 < 13) + 497 (X120 IN(4 13))*(X122 < 13) + 498 (X126 IN(4 13))*(X128 < 13) + 499 (X132 IN(4 13))*(X134 < 13) + 500 (X202 IN(4 13))*(X204 < 13) + 501 (X208 IN(4 13))*(X210 < 13) + 502 (X214 IN(4 13))*(X216 < 13) + 503 (X220 IN(4 13))*(X222 < 13) + 504 (X226 IN(4 13))*(X228 < 13); 505 %END; 506 %ELSE %IF &SYEAR GE 1995 & &SYEAR LE 2004 %THEN %DO; 507 KIDSU13=(X108 IN(4 13))*(X110 < 13) + 508 (X114 IN(4 13))*(X116 < 13) + 509 (X120 IN(4 13))*(X122 < 13) + 510 (X126 IN(4 13))*(X128 < 13) + 511 (X132 IN(4 13))*(X134 < 13) + 512 (X202 IN(4 13))*(X204 < 13) + 513 (X208 IN(4 13))*(X210 < 13) + 514 (X214 IN(4 13))*(X216 < 13) + 515 (X220 IN(4 13))*(X222 < 13) ; 516 %END; 517 518 519 520 * Indicator for R living with a partner; 521 LWP=(X8023=2); 522 523 RAGE=X14; 524 * Set spouse/parnter age to zero if absent spouse/partner; 525 SPAGE=X19*(X7020=2); 526 527 * Possible scenarios, not considering NPEU right now, will create those 528 tax units last 529 1. Married filing jointly households = tax unit 530 2. Single person households = tax unit 531 3. Filing separately households = split into two tax units, need 532 to determine if single or married filing separately filing status 533 4. LWP households = split into two tax units even if one person is 534 a nonfiler 535 For 3. and 4., one of the tax units may have head of household 536 status depending on presence of children 537 For each new tax unit, start with replicate of household data and 538 parse out income, deductions, exemptions; 539 540 * Create new observations from married filing separately households 541 or LWP households. 542 0. Tax unit = household 543 1. Created tax unit for household head 11 The SAS System 13:32 Friday, January 29, 2021 544 2. Created tax unit for spouse/parnter 545 3-8. Created tax unit for NPEU member 546 Note: If R and Sp are legally married for more than one year, 547 treat as married filing joint even if x5746=3,4. If R and Sp LWP 548 and report filing jointly treat as two tax units. If R and Sp 549 married and report filing separately, treat as filing jointly 550 unless either R or Sp has a past marriage. Inspection of the data 551 reveals that too many married couples report filing separately 552 when compared to the IRS data. The past marriage condition put 553 the number closer to the IRS data.; 554 MARRIED=(X8023=1 & X105=1 & X7370 >= 1 & X7020=2); 555 IF (X5744 IN(1 6) & X5746=1 & MARRIED=1) 556 | (MARRIED=1 & ((X5744=5 | X5746 IN(3 4)) | (X5746=2 & X7377^=2 & X7392^=2))) 557 | (X8023 > 0 & X105=0 & (X5744=5 | (X5744 IN(1 6) & X5746=0))) 558 | (X8023 > 0 & X105 > 0 & X5744 IN(1 5 6) & X5746=0 & X7020=1) 559 | (X8023=8 & X105=0 & X5744=1 & X5746=1) 560 THEN TAXUNIT=0; 561 ELSE IF (X5744 IN(1 6) & X5746 IN(2 3 4)) | (X8023 > 0 & X105 > 0 562 & (X5744=5 | (X5744 IN(1 6) & X5746 IN(0 1)))) 563 | (X8023=1 & X105=1 & X7370=-1 & X5744=1) THEN TAXUNIT=1; 564 ELSE PUT "MISSING TAXUNIT STATUS " YY1= X5744= X5746= X8023= X105= 565 X7020= MARRIED= X7372= X7018= X7370=; 566 TUAGE=RAGE; 567 RUN; 568 569 570 571 DATA NEWUNITS; 572 SET SCF; 573 IF TAXUNIT=1; 574 TAXUNIT=2; 575 TUAGE=SPAGE; 576 SPAGE=0; 577 RUN; 578 579 DATA SCF; 580 SET SCF NEWUNITS; 581 RUN; 582 583 DATA SCF; 584 SET SCF; 585 586 * Codes for filestat, assigning status even if did not file, will 587 determine non-filer status later, filing status for split tax units 588 done after splitting up income 589 1= Single 590 2= Married filing jointly 591 3= Married filing separately 592 4= Head of HH 593 5= Qualified widower; 594 FILESTAT=0; 595 IF TAXUNIT=0 THEN DO; 596 IF (MARRIED=1) THEN FILESTAT=2; 597 ELSE IF MARRIED=0 THEN DO; 598 IF PERSEXP=1 & KIDS=0 THEN FILESTAT=1; 599 ELSE IF PERSEXP=1 & KIDS > 0 & X8023=5 & X7372=5 & X8007>=&WYEAR THEN FILESTAT=5; 600 ELSE IF PERSEXP=1 & KIDS > 0 THEN FILESTAT=4; 601 END; 12 The SAS System 13:32 Friday, January 29, 2021 602 TOTEXPT=PERSEXP+KIDS; 603 END; 604 605 606 * No AGI variables starting in 2010; 607 * Coding income variables with -1 and -2 to zero; 608 ARRAY NEG {*} X5704 X5714 X5724 X5726 X5729; 609 DO I=1 TO DIM(NEG); 610 IF NEG{I} IN(-2 -1) THEN NEG{I}=0; 611 END; 612 613 * Income from wages and business; 614 R_LABORINC=MAX(0,X4112)*%ACONV(X4113); 615 SP_LABORINC=MAX(0,X4712)*%ACONV(X4713); 616 R_BUSINC=MAX(0,X4131)*%ACONV(X4132); 617 SP_BUSINC=MAX(0,X4731)*%ACONV(X4732); 618 619 * Income from pensions and tax-deferred account withdrawals. No 620 withdrawal information for IRAs or future pensions prior to 2004. No 621 withdrawal information for any tax-deferred accounts, aside from 622 other income, prior to 2001; 623 %IF &SYEAR GE 2010 %THEN %DO; 624 R_REGPEN=MAX(0,(X5318*%ACONV(X5319)*(X5315=1)*(X5317>=1))) 625 +MAX(0,(X5326*%ACONV(X5327)*(X5323=1)*(X5325>=1))) 626 +MAX(0,(X5334*%ACONV(X5335)*(X5331=1)*(X5333>=1))) 627 +MAX(0,(X5418*%ACONV(X5419)*(X5415=1)*(X5417>=1))); 628 R_WITHDRAW=X6558+(X6574*.5)+MAX(0,(X6464*%ACONV(X6465)*(X5315=1))) 629 +MAX(0,(X6469*%ACONV(X6470)*(X5323=1)))+MAX(0,(X6474*%ACONV(X6475)*(X5331=1))) 630 +MAX(0,(X6479*%ACONV(X6480)*(X5415=1)))+MAX(0,(X6965*%ACONV(X6966)*(X5606=1))) 631 +MAX(0,(X6971*%ACONV(X6972)*(X5614=1)))+MAX(0,(X6977*%ACONV(X6978)*(X5622=1))) 632 +MAX(0,(X6983*%ACONV(X6984)*(X5630=1)))+(X5724)*(X5725=11)*.5; 633 SP_REGPEN=MAX(0,(X5318*%ACONV(X5319)*(X5315=2)*(X5317>=1))) 634 +MAX(0,(X5326*%ACONV(X5327)*(X5323=2)*(X5325>=1))) 635 +MAX(0,(X5334*%ACONV(X5335)*(X5331=2)*(X5333>=1))) 636 +MAX(0,(X5418*%ACONV(X5419)*(X5415=2)*(X5417>=1))); 637 SP_WITHDRAW=X6566+(X6574*.5)+MAX(0,(X6464*%ACONV(X6465)*(X5315=2))) 638 +MAX(0,(X6469*%ACONV(X6470)*(X5323=2)))+MAX(0,(X6474*%ACONV(X6475)*(X5331=2))) 639 +MAX(0,(X6479*%ACONV(X6480)*(X5415=2)))+MAX(0,(X6965*%ACONV(X6966)*(X5606=2))) 640 +MAX(0,(X6971*%ACONV(X6972)*(X5614=2)))+MAX(0,(X6977*%ACONV(X6978)*(X5622=2))) 641 +MAX(0,(X6983*%ACONV(X6984)*(X5630=2)))+(X5724)*(X5725=11)*.5; 642 %END; 643 %ELSE %IF &SYEAR GE 2004 AND &SYEAR LE 2007 %THEN %DO; 644 R_REGPEN=MAX(0,(X5318*%ACONV(X5319)*(X5315=1)*(X5317>=1))) 645 +MAX(0,(X5326*%ACONV(X5327)*(X5323=1)*(X5325>=1))) 646 +MAX(0,(X5334*%ACONV(X5335)*(X5331=1)*(X5333>=1))) 647 +MAX(0,(X5418*%ACONV(X5419)*(X5415=1)*(X5417>=1))) 648 +MAX(0,(X5426*%ACONV(X5427)*(X5423=1)*(X5425>=1))) 649 +MAX(0,(X5434*%ACONV(X5435)*(X5431=1)*(X5433>=1))); 650 R_WITHDRAW=X6558+(X6574*.5)+MAX(0,(X6464*%ACONV(X6465)*(X5315=1))) 651 +MAX(0,(X6469*%ACONV(X6470)*(X5323=1)))+MAX(0,(X6474*%ACONV(X6475)*(X5331=1))) 652 +MAX(0,(X6479*%ACONV(X6480)*(X5415=1)))+MAX(0,(X6484*%ACONV(X6485)*(X5423=1))) 653 +MAX(0,(X6489*%ACONV(X6490)*(X5431=1)))+MAX(0,(X6965*%ACONV(X6966)*(X5606=1))) 654 +MAX(0,(X6971*%ACONV(X6972)*(X5614=1)))+MAX(0,(X6977*%ACONV(X6978)*(X5622=1))) 655 +MAX(0,(X6983*%ACONV(X6984)*(X5630=1)))+MAX(0,(X6989*%ACONV(X6990)*(X5638=1))) 656 +MAX(0,(X6995*%ACONV(X6996)*(X5646=1)))+(X5724)*(X5725=11)*.5; 657 SP_REGPEN=MAX(0,(X5318*%ACONV(X5319)*(X5315=2)*(X5317>=1))) 658 +MAX(0,(X5326*%ACONV(X5327)*(X5323=2)*(X5325>=1))) 659 +MAX(0,(X5334*%ACONV(X5335)*(X5331=2)*(X5333>=1))) 13 The SAS System 13:32 Friday, January 29, 2021 660 +MAX(0,(X5418*%ACONV(X5419)*(X5415=2)*(X5417>=1))) 661 +MAX(0,(X5426*%ACONV(X5427)*(X5423=2)*(X5425>=1))) 662 +MAX(0,(X5434*%ACONV(X5435)*(X5431=2)*(X5433>=1))); 663 SP_WITHDRAW=X6566+(X6574*.5)+MAX(0,(X6464*%ACONV(X6465)*(X5315=2))) 664 +MAX(0,(X6469*%ACONV(X6470)*(X5323=2)))+MAX(0,(X6474*%ACONV(X6475)*(X5331=2))) 665 +MAX(0,(X6479*%ACONV(X6480)*(X5415=2)))+MAX(0,(X6484*%ACONV(X6485)*(X5423=2))) 666 +MAX(0,(X6489*%ACONV(X6490)*(X5431=2)))+MAX(0,(X6965*%ACONV(X6966)*(X5606=2))) 667 +MAX(0,(X6971*%ACONV(X6972)*(X5614=2)))+MAX(0,(X6977*%ACONV(X6978)*(X5622=2))) 668 +MAX(0,(X6983*%ACONV(X6984)*(X5630=2)))+MAX(0,(X6989*%ACONV(X6990)*(X5638=2))) 669 +MAX(0,(X6995*%ACONV(X6996)*(X5646=2)))+(X5724)*(X5725=11)*.5; 670 %END; 671 %ELSE %IF &SYEAR EQ 2001 %THEN %DO; 672 R_REGPEN=MAX(0,(X5318*%ACONV(X5319)*(X5315=1)*(X5317>=1))) 673 +MAX(0,(X5326*%ACONV(X5327)*(X5323=1)*(X5325>=1))) 674 +MAX(0,(X5334*%ACONV(X5335)*(X5331=1)*(X5333>=1))) 675 +MAX(0,(X5418*%ACONV(X5419)*(X5415=1)*(X5417>=1))) 676 +MAX(0,(X5426*%ACONV(X5427)*(X5423=1)*(X5425>=1))) 677 +MAX(0,(X5434*%ACONV(X5435)*(X5431=1)*(X5433>=1))); 678 R_WITHDRAW=MAX(0,(X6464*%ACONV(X6465)*(X5315=1))) 679 +MAX(0,(X6469*%ACONV(X6470)*(X5323=1)))+MAX(0,(X6474*%ACONV(X6475)*(X5331=1))) 680 +MAX(0,(X6479*%ACONV(X6480)*(X5415=1)))+MAX(0,(X6484*%ACONV(X6485)*(X5423=1))) 681 +MAX(0,(X6489*%ACONV(X6490)*(X5431=1)))+(X5724)*(X5725=11)*.5; 682 SP_REGPEN=MAX(0,(X5318*%ACONV(X5319)*(X5315=2)*(X5317>=1))) 683 +MAX(0,(X5326*%ACONV(X5327)*(X5323=2)*(X5325>=1))) 684 +MAX(0,(X5334*%ACONV(X5335)*(X5331=2)*(X5333>=1))) 685 +MAX(0,(X5418*%ACONV(X5419)*(X5415=2)*(X5417>=1))) 686 +MAX(0,(X5426*%ACONV(X5427)*(X5423=2)*(X5425>=1))) 687 +MAX(0,(X5434*%ACONV(X5435)*(X5431=2)*(X5433>=1))); 688 SP_WITHDRAW=MAX(0,(X6464*%ACONV(X6465)*(X5315=2))) 689 +MAX(0,(X6469*%ACONV(X6470)*(X5323=2)))+MAX(0,(X6474*%ACONV(X6475)*(X5331=2))) 690 +MAX(0,(X6479*%ACONV(X6480)*(X5415=2)))+MAX(0,(X6484*%ACONV(X6485)*(X5423=2))) 691 +MAX(0,(X6489*%ACONV(X6490)*(X5431=2)))+(X5724)*(X5725=11)*.5; 692 %END; 693 %ELSE %IF &SYEAR GE 1995 AND &SYEAR LE 1998 %THEN %DO; 694 R_REGPEN=MAX(0,(X5318*%ACONV(X5319)*(X5315=1)*(X5317>=1))) 695 +MAX(0,(X5326*%ACONV(X5327)*(X5323=1)*(X5325>=1))) 696 +MAX(0,(X5334*%ACONV(X5335)*(X5331=1)*(X5333>=1))) 697 +MAX(0,(X5418*%ACONV(X5419)*(X5415=1)*(X5417>=1))) 698 +MAX(0,(X5426*%ACONV(X5427)*(X5423=1)*(X5425>=1))) 699 +MAX(0,(X5434*%ACONV(X5435)*(X5431=1)*(X5433>=1))); 700 R_WITHDRAW=(X5724)*(X5725=11)*.5; 701 SP_REGPEN=MAX(0,(X5318*%ACONV(X5319)*(X5315=2)*(X5317>=1))) 702 +MAX(0,(X5326*%ACONV(X5327)*(X5323=2)*(X5325>=1))) 703 +MAX(0,(X5334*%ACONV(X5335)*(X5331=2)*(X5333>=1))) 704 +MAX(0,(X5418*%ACONV(X5419)*(X5415=2)*(X5417>=1))) 705 +MAX(0,(X5426*%ACONV(X5427)*(X5423=2)*(X5425>=1))) 706 +MAX(0,(X5434*%ACONV(X5435)*(X5431=2)*(X5433>=1))); 707 SP_WITHDRAW=(X5724)*(X5725=11)*.5; 708 %END; 709 %ELSE %IF &SYEAR LE 1992 %THEN %DO; 710 R_REGPEN=MAX(0,(X5318*%ACONV(X5319)*(X5315=1)*(X5317>=1))) 711 +MAX(0,(X5326*%ACONV(X5327)*(X5323=1)*(X5325>=1))) 712 +MAX(0,(X5334*%ACONV(X5335)*(X5331=1)*(X5333>=1))) 713 +MAX(0,(X5418*%ACONV(X5419)*(X5415=1)*(X5417>=1))) 714 +MAX(0,(X5426*%ACONV(X5427)*(X5423=1)*(X5425>=1))) 715 +MAX(0,(X5434*%ACONV(X5435)*(X5431=1)*(X5433>=1))); 716 R_WITHDRAW=(X5724)*(X5725=11)*.5+(X5726)*(X5727=11)*.5; 717 SP_REGPEN=MAX(0,(X5318*%ACONV(X5319)*(X5315=2)*(X5317>=1))) 14 The SAS System 13:32 Friday, January 29, 2021 718 +MAX(0,(X5326*%ACONV(X5327)*(X5323=2)*(X5325>=1))) 719 +MAX(0,(X5334*%ACONV(X5335)*(X5331=2)*(X5333>=1))) 720 +MAX(0,(X5418*%ACONV(X5419)*(X5415=2)*(X5417>=1))) 721 +MAX(0,(X5426*%ACONV(X5427)*(X5423=2)*(X5425>=1))) 722 +MAX(0,(X5434*%ACONV(X5435)*(X5431=2)*(X5433>=1))); 723 SP_WITHDRAW=(X5724)*(X5725=11)*.5+(X5726)*(X5727=11)*.5; 724 %END; 725 726 727 * For new tax units need to split up income and determine which new 728 tax unit is assigned which deductions and exemptions. Also need to 729 zero out any variables not relevant to the new tax unit (ex. spouses 730 wages); 731 732 IF TAXUNIT IN(1 2) THEN DO; 733 * age; 734 IF (TAXUNIT=1) THEN SPAGE=0; 735 * wages; 736 IF (TAXUNIT=1 & (R_LABORINC+SP_LABORINC>0)) 737 THEN WSINCOME=MAX(0,X5702)*(R_LABORINC/(R_LABORINC+SP_LABORINC))*(R_LABORINC>0); 738 ELSE IF (TAXUNIT=2 & (R_LABORINC+SP_LABORINC>0)) 739 THEN WSINCOME=MAX(0,X5702)*(SP_LABORINC/(R_LABORINC+SP_LABORINC))*(SP_LABORINC>0); 740 ELSE WSINCOME=MAX(0,X5702)*.5; 741 WSINCSP=0; 742 * business income; 743 %IF &SYEAR GE 2010 %THEN %DO; 744 R_SOLEPROP=(X4106 IN(2 3 4) | (X3113=1 & X3119=2) | (X3213=1 & X3219=2)); 745 SP_SOLEPROP=(X4706 IN(2 3 4) | (X3114=1 & X3119=2) | (X3214=1 & X3219=2)); 746 %END; 747 %ELSE %IF &SYEAR LE 2007 %THEN %DO; 748 R_SOLEPROP=(X4106 IN(2 3 4) | (X3113=1 & X3119=2) | (X3213=1 749 & X3219=2) | (X3313=1 & X3319=2)); 750 SP_SOLEPROP=(X4706 IN(2 3 4) | (X3114=1 & X3119=2) | 751 (X3214=1 & X3219=2) | (X3313=1 & X3319=2)); 752 %END; 753 IF (TAXUNIT=1 & (R_BUSINC+SP_BUSINC>0) & (R_SOLEPROP=1 | SP_SOLEPROP=1)) THEN DO; 754 IF (R_SOLEPROP=1 & SP_SOLEPROP=1) 755 THEN TBUSINC=X5704*(R_BUSINC/(R_BUSINC+SP_BUSINC))*(R_BUSINC>0); 756 ELSE IF (R_SOLEPROP=1 & SP_SOLEPROP=0) 757 THEN TBUSINC=X5704; 758 ELSE IF (R_SOLEPROP=0 & SP_SOLEPROP=1) 759 THEN TBUSINC=0; 760 END; 761 ELSE IF (TAXUNIT=2 & (R_BUSINC+SP_BUSINC>0) & (R_SOLEPROP=1 | SP_SOLEPROP=1)) THEN DO; 762 IF (R_SOLEPROP=1 & SP_SOLEPROP=1) 763 THEN TBUSINC=X5704*(SP_BUSINC/(R_BUSINC+SP_BUSINC))*(SP_BUSINC>0); 764 ELSE IF (R_SOLEPROP=0 & SP_SOLEPROP=1) 765 THEN TBUSINC=X5704; 766 ELSE IF (R_SOLEPROP=1 & SP_SOLEPROP=0) 767 THEN TBUSINC=0; 768 END; 769 ELSE TBUSINC=X5704*.5; 770 * interest, dividends, and capital gains - just split 50-50; 771 NTAXINC= MAX(0,X5706)*.5; 772 INTINC= MAX(0,X5708)*.5; 773 DIVINC= MAX(0,X5710)*.5; 774 IF X5712=-1 THEN CAPGLINC=0; 775 ELSE CAPGLINC=X5712*.5; 15 The SAS System 13:32 Friday, January 29, 2021 776 * rent, royalties, partnership and scorp income; 777 R_PARTNER_SCORP=(X4106 IN(2 3 4) | (X3113=1 & X3119 IN(1 3 6 11 12 15)) 778 | (X3213=1 & X3219 IN(1 3 6 11 12 15))); 779 SP_PARTNER_SCORP=(X4106 IN(2 3 4) | (X3114=1 & X3119 IN(1 3 6 11 12 15)) 780 | (X3214=1 & X3219 IN(1 3 6 11 12 15))); 781 IF (TAXUNIT=1 & (R_BUSINC+SP_BUSINC>0) & (R_PARTNER_SCORP=1 | SP_PARTNER_SCORP=1)) THEN DO; 782 IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=1) 783 THEN RENTINC=X5714*(R_BUSINC/(R_BUSINC+SP_BUSINC))*(R_BUSINC>0); 784 ELSE IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=0) 785 THEN RENTINC=X5714; 786 ELSE IF (R_PARTNER_SCORP=0 & SP_PARTNER_SCORP=1) 787 THEN RENTINC=0; 788 END; 789 ELSE IF (TAXUNIT=2 & (R_BUSINC+SP_BUSINC>0) & (R_PARTNER_SCORP=1 | SP_PARTNER_SCORP=1)) THEN DO; 790 IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=1) 791 THEN RENTINC=X5714*(SP_BUSINC/(R_BUSINC+SP_BUSINC))*(SP_BUSINC>0); 792 ELSE IF (R_PARTNER_SCORP=0 & SP_PARTNER_SCORP=1) 793 THEN RENTINC=X5714; 794 ELSE IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=0) 795 THEN RENTINC=0; 796 END; 797 ELSE RENTINC=X5714*.5; 798 * unemployment income, no questions about unemployed in past 12 months prior to 1998; 799 %IF &SYEAR GE 1998 %THEN %DO; 800 IF (TAXUNIT=1) THEN DO; 801 IF (X6780=1) THEN 802 UNEMPINC=MAX(0,X5716)*(X6784 IN(0 5))+MAX(0,X5716)*(X6784=1)*.5; 803 ELSE IF (X6780=5 & X6784=1) THEN UNEMPINC=0; 804 ELSE UNEMPINC=MAX(0,X5716)*.5; 805 END; 806 ELSE IF (TAXUNIT=2) THEN DO; 807 IF (X6784=1) THEN 808 UNEMPINC=MAX(0,X5716)*(X6780 IN(0 5))+MAX(0,X5716)*(X6780=1)*.5; 809 ELSE IF (X6784=5 & X6780=1) THEN UNEMPINC=0; 810 ELSE UNEMPINC=MAX(0,X5716)*.5; 811 END; 812 %END; 813 %ELSE %IF &SYEAR LE 1995 %THEN %DO; 814 IF (TAXUNIT=1) THEN DO; 815 UNEMPINC=MAX(0,X5716)*.5; 816 END; 817 ELSE IF (TAXUNIT=2) THEN DO; 818 UNEMPINC=MAX(0,X5716)*.5; 819 END; 820 %END; 821 * child support and alimony income; 822 IF (TAXUNIT=1 & X7377=2) THEN DO; 823 CHSPALINC=MAX(0,X5718)*(X7392^=2)+MAX(0,X5718)*(X7392=2)*.5; 824 END; 825 ELSE IF (TAXUNIT=2 & X7392=2) THEN DO; 826 CHSPALINC=MAX(0,X5718)*(X7377^=2)+MAX(0,X5718)*(X7377=2)*.5; 827 END; 828 ELSE CHSPALINC=MAX(0,X5718)*.5; 829 * government transfers, split 50/50; 830 AFDCINC=MAX(0,X5720)*.5; 831 * other income, split 50/50 - remove other income that is non-taxable, such as 832 scholarships/grants, inheritances/gifts/, support from family or 833 others, also remove IRA/Keogh income; 16 The SAS System 13:32 Friday, January 29, 2021 834 * special fix for 1992, removing other income coded 14, repayment of 835 debts, it appears the total amount of the debt was reported, not just 836 the interest on the debt; 837 %IF &SYEAR EQ 1992 % THEN %DO; 838 IF X5725=14 THEN DO; 839 X5724=0; 840 END; 841 IF X5727=14 THEN DO; 842 X5726=0; 843 END; 844 %END; 845 OTHINC= (X5724)*(X5725 NOT IN(3 11 12 13 28))*.5+(X5726)*(X5727 NOT IN(3 11 12 13 28))*.5; 846 * social security and pension income, adding in withdrawals from IRA/Keogh/401ks; 847 R_GSSINC=MAX(0,(X5306*%ACONV(X5307)*(X5305>=1))); 848 SP_GSSINC=MAX(0,(X5311*%ACONV(X5312)*(X5310>=1))); 849 T_GSSINC=MAX(0,((X5306*%ACONV(X5307)*(X5305>=1))+(X5311*%ACONV(X5312)*(X5310>=1)))); 850 NOSS_X5722=MAX(0,(X5722-T_GSSINC)); 851 IF (TAXUNIT=1) THEN DO; 852 IF (R_REGPEN > 0) THEN 853 PENINC=NOSS_X5722*(R_REGPEN/(R_REGPEN+SP_REGPEN))+R_WITHDRAW; 854 ELSE IF (R_REGPEN=0 & R_WITHDRAW > 0) THEN PENINC=R_WITHDRAW; 855 ELSE IF (R_REGPEN=0 & R_WITHDRAW=0 & SP_REGPEN > 0) THEN PENINC=0; 856 ELSE IF (R_REGPEN=0 & R_WITHDRAW=0 & SP_REGPEN=0) THEN PENINC=NOSS_X5722*.5; 857 END; 858 ELSE IF (TAXUNIT=2) THEN DO; 859 IF (SP_REGPEN > 0) THEN 860 PENINC=NOSS_X5722*(SP_REGPEN/(R_REGPEN+SP_REGPEN))+SP_WITHDRAW; 861 ELSE IF (SP_REGPEN=0 & SP_WITHDRAW > 0) THEN PENINC=SP_WITHDRAW; 862 ELSE IF (SP_REGPEN=0 & SP_WITHDRAW=0 & R_REGPEN > 0) THEN PENINC=0; 863 ELSE IF (SP_REGPEN=0 & SP_WITHDRAW=0 & R_REGPEN=0) THEN PENINC=NOSS_X5722*.5; 864 END; 865 GSSINC=MAX(0,R_GSSINC)*(TAXUNIT=1)+MAX(0,SP_GSSINC)*(TAXUNIT=2); 866 OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; 867 NONTAX=NTAXINC+AFDCINC; 868 RENT=MAX(0,(X602*%ACONV(X603)),(X612*%ACONV(X613)),(X619*%ACONV(X620)), 869 (X708*%ACONV(X709)))*.5; 870 END; 871 872 ELSE IF TAXUNIT=0 THEN DO; 873 %IF &SYEAR GE 2010 %THEN %DO; 874 R_SOLEPROP=(X4106 IN(2 3 4) | (X3113=1 & X3119=2) | (X3213=1 & X3219=2)); 875 SP_SOLEPROP=(X4706 IN(2 3 4) | (X3114=1 & X3119=2) | (X3214=1 & X3219=2)); 876 %END; 877 %ELSE %IF &SYEAR LE 2007 %THEN %DO; 878 R_SOLEPROP=(X4106 IN(2 3 4) | (X3113=1 & X3119=2) | (X3213=1 879 & X3219=2) | (X3313=1 & X3319=2)); 880 SP_SOLEPROP=(X4706 IN(2 3 4) | (X3114=1 & X3119=2) | 881 (X3214=1 & X3219=2) | (X3313=1 & X3319=2)); 882 %END; 883 * Split wages across primary and secondary earner for married filing jointly households; 884 IF FILESTAT^=2 THEN DO; 885 WSINCOME=MAX(0,X5702); 886 WSINCSP=0; 887 END; 888 ELSE IF FILESTAT=2 THEN DO; 889 IF ((R_LABORINC > 0 & SP_LABORINC=0) 890 | (R_LABORINC=0 & SP_LABORINC > 0) | (R_LABORINC=0 & SP_LABORINC=0)) THEN DO; 891 WSINCOME=MAX(0,X5702); 17 The SAS System 13:32 Friday, January 29, 2021 892 WSINCSP=0; 893 END; 894 ELSE IF (R_LABORINC > 0 & SP_LABORINC > 0) THEN DO; 895 WSINCOME=MAX(0,X5702)*(R_LABORINC/(R_LABORINC+SP_LABORINC)); 896 WSINCSP=MAX(0,X5702)*(SP_LABORINC/(R_LABORINC+SP_LABORINC)); 897 END; 898 END; 899 TBUSINC = X5704; 900 NTAXINC= MAX(0,X5706); 901 INTINC= MAX(0,X5708); 902 DIVINC= MAX(0,X5710); 903 IF X5712=-1 THEN CAPGLINC=0; 904 ELSE CAPGLINC=X5712; 905 RENTINC= X5714; 906 UNEMPINC = MAX(0,X5716); 907 CHSPALINC=MAX(0,X5718); 908 AFDCINC = MAX(0,X5720); 909 * Starting in 2004, IRA/Keogh/401K type income is not reported in 910 other income, instead withdrawals are reported separately during the 911 questions about the assets, so need to add the withdrawals to 912 pension income. There may be a few withdrawals still reported as 913 other income if the asset account was closed or emptied out during the 914 year prior to the survey.; 915 * also remove other income that is non-taxable, such as 916 scholarships/grants, inheritances/gifts/, support from family or 917 others; 918 * special fix for 1992, removing other income coded 14, repayment of 919 debts, it appears the total amount of the debt was report, not just 920 the interest on the debt; 921 %IF &SYEAR EQ 1992 % THEN %DO; 922 IF X5725=14 THEN DO; 923 X5724=0; 924 END; 925 IF X5727=14 THEN DO; 926 X5726=0; 927 END; 928 %END; 929 OTHINC= (X5724)*(X5725 NOT IN(3 11 12 13 28))+(X5726)*(X5727 NOT IN(3 11 12 13 28)); 930 GSSINC=MAX(0,((X5306*%ACONV(X5307)*(X5305>=1))+(X5311*%ACONV(X5312)*(X5310>=1)))); 931 IF GSSINC=0 THEN PENINC= MAX(0,X5722)+R_WITHDRAW+SP_WITHDRAW; 932 ELSE IF (GSSINC > 0) THEN PENINC=MAX(0,(X5722-GSSINC)) 933 +R_WITHDRAW+SP_WITHDRAW; 934 OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; 935 NONTAX=NTAXINC+AFDCINC; 936 RENT=MAX(0,(X602*%ACONV(X603)),(X612*%ACONV(X613)),(X619*%ACONV(X620)), 937 (X708*%ACONV(X709))); 938 END; 939 940 * AGI - note that starting in 2010, AGI questions no longer asked, so 941 using total income minus non-taxable income plus IRA/401k 942 withdrawals as a proxy. No information on adjustments to AGI; 943 AGI=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC+UNEMPINC+CHSPALINC+OTHINC+PENINC+GSSINC; 944 IF AGI=-1 THEN AGI=0; 945 AGIGE50K=(AGI>=50000); 946 AGICL=1*(AGI < 50000)+2*(50000 <= AGI < 100000)+3*(AGI >= 100000); 947 948 * For allocating itemized deductions - mortgage interest, investment 949 interest expense, property taxes, and charitable contributions - 18 The SAS System 13:32 Friday, January 29, 2021 950 between new tax units, assume tax unit with higher income assigned all 951 itemized deductions. Creating a flag here for use in computing 952 deductions later in the program. Using wages, business, 953 and pension income as income measure (all other income 954 components are split 50/50 between the new tax units).; 955 IF (TAXUNIT IN(1 2)) THEN DO; 956 R_TINCOME=R_LABORINC+R_BUSINC+R_REGPEN+R_WITHDRAW; 957 SP_TINCOME=SP_LABORINC+SP_BUSINC+SP_REGPEN+SP_WITHDRAW; 958 ITEMDEDCT_FLAG=(TAXUNIT=1 & R_TINCOME >= SP_TINCOME) 959 +(TAXUNIT=2 & SP_TINCOME > R_TINCOME); 960 END; 961 ELSE IF TAXUNIT=0 THEN ITEMDEDCT_FLAG=1; 962 963 * Set personal exemption to one for split households, divide kids 964 among split households, if one, give to both tax units, 965 if even number, split evenly between tax units, 966 if odd number, give more to higher income tax unit; 967 IF TAXUNIT IN(1 2) THEN DO; 968 PERSEXP=1; 969 IF KIDS>1 THEN DO; 970 IF (KIDSU13>0 & MOD(KIDSU13,2)=0) THEN KIDSU13=KIDSU13/2; 971 ELSE IF (KIDSU13>0 & MOD(KIDSU13,2)^=0) THEN DO; 972 KIDSU13=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU13/2,1))+ 973 (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU13/2)-.5); 976 END; 977 IF (KIDSU17>0 & MOD(KIDSU17,2)=0) THEN KIDSU17=KIDSU17/2; 978 ELSE IF (KIDSU17>0 & MOD(KIDSU17,2)^=0) THEN DO; 979 KIDSU17=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU17/2,1))+ 980 (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU17/2)-.5); 983 END; 984 IF (KIDSU18>0 & MOD(KIDSU18,2)=0) THEN KIDSU18=KIDSU18/2; 985 ELSE IF (KIDSU18>0 & MOD(KIDSU18,2)^=0) THEN DO; 986 KIDSU18=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU18/2,1))+ 987 (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU18/2)-.5); 990 END; 991 KIDS=KIDSU13+KIDSU17+KIDSU18; 992 END; 993 994 IF PERSEXP=1 & MARRIED=1 THEN FILESTAT=3; 995 ELSE IF PERSEXP=1 & KIDS=0 & MARRIED=0 THEN FILESTAT=1; 996 ELSE IF PERSEXP=1 & KIDS>0 & MARRIED=0 THEN FILESTAT=4; 997 TOTEXPT=PERSEXP+KIDS; 998 END; 999 IF FILESTAT=0 THEN PUT "MISSING FILING STATUS " Y1= X5744= 1000 X5746= TAXUNIT= MARRIED= KIDS= PERSEXP=; 1001 1002 RUN; 1003 1004 * Create tax units based on NPEU members. If there are multiple NPEU 1005 members, need to allocate income, assets, and debt across the 1006 members; 1007 DATA TEMP NPEU; 19 The SAS System 13:32 Friday, January 29, 2021 1008 SET SCF(WHERE=(TAXUNIT IN(0 1) & X7050 >=1)); 1009 file "null.txt"; 1010 TAXUNIT=2; 1011 1012 %IF &SYEAR LE 1992 OR &SYEAR GE 2007 %THEN %DO; 1013 ARRAY NPEUAGE {*} X110 X116 X122 X128 X134 X204 X210 X216 X222 X228; 1014 ARRAY LIVEWITH {*} X112 X118 X124 X130 X136 X206 X212 X218 X224 X230; 1015 ARRAY FINDEP {*} X113 X119 X125 X131 X137 X207 X213 X219 X225 X231; 1016 %END; 1017 %ELSE %IF &SYEAR GE 1995 & &SYEAR LE 2004 %THEN %DO; 1018 ARRAY NPEUAGE {*} X110 X116 X122 X128 X134 X204 X210 X216 X222; 1019 ARRAY LIVEWITH {*} X112 X118 X124 X130 X136 X206 X212 X218 X224; 1020 ARRAY FINDEP {*} X113 X119 X125 X131 X137 X207 X213 X219 X225; 1021 %END; 1022 1023 DO I=1 TO DIM(LIVEWITH); 1024 IF LIVEWITH{I} IN(1 2 3 4) & FINDEP{I} IN(2 3 4 5) THEN DO; 1025 TAXUNIT=TAXUNIT+1; 1026 TUAGE=NPEUAGE{I}; 1027 SPAGE=0; 1028 OUTPUT NPEU; 1029 END; 1030 END; 1031 1032 RUN; 1033 1034 DATA NPEU; 1035 SET NPEU; 1036 1037 ARRAY INCTYPES {*} WSINCOME WSINCSP TBUSINC INTINC NTAXINC DIVINC RENTINC 1038 UNEMPINC AFDCINC GSSINC PENINC OTHINC CAPGLINC; 1039 1040 DO I=1 TO DIM(INCTYPES); 1041 INCTYPES{I}=0; 1042 END; 1043 1044 * Allocate NPEU wage income across all NPEU members less than 70 years 1045 old. If only other type of income is Social Security, allocate 1046 amount across NPEU members age 62 or more. Otherwise, allocate total amount 1047 of nonwage income divided by the number of other types of income to 1048 each type of income equally to each NPEU member; 1049 %IF &SYEAR GE 2007 %THEN %DO; 1050 NUMU70=(0=62 & X113=5)+(X116>=62 & X119=5)+(X122>=62 & X125=5) 1056 +(X128>=62 & X131=5)+(X134>=62 & X137=5)+(X204>=62 & X207=5) 1057 +(X210>=62 & X213=5)+(X216>=62 & X219=5)+(X222>=62 & X225=5) 1058 +(X228>=62 & X231=5); 1059 %END; 1060 %ELSE %DO; 1061 NUMU70=(0=62 & X113=5)+(X116>=62 & X119=5)+(X122>=62 & X125=5) 20 The SAS System 13:32 Friday, January 29, 2021 1066 +(X128>=62 & X131=5)+(X134>=62 & X137=5)+(X204>=62 & X207=5) 1067 +(X210>=62 & X213=5)+(X216>=62 & X219=5)+(X222>=62 & X225=5); 1068 %END; 1069 NUMINCTYPES=(X6406=1)+(X6407=1)+(X6408=1)+(X6409=1)+(X6410=1)+(X6411=1) 1070 +(X6412=1)+(X6413=1)+(X6414 > 5); 1071 IF (NUMU70 > 0) THEN WSINCOME=(MAX(0,X6403)/NUMU70)*(TUAGE < 70); 1072 ELSE WSINCOME=(MAX(0,X6403)/X7050); 1073 IF (X6415 > 0 & NUMINCTYPES > 0) THEN DO; 1074 IF (NUMGE62 > 0) THEN GSSINC=(X6406=1)*((MAX(0,X6415)/(NUMINCTYPES))/NUMGE62)*(TUAGE>=62); 1075 ELSE GSSINC=(X6406=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); 1076 TBUSINC=(X6412=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); 1077 INTINC=(X6410=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); 1078 DIVINC=(X6411=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); 1079 RENTINC=(X6413=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); 1080 PENINC=(X6407=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050) 1081 +(X6408=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); 1082 AFDCINC=(X6409=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); 1083 CAPGLINC=(X6414 IN(13))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); 1084 UNEMPINC=(X6414 IN(10))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); 1085 OTHINC=(X6414 IN(11 12 15))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); 1086 END; 1087 OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; 1088 NONTAX=NTAXINC+AFDCINC; 1089 1090 * All NPEU tax units take the standard deduction, have one personal 1091 exemption, and have filing status of single; 1092 ITEMDEDCT_FLAG=0; 1093 PERSEXP=1; 1094 TOTEXPT=1; 1095 KIDS=0; 1096 KIDSU13=0; 1097 KIDSU17=0; 1098 KIDSU18=0; 1099 FILESTAT=1; 1100 1101 AGI=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC+UNEMPINC+CHSPALINC+OTHINC+PENINC+GSSINC; 1102 IF AGI=-1 THEN AGI=0; 1103 AGIGE50K=(AGI>=50000); 1104 AGICL=1*(AGI < 50000)+2*(50000 <= AGI < 100000)+3*(AGI >= 100000); 1105 RUN; 1106 1107 1108 * Add NPEU tax units; 1109 DATA SCF; 1110 SET SCF NPEU; 1111 RUN; 1112 1113 1114 DATA SCF; 1115 SET SCF; 1116 1117 ************Itemized deductions; 1118 1119 IF ITEMDEDCT_FLAG=1 THEN DO; 1120 1121 ************Mortgage interest deduction; 1122 * Convert real estate taxes on primary residence into a yearly amount; 1123 RESTAXM1=0; 21 The SAS System 13:32 Friday, January 29, 2021 1124 IF (X721 > 0) THEN DO; 1125 RESTAXM1=X721*%ACONV(X722); 1126 END; 1127 1128 1129 * Create arrays for various mortgage loan components; 1130 ARRAY TLMTH {*} TLMTHM1 TLMTHM2 TLMTHM3; 1131 ARRAY CMOPAY {*} CMOPAYM1 CMOPAYM2 CMOPAYM3; 1132 ARRAY PAYLFT {*} PAYLFTM1 PAYLFTM2 PAYLFTM3; 1133 ARRAY AMTOWE {*} AMTOWEM1 AMTOWEM2 AMTOWEM3; 1134 ARRAY AMTOWE_1 {*} AMTOWE_1M1 AMTOWE_1M2 AMTOWE_1M3; 1135 ARRAY AINTDCT {*} AINTDCTM1 AINTDCTM2 AINTDCTM3; 1136 ARRAY LNAGE {*} LNAGEM1 LNAGEM2 LNAGEM3; 1137 ARRAY CURBAL {*} CURBALM1 CURBALM2 CURBALM3; 1138 ARRAY CURBAL_1 {*} CURBAL_1M1 CURBAL_1M2 CURBAL_1M3; 1139 ARRAY CINTDCT {*} CINTDCTM1 CINTDCTM2 CINTDCTM3; 1140 ARRAY DCTDIFF {*} DCTDIFFM1 DCTDIFFM2 DCTDIFFM3; 1141 ARRAY SINTDCT {*} SINTDCTM1 SINTDCTM2 SINTDCTM3; 1142 ARRAY AVINTDCT {*} AVINTDCTM1 AVINTDCTM2 AVINTDCTM3; 1143 ARRAY NMPMT {*} X807 X907 X1007; 1144 ARRAY NMYR {*} X806 X906 X1006; 1145 ARRAY REGPAYF {*} X809 X909 X1009; 1146 ARRAY REGPAY {*} X808 X908 X1008; 1147 ARRAY TYPAYF {*} X814 X914 X1014; 1148 ARRAY TYPAY {*} X813 X913 X1013; 1149 ARRAY LNSTMN {*} X801 X901 X1001; 1150 ARRAY LNSTYR {*} X802 X902 X1002; 1151 ARRAY HBALLN {*} X811 X911 X1011; 1152 ARRAY BALLN {*} X812 X912 X1012; 1153 ARRAY HAVELN {*} X723 X830 X931; 1154 ARRAY AMTBORR {*} X804 X904 X1004; 1155 ARRAY JAMTBORR {*} J804 J904 J1004; 1156 ARRAY AMTOUT {*} X805 X905 X1005; 1157 ARRAY JAMTOUT {*} J805 J905 J1005; 1158 ARRAY INTRATE {*} X816 X916 X1016; 1159 ARRAY ONSCHED {*} X7571 X7570 X7569; 1160 1161 * Initialize some variables; 1162 DO I=1 TO DIM(TLMTH); 1163 TLMTH{I}=0; 1164 CMOPAY{I}=0; 1165 PAYLFT{I}=0; 1166 AMTOWE{I}=0; 1167 AMTOWE_1{I}=0; 1168 AINTDCT{I}=0; 1169 LNAGE{I}=0; 1170 CURBAL{I}=0; 1171 CURBAL_1{I}=0; 1172 CINTDCT{I}=0; 1173 DCTDIFF{I}=0; 1174 SINTDCT{I}=0; 1175 AVINTDCT{I}=0; 1176 END; 1177 1178 NUMORT=(X723=1)+(X830=1)+(X931=1); 1179 TOTAMTOUTM=0; 1180 TOTDEDCTM=0; 1181 GRFAMTOUTM=0; 22 The SAS System 13:32 Friday, January 29, 2021 1182 A17AMTOUTM=0; 1183 HAAMTOUTM=0; 1184 1185 DO I=1 TO DIM(NMPMT); 1186 1187 %TERMCON(NPMT=NMPMT{I},NYR=NMYR{I},NMO=TLMTH{I},PFREQ=REGPAYF{I},PMT=REGPAY{I}, 1188 TPER=TYPAYF{I}); 1189 IF (REGPAY{I} > 0) THEN DO; 1190 %MOCONV(AMT=REGPAY{I},MOAMT=CMOPAY{I},PER=REGPAYF{I},IML=NO,YEAR8=YES); 1191 END; 1192 ELSE DO; 1193 %MOCONV(AMT=TYPAY{I},MOAMT=CMOPAY{I},PER=TYPAYF{I},IML=NO,YEAR8=YES); 1194 END; 1195 IF NMYR{I} NOT IN (0 -1 -7) THEN DO; 1196 PAYLFT{I}=(TLMTH{I}-((&SYEAR-LNSTYR{I})*12)); 1197 LNAGE{I}=TLMTH{I}-PAYLFT{I}; 1198 END; 1199 ELSE DO; 1200 PAYLFT{I}=0; 1201 LNAGE{I}=0; 1202 END; 1203 END; 1204 file "null.txt"; 1205 * Need to adjust monthly payments when taxes and/or insurance is 1206 included. If there is no balloon payment, and if the mort function 1207 value is less than the reported monthly payment amount then use mort 1208 function value as monthly payment. If there is no balloon and the 1209 mort function value is greater than the reported monthly amount, use 1210 the reported monthly amount. If there is a balloon and the amount 1211 borrowed is greater than the balloon, subtract the amount of the 1212 balloon and use this adjusted amount borrowed to figure the mort 1213 function value. If there is a balloon and the amount borrowed is less than 1214 the balloon, leave the amount borrowed as is. If the amount borrowed 1215 is equal to the balloon, then the mort function value is assumed to 1216 be just the amount borrowed times the interest rate. Once we have 1217 the mort value function compare it to the reported amount using the 1218 same rules as in the no balloon case. Only need to check this for first mortgage.; 1219 IF ((X723=1) & (X810 IN(1 2 3)) & TLMTHM1 > 0 & X816 > 1220 0) THEN DO; 1221 IF (X811=1) THEN DO; 1222 %MORTPAY(AMTB=X804,MPAY=AMOPAYM1,IR=X816,TERM=TLMTHM1); 1223 IF (CMOPAYM1 > AMOPAYM1) THEN CMOPAYM1=AMOPAYM1; 1224 ELSE IF (CMOPAYM1 <= AMOPAYM1) & Y1=YY1*10+1 THEN PUT 1225 "ADJUSTED MONTHLY PAYMENT GREATER THAN COMPUTED MONTHLY PAYMENT " 1226 Y1= X804= CMOPAYM1= AMOPAYM1= X816= X810= X721= X722= RESTAXM1= 1227 TLMTHM1= X811= X812= /; 1228 END; 1229 ELSE IF (X811=2) THEN DO; 1230 IF (X804 > X812) THEN ADJBORR=X804-X812; 1231 ELSE IF (X804 < X812) THEN ADJBORR=X804; 1232 IF ADJBORR > 0 THEN %MORTPAY(AMTB=ADJBORR,MPAY=AMOPAYM1,IR=X816,TERM=TLMTHM1); 1233 IF (X804=X812) THEN AMOPAYM1=((X804)*(X816/10000))/12; 1234 IF (CMOPAYM1 > AMOPAYM1) THEN CMOPAYM1=AMOPAYM1; 1235 ELSE IF (CMOPAYM1 <= AMOPAYM1) & Y1=YY1*10+1 THEN PUT 1236 "ADJUSTED MONTHLY PAYMENT GREATER THAN COMPUTED MONTHLY PAYMENT " 1237 Y1= X804= CMOPAYM1= AMOPAYM1= X816= X810= X721= X722= RESTAXM1= 1238 TLMTHM1= X811= X812= /; 1239 END; 23 The SAS System 13:32 Friday, January 29, 2021 1240 END; 1241 1242 * First check for balloon payment, and if balloon is equal to amount 1243 borrowed, use amount borrowed times the interest rate as interest 1244 deduction, as long as this amount is not more than the annualized 1245 payment amount. If the balloon is not equal to amount borrowed or 1246 the annual payment criteria is not met, compute with non-balloon 1247 payment loans. If the term of the loan is coded -1 or -7 and there 1248 is a positive outstanding balance and interest rate, use that to 1249 compute the interest deduction. If the interest rate is equal to -1, 1250 then set interest deduction to zero.; 1251 * Computing the balance outstanding two ways, one starting from the 1252 begining of the loan (CURBAL) and one starting from what is left to 1253 be paid (AMTOWE); 1254 * NOT INCLUDING LAND CONTRACTS; 1255 DO I=1 TO DIM(HAVELN); 1256 IF (HAVELN{I}=1 & HBALLN{I}=2 & NMYR{I} NOT IN(0 -1 -7) & INTRATE{I}^=-1 & 1257 AMTBORR{I}=BALLN{I} & (CMOPAY{I}*12 <= AMTBORR{I}*(INTRATE{I}/10000))) THEN DO; 1258 SINTDCT{I}=CMOPAY{I}*12; 1259 AINTDCT{I}=SINTDCT{I}; 1260 CINTDCT{I}=SINTDCT{I}; 1261 END; 1262 ELSE IF (HAVELN{I}=1 & HBALLN{I} IN(1 2) & NMYR{I} NOT IN(0 -1 -7) 1263 & INTRATE{I}^=-1) THEN DO; 1264 IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & PAYLFT{I} > 0) THEN DO; 1265 * a fix for payments reported as yearly that appear to be monthly; 1266 * IF (CMOPAY{I} < AMTBORR{I}*.005) THEN CMOPAY{I}=MAX(REGPAY{I},TYPAY{I}); 1267 AMTOWE{I}=CMOPAY{I}*((1-1/(1+(INTRATE{I}/10000)/12)**PAYLFT{I})/ 1268 ((INTRATE{I}/10000)/12)) 1269 +(HBALLN{I}=2)*(BALLN{I}/((1+(INTRATE{I}/10000))**PAYLFT{I})); 1270 AMTOWE_1{I}=CMOPAY{I}*((1-1/(1+(INTRATE{I}/10000)/12)**(PAYLFT{I}+12))/ 1271 ((INTRATE{I}/10000)/12)) 1272 +(HBALLN{I}=2)*(BALLN{I}/((1+(INTRATE{I}/10000))**(PAYLFT{I}+12))); 1273 IF LNSTYR{I}^=&SYEAR THEN AINTDCT{I}=(CMOPAY{I}*12)-(AMTOWE_1{I}-AMTOWE{I}); 1274 ELSE IF LNSTYR{I}=&SYEAR THEN AINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); 1275 END; 1276 ELSE IF (TLMTH{I} < 0 | CMOPAY{I} < 0 | PAYLFT{I} < 0) THEN DO; 1277 AMTOWE{I}=0; 1278 AMTOWE_1{I}=0; 1279 AINTDCT{I}=0; 1280 END; 1281 IF (TLMTH{I} > 0 & AMTBORR{I} > 0 & LNAGE{I} > 0) THEN DO; 1282 CURBAL{I}=AMTBORR{I}*(((1+(INTRATE{I}/10000)/12)**TLMTH{I})- 1283 ((1+(INTRATE{I}/10000)/12)**(LNAGE{I})))/ 1284 (((1+(INTRATE{I}/10000)/12)**TLMTH{I})-1); 1285 CURBAL_1{I}=AMTBORR{I}*(((1+(INTRATE{I}/10000)/12)**TLMTH{I})- 1286 ((1+(INTRATE{I}/10000)/12)**(LNAGE{I}-12)))/ 1287 (((1+(INTRATE{I}/10000)/12)**TLMTH{I})-1); 1288 CINTDCT{I}=(CMOPAY{I}*12)-(CURBAL_1{I}-CURBAL{I}); 1289 END; 1290 ELSE IF (TLMTH{I} < 0 | AMTBORR{I} < 0 | LNAGE{I} < 0) THEN DO; 1291 CURBAL{I}=0; 1292 CURBAL_1{I}=0; 1293 CINTDCT{I}=0; 1294 END; 1295 IF (AMTOUT{I} > 0 & INTRATE{I} > 0) THEN SINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); 1296 ELSE SINTDCT{I}=0; 1297 24 The SAS System 13:32 Friday, January 29, 2021 1298 * Also fixing cases where mortgage ends or starts in the survey year. 1299 Setting interest deduction to amount outstanding for year prior 1300 to the survey times the interest rate for mortgages ending in the 1301 survey year. For cases where mortgage starts in the survey year, 1302 just use amount borrowed times the interest rate if the home was 1303 not purchased in the survey year. If the home was purchased in 1304 the survey year, set deduction to zero.; 1305 IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & PAYLFT{I}=0) THEN DO; 1306 CINTDCT{I}=CURBAL_1{I}*(INTRATE{I}/10000); 1307 AINTDCT{I}=CINTDCT{I}; 1308 END; 1309 IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & LNSTYR{I}=&SYEAR & X720=&SYEAR) THEN DO; 1310 CINTDCT{I}=0; 1311 AINTDCT{I}=0; 1312 SINTDCT{I}=0; 1313 END; 1314 ELSE IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & LNSTYR{I}=&SYEAR) THEN DO; 1315 CINTDCT{I}=SINTDCT{I}; 1316 AINTDCT{I}=SINTDCT{I}; 1317 END; 1318 1319 * Ad hoc fix for negative interest deductions. Basically sets the 1320 interest deduction equal to curball1_1 times the interest rate if 1321 curball1 and curball1_1 are positive, otherwise the interest 1322 deduction equals the reported amount outstanding times the interest 1323 rate.; 1324 IF ((AINTDCT{I} < 0 | CINTDCT{I} < 0) & CURBAL{I} > 0 & CURBAL_1{I} > 0) THEN DO; 1325 CINTDCT{I}=CURBAL_1{I}*(INTRATE{I}/10000); 1326 AINTDCT{I}=CINTDCT{I}; 1327 END; 1328 ELSE IF ((AINTDCT{I} < 0 | CINTDCT{I} < 0) & (CURBAL{I} <= 0 & 1329 CURBAL_1{I} <= 0)) THEN DO; 1330 CINTDCT{I}=SINTDCT{I}; 1331 AINTDCT{I}=SINTDCT{I}; 1332 END; 1333 1334 IF (SINTDCT{I} > 0 & CINTDCT{I} > 0) THEN 1335 DCTDIFF{I}=CINTDCT{I}-SINTDCT{I}; 1336 ELSE DCTDIFF{I}=0; 1337 1338 END; 1339 ELSE IF (HAVELN{I}=1 & (NMYR{I} IN(-1 -7) | NMPMT{I} IN(-1 -7)) 1340 & AMTOUT{I} > 0 & INTRATE{I} > 0) THEN DO; 1341 SINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); 1342 AINTDCT{I}=SINTDCT{I}; 1343 CINTDCT{I}=SINTDCT{I}; 1344 END; 1345 ELSE IF (HAVELN{I}=1 & (INTRATE{I}=-1)) THEN DO; 1346 AINTDCT{I}=0; 1347 CINTDCT{I}=0; 1348 SINTDCT{I}=0; 1349 END; 1350 1351 * Averaging across the three measures of interest deduction; 1352 IF ((CINTDCT{I} + AINTDCT{I} + SINTDCT{I}) > 0) THEN DO; 1353 AVINTDCT{I}=(CINTDCT{I}+AINTDCT{I}+SINTDCT{I})/3; 1354 END; 1355 ELSE AVINTDCT{I}=0; 25 The SAS System 13:32 Friday, January 29, 2021 1356 1357 * Constraining interest deduction amount to be no more than the reported year 1358 mortgage payment - using avintdct for comparison. Also putting in 1359 a fix for cases were the interest deduction is more than 25 1360 percent of the current amount outstanding. If this is the case 1361 then the use the simple interest deduction.; 1362 IF (HAVELN{I}=1 & AVINTDCT{I} > 0 & CMOPAY{I} > 0 1363 & (AVINTDCT{I} > CMOPAY{I}*12)) THEN DO; 1364 AVINTDCT{I}=CMOPAY{I}*12; 1365 CINTDCT{I}=AVINTDCT{I}; 1366 AINTDCT{I}=AVINTDCT{I}; 1367 SINTDCT{I}=AVINTDCT{I}; 1368 END; 1369 IF (HAVELN{I}=1 & AVINTDCT{I} > 0 & AMTOUT{I} > 0 & 1370 (AVINTDCT{I} > .25*AMTOUT{I})) THEN DO; 1371 AVINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); 1372 CINTDCT{I}=AVINTDCT{I}; 1373 AINTDCT{I}=AVINTDCT{I}; 1374 END; 1375 1376 IF (HAVELN{I}=1 & Y1=YY1*10+1 & AVINTDCT{I}=0 & NMYR{I}^=&SYEAR) 1377 THEN PUT "HAS MORTGAGE, BUT NO INTEREST DEDUCTION " 1378 Y1= HAVELN{I}= NMPMT{I}= NMYR{I}= TLMTH{I}= 1379 REGPAYF{I}= REGPAY{I}= CMOPAY{I}= TYPAY{I}= TYPAYF{I}= LNSTYR{I}= 1380 PAYLFT{I}= LNAGE{I}= AMTOUT{I}= JAMTOUT{I}= AMTOWE{I}= AMTOWE_1{I}= 1381 AINTDCT{I}= CURBAL{I}= CURBAL_1{I}= CINTDCT{I}= AVINTDCT{I}= DCTDIFF{I}= SINTDCT{I}= 1382 INTRATE{I}= AMTBORR{I}= JAMTBORR{I}= ONSCHED{I}= HBALLN{I}= BALLN{I}= /; 1383 1384 1385 * Dealing with multiple unit homes/buildings here. If R reports info 1386 on the whole building, then divide mortgage interest deduction by 1387 the number of units in the building; 1388 IF (X702=1 & X714=1 & X7135=5) THEN DO; 1389 TOTDEDCTM=TOTDEDCTM+(AVINTDCT{I}/X715)*(HAVELN{I}=1); 1390 END; 1391 ELSE TOTDEDCTM=TOTDEDCTM+AVINTDCT{I}; 1392 1393 * Total amount outstanding on loans; 1394 TOTAMTOUTM=TOTAMTOUTM+AMTOUT{I}; 1395 1396 * Need to divide mortgages up by date, pre 10/13/87 mortgages are 1397 considered grandfathered debt by IRS, and different limits apply 1398 to mortgages taken out after 12/15/2017; 1399 IF ((LNSTYR{I}=1987 & LNSTMN{I} < 10) | (LNSTYR{I} < 1987)) THEN DO; 1400 GRFAMTOUTM=GRFAMTOUTM+AMTOUT{I}; 1401 END; 1402 ELSE IF ((LNSTYR{I}=2017 & LNSTMN{I}=12) | (LNSTYR{I} > 2017)) THEN DO; 1403 A17AMTOUTM=A17AMTOUTM+AMTOUT{I}; 1404 END; 1405 ELSE IF ((LNSTYR{I}=1987 & LNSTMN {I} >= 10) | (1987 < LNSTYR{I} < 2017) | 1406 (LNSTYR{I}=2017 & LNSTMN{I}<=11)) THEN 1407 DO; 1408 HAAMTOUTM=HAAMTOUTM+AMTOUT{I}; 1409 END; 1410 END; 1411 1412 * Need to check the LOC grid for HELOCs and determine is the interest 1413 is deductible. Will need to assign HELOCs with use code of 1, 3, or 4 26 The SAS System 13:32 Friday, January 29, 2021 1414 as home acquisition debt (same as a mortgage, counts toward mortgage 1415 balance limit), while HELOCs with other use codes counted as home 1416 equity debt. Ignoring the mopup as we dont know if that LOC is 1417 secured by a home; 1418 ARRAY CMOPAYL {*} CMOPAYL1 CMOPAYL2 CMOPAYL3; 1419 ARRAY SINTDCTL {*} SINTDCTL1 SINTDCTL2 SINTDCTL3; 1420 ARRAY AQDBT {*} AQDBTL1 AQDBTL2 AQDBTL3; 1421 ARRAY AQINT {*} AQINTL1 AQINTL2 AQINTL3; 1422 ARRAY EQDBT {*} EQDBTL1 EQDBTL2 EQDBTL3; 1423 ARRAY SBYHOME {*} X1103 X1114 X1125; 1424 ARRAY DOOWE {*} X1105 X1116 X1127; 1425 ARRAY LNPURP {*} X1106 X1117 X1128; 1426 ARRAY AMTOUTL {*} X1108 X1119 X1130; 1427 ARRAY TYPAYL {*} X1109 X1120 X1131; 1428 ARRAY TYPAYLF {*} X1110 X1121 X1132; 1429 ARRAY INTRATEL {*} X1111 X1122 X1133; 1430 1431 1432 * Initialize some variables; 1433 TOTAQDBTL=0; 1434 TOTEQDBTL=0; 1435 TOTDEDCTL=0; 1436 TOTAQDEDCTL=0; 1437 TOTLOCINVEX=0; 1438 DO I=1 TO DIM(CMOPAYL); 1439 CMOPAYL{I}=0; 1440 SINTDCTL{I}=0; 1441 AQDBT{I}=0; 1442 AQINT{I}=0; 1443 EQDBT{I}=0; 1444 END; 1445 1446 IF (X1101=1) THEN DO; 1447 DO I=1 TO DIM(SBYHOME); 1448 IF (SBYHOME{I}=1 & DOOWE{I}=1) THEN DO; 1449 IF (TYPAYL{I} > 0) THEN DO; 1450 %MOCONV(AMT=TYPAYL{I},MOAMT=CMOPAYL{I},PER=TYPAYLF{I},IML=NO,YEAR8=YES); 1451 END; 1452 ELSE IF (TYPAYL{I} IN(0 -1 -2)) THEN DO; 1453 CMOPAYL{I}=0; 1454 END; 1455 IF (INTRATEL{I} > 0) THEN DO; 1456 SINTDCTL{I}=((INTRATEL{I}/10000)*AMTOUTL{I}); 1457 END; 1458 ELSE IF (INTRATEL{I} IN(0 -1)) THEN DO; 1459 SINTDCTL{I}=0; 1460 END; 1461 IF (SINTDCTL{I} > 0 & CMOPAYL{I} > 0 & SINTDCTL{I} > CMOPAYL{I}*12) THEN DO; 1462 SINTDCTL{I}=CMOPAYL{I}*12; 1463 END; 1464 IF (LNPURP{I} IN(1 3 4)) THEN DO; 1465 AQDBT{I}=AMTOUTL{I}; 1466 AQINT{I}=SINTDCTL{I}; 1467 END; 1468 ELSE IF (LNPURP{I} NOT IN(1 3 4)) THEN DO; 1469 EQDBT{I}=AMTOUTL{I}; 1470 END; 1471 TOTDEDCTL=TOTDEDCTL+SINTDCTL{I}; 27 The SAS System 13:32 Friday, January 29, 2021 1472 TOTAQDEDCTL=TOTAQDEDCTL+AQINT{I}; 1473 TOTAQDBTL=TOTAQDBTL+AQDBT{I}; 1474 TOTEQDBTL=TOTEQDBTL+EQDBT{I}; 1475 END; 1476 END; 1477 END; 1478 1479 * Using code similar to that used in mortgage grid, but also need to 1480 know what type of property and if there is income from the property.; 1481 * Dropped third column of grid for 2010 forward; 1482 * Create arrays for various other property loan components; 1483 %IF &SYEAR GE 2010 %THEN %DO; 1484 ARRAY TLMTHO {*} TLMTHO1 TLMTHO2; 1485 ARRAY CMOPAYO {*} CMOPAYO1 CMOPAYO2; 1486 ARRAY AMOPAYO {*} AMOPAYO1 AMOPAYO2; 1487 ARRAY PAYLFTO {*} PAYLFTO1 PAYLFTO2; 1488 ARRAY AMTOWEO {*} AMTOWEO1 AMTOWEO2; 1489 ARRAY AMTOWE_1O {*} AMTOWE_1O1 AMTOWE_1O2; 1490 ARRAY AINTDCTO {*} AINTDCTO1 AINTDCTO2; 1491 ARRAY LNAGEO {*} LNAGEO1 LNAGEO2; 1492 ARRAY CURBALO {*} CURBALO1 CURBALO2; 1493 ARRAY CURBAL_1O {*} CURBAL_1O1 CURBAL_1O2; 1494 ARRAY CINTDCTO {*} CINTDCTO1 CINTDCTO2; 1495 ARRAY DCTDIFFO {*} DCTDIFFO1 DCTDIFFO2; 1496 ARRAY SINTDCTO {*} SINTDCTO1 SINTDCTO2; 1497 ARRAY AVINTDCTO {*} AVINTDCTO1 AVINTDCTO2; 1498 ARRAY QUALPROP {*} QPROP1 QPROP2; 1499 ARRAY QUALPINV {*} QPINV1 QPINV2; 1500 ARRAY ADJBORRO {*} ADJBORRO1 ADJBORRO2; 1501 ARRAY NMPMTO {*} X1717 X1817; 1502 ARRAY NMYRO {*} X1716 X1816; 1503 ARRAY REGPAYFO {*} X1719 X1819; 1504 ARRAY REGPAYO {*} X1718 X1818; 1505 ARRAY TYPAYFO {*} X1724 X1824; 1506 ARRAY TYPAYO {*} X1723 X1823; 1507 ARRAY LNSTMNO {*} X1712 X1812; 1508 ARRAY LNSTYRO {*} X1713 X1813; 1509 ARRAY HBALLNO {*} X1721 X1821; 1510 ARRAY BALLNO {*} X1722 X1822; 1511 ARRAY AMTBORRO {*} X1714 X1814; 1512 ARRAY JAMTBORRO {*} J1714 J1814; 1513 ARRAY AMTOUTO {*} X1715 X1815; 1514 ARRAY JAMTOUTO {*} J1715 J1815; 1515 ARRAY HAVELNO {*} X1711 X1811; 1516 ARRAY INTRATEO {*} X1726 X1826; 1517 ARRAY ONSCHEDO {*} X7554 X7553; 1518 ARRAY HINCOMEO {*} X1729 X1829; 1519 ARRAY INCOMEO {*} X1730 X1830; 1520 ARRAY PROPTYPE {*} X1703 X1803; 1521 ARRAY PERPROP {*} X1705 X1805; 1522 ARRAY PROPVAL {*} X1706 X1806; 1523 ARRAY TAXINS {*} X1720 X1820; 1524 ARRAY PURCHYRO {*} X1708 X1808; 1525 ARRAY LIMFLAG {*} LIMFL1 LIMFL2; 1526 %END; 1527 %ELSE %IF &SYEAR LE 2007 %THEN %DO; 1528 ARRAY TLMTHO {*} TLMTHO1 TLMTHO2 TLMTHO3; 1529 ARRAY CMOPAYO {*} CMOPAYO1 CMOPAYO2 CMOPAYO3; 28 The SAS System 13:32 Friday, January 29, 2021 1530 ARRAY AMOPAYO {*} AMOPAYO1 AMOPAYO2 AMOPAYO3; 1531 ARRAY PAYLFTO {*} PAYLFTO1 PAYLFTO2 PAYLFTO3; 1532 ARRAY AMTOWEO {*} AMTOWEO1 AMTOWEO2 AMTOWEO3; 1533 ARRAY AMTOWE_1O {*} AMTOWE_1O1 AMTOWE_1O2 AMTOWE_1O3; 1534 ARRAY AINTDCTO {*} AINTDCTO1 AINTDCTO2 AINTDCTO3; 1535 ARRAY LNAGEO {*} LNAGEO1 LNAGEO2 LNAGEO3; 1536 ARRAY CURBALO {*} CURBALO1 CURBALO2 CURBALO3; 1537 ARRAY CURBAL_1O {*} CURBAL_1O1 CURBAL_1O2 CURBAL_1O3; 1538 ARRAY CINTDCTO {*} CINTDCTO1 CINTDCTO2 CINTDCTO3; 1539 ARRAY DCTDIFFO {*} DCTDIFFO1 DCTDIFFO2 DCTDIFFO3; 1540 ARRAY SINTDCTO {*} SINTDCTO1 SINTDCTO2 SINTDCTO3; 1541 ARRAY AVINTDCTO {*} AVINTDCTO1 AVINTDCTO2 AVINTDCTO3; 1542 ARRAY QUALPROP {*} QPROP1 QPROP2 QPROP3; 1543 ARRAY QUALPINV {*} QPINV1 QPINV2 QPINV3; 1544 ARRAY ADJBORRO {*} ADJBORRO1 ADJBORRO2 ADJBORRO3; 1545 ARRAY NMPMTO {*} X1717 X1817 X1917; 1546 ARRAY NMYRO {*} X1716 X1816 X1916; 1547 ARRAY REGPAYFO {*} X1719 X1819 X1919; 1548 ARRAY REGPAYO {*} X1718 X1818 X1918; 1549 ARRAY TYPAYFO {*} X1724 X1824 X1924; 1550 ARRAY TYPAYO {*} X1723 X1823 X1923; 1551 ARRAY LNSTMNO {*} X1712 X1812 X1912; 1552 ARRAY LNSTYRO {*} X1713 X1813 X1913; 1553 ARRAY HBALLNO {*} X1721 X1821 X1921; 1554 ARRAY BALLNO {*} X1722 X1822 X1922; 1555 ARRAY AMTBORRO {*} X1714 X1814 X1914; 1556 ARRAY JAMTBORRO {*} J1714 J1814 J1914; 1557 ARRAY AMTOUTO {*} X1715 X1815 X1915; 1558 ARRAY JAMTOUTO {*} J1715 J1815 J1915; 1559 ARRAY HAVELNO {*} X1711 X1811 X1911; 1560 ARRAY INTRATEO {*} X1726 X1826 X1926; 1561 ARRAY ONSCHEDO {*} X7554 X7553 X7552; 1562 ARRAY HINCOMEO {*} X1729 X1829 X1929; 1563 ARRAY INCOMEO {*} X1730 X1830 X1930; 1564 ARRAY PROPTYPE {*} X1703 X1803 X1903; 1565 ARRAY PERPROP {*} X1705 X1805 X1905; 1566 ARRAY PROPVAL {*} X1706 X1806 X1906; 1567 ARRAY TAXINS {*} X1720 X1820 X1920; 1568 ARRAY PURCHYRO {*} X1708 X1808 X1908; 1569 ARRAY LIMFLAG {*} LIMFL1 LIMFL2 LIMFL3; 1570 %END; 1571 * Initialize some variables; 1572 DO I=1 TO DIM(TLMTHO); 1573 TLMTHO{I}=0; 1574 CMOPAYO{I}=0; 1575 PAYLFTO{I}=0; 1576 AMTOWEO{I}=0; 1577 AMTOWE_1O{I}=0; 1578 AINTDCTO{I}=0; 1579 LNAGEO{I}=0; 1580 CURBALO{I}=0; 1581 CURBAL_1O{I}=0; 1582 CINTDCTO{I}=0; 1583 DCTDIFFO{I}=0; 1584 SINTDCTO{I}=0; 1585 AVINTDCTO{I}=0; 1586 QUALPROP{I}=0; 1587 QUALPINV{I}=0; 29 The SAS System 13:32 Friday, January 29, 2021 1588 ADJBORRO{I}=0; 1589 LIMFLAG{I}=0; 1590 END; 1591 1592 TOTAMTOUTO=0; 1593 TOTDEDCTO=0; 1594 QUALOTHPROP=0; 1595 QUALINVPROP=0; 1596 TOTINVPDCT=0; 1597 FMVOP=0; 1598 1599 1600 DO I=1 TO DIM(NMPMTO); 1601 1602 %TERMCON(NPMT=NMPMTO{I},NYR=NMYRO{I},NMO=TLMTHO{I},PFREQ=REGPAYFO{I},PMT=REGPAYO{I}, 1603 TPER=TYPAYFO{I}); 1604 IF (REGPAYO{I} > 0) THEN DO; 1605 %MOCONV(AMT=REGPAYO{I},MOAMT=CMOPAYO{I},PER=REGPAYFO{I},IML=NO,YEAR8=YES); 1606 END; 1607 ELSE DO; 1608 %MOCONV(AMT=TYPAYO{I},MOAMT=CMOPAYO{I},PER=TYPAYFO{I},IML=NO,YEAR8=YES); 1609 END; 1610 IF NMYRO{I} NOT IN (0 -1 -7) THEN DO; 1611 PAYLFTO{I}=(TLMTHO{I}-((&SYEAR-LNSTYRO{I})*12)); 1612 LNAGEO{I}=TLMTHO{I}-PAYLFTO{I}; 1613 END; 1614 ELSE DO; 1615 PAYLFTO{I}=0; 1616 LNAGEO{I}=0; 1617 END; 1618 END; 1619 1620 * Need to adjust monthly payments when taxes and/or insurance is 1621 included. If there is no balloon payment, and if the mort function 1622 value is less than the reported monthly payment amount then use mort 1623 function value as monthly payment. If there is no balloon and the 1624 mort function value is greater than the reported monthly amount, use 1625 the reported monthly amount. If there is a balloon and the amount 1626 borrowed is greater than the balloon, subtract the amount of the 1627 balloon and use this adjusted amount borrowed to figure the mort 1628 function value. If there is a balloon and the amount borrowed is less than 1629 the balloon, leave the amount borrowed as is. If the amount borrowed 1630 is equal to the balloon, then the mort function value is assumed to 1631 be just the amount borrowed times the interest rate. Once we have 1632 the mort value function compare it to the reported amount using the 1633 same rules as in the no balloon case.; 1634 DO I=1 TO DIM(HAVELNO); 1635 IF ((HAVELNO{I}=1) & (TAXINS{I} IN(1 2 3)) & TLMTHO{I} > 0 & 1636 INTRATEO{I} > 0) THEN DO; 1637 IF (HBALLNO{I}=1) THEN DO; 1638 %MORTPAY(AMTB=AMTBORRO{I},MPAY=AMOPAYO{I},IR=INTRATEO{I},TERM=TLMTHO{I}); 1639 IF (CMOPAYO{I} > AMOPAYO{I}) THEN CMOPAYO{I}=AMOPAYO{I}; 1640 ELSE IF (AMOPAYO{I} >= CMOPAYO{I}) & Y1=YY1*10+1 THEN PUT 1641 "ADJUSTED MONTHLY PAYMENT GREATER THAN COMPUTED MONTHLY PAYMENT " 1642 Y1= AMTBORRO{I}= CMOPAYO{I}= AMOPAYO{I}= INTRATEO{I}= TAXINS{I}= 1643 TLMTHO{I}= HBALLNO{I}= BALLNO{I}= /; 1644 END; 1645 ELSE IF (HBALLNO{I}=5) THEN DO; 30 The SAS System 13:32 Friday, January 29, 2021 1646 IF (AMTBORRO{I} > BALLNO{I}) THEN 1647 ADJBORRO{I}=(AMTBORRO{I}-BALLNO{I}); 1648 ELSE IF (AMTBORRO{I} < BALLNO{I}) THEN ADJBORRO{I}=AMTBORRO{I}; 1649 IF ADJBORRO{I} > 0 THEN 1650 %MORTPAY(AMTB=ADJBORRO{I},MPAY=AMOPAYO{I},IR=INTRATEO{I},TERM=TLMTHO{I}); 1651 IF (AMTBORRO{I}=BALLNO{I}) THEN AMOPAYO{I}=((AMTBORRO{I})*(INTRATEO{I}/10000))/12; 1652 IF (CMOPAYO{I} > AMOPAYO{I}) THEN CMOPAYO{I}=AMOPAYO{I}; 1653 ELSE IF (AMOPAYO{I} >= CMOPAYO{I}) & Y1=YY1*10+1 THEN PUT 1654 "ADJUSTED MONTHLY PAYMENT GREATER THAN COMPUTED MONTHLY PAYMENT " 1655 Y1= AMTBORRO{I}= CMOPAYO{I}= AMOPAYO{I}= INTRATEO{I}= TAXINS{I}= 1656 TLMTHO{I}= HBALLNO{I}= BALLNO{I}= /; 1657 END; 1658 END; 1659 END; 1660 1661 * First check for balloon payment, and if balloon is equal to amount 1662 borrowed, use amount borrowed times the interest rate as interest 1663 deduction, as long as this amount is not more than the annualized 1664 payment amount. If the balloon is not equal to amount borrowed or 1665 the annual payment criteria is not met, compute with non-balloon 1666 payment loans. If the term of the loan is coded -1 or -7 and there 1667 is a positive outstanding balance and interest rate, use that to 1668 compute the interest deduction. If the interest rate is equal to -1, 1669 then set interest deduction to zero.; 1670 * Computing the balance outstanding two ways, one starting from the 1671 begining of the loan (CURBAL) and one starting from what is left to 1672 be paid (AMTOWE); 1673 DO I=1 TO DIM(HAVELNO); 1674 IF (PROPTYPE{I} IN(12 13 14 21 22 25 40 49 999) & (HINCOMEO{I}=5 | 1675 INCOMEO{I}=-1)) | (PROPTYPE{I} IN(12 13 14 21 22 25 40 49 999) & 1676 HINCOMEO{I}=1 & INCOMEO{I} < (CMOPAYO{I}*12)) THEN DO; 1677 * indicator and counter of qualified properties; 1678 QUALPROP{I}=(HAVELNO{I}=1); 1679 QUALOTHPROP=QUALOTHPROP+QUALPROP{I}; 1680 FMVOP=FMVOP+PROPVAL{I}*(HAVELNO{I}=1); 1681 IF (HAVELNO{I}=1 & HBALLNO{I}=5 & NMYRO{I} NOT IN(0 -1 -7) & INTRATEO{I}^=-1 & 1682 AMTBORRO{I}=BALLNO{I} & (CMOPAYO{I}*12 <= AMTBORRO{I}*(INTRATEO{I}/10000))) 1683 THEN DO; 1684 SINTDCTO{I}=CMOPAYO{I}*12; 1685 AINTDCTO{I}=SINTDCTO{I}; 1686 CINTDCTO{I}=SINTDCTO{I}; 1687 END; 1688 ELSE IF (HAVELNO{I}=1 & HBALLNO{I} IN(1 5) & NMYRO{I} NOT IN(0 -1 -7) 1689 & INTRATEO{I}^=-1) THEN DO; 1690 IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I} > 0) THEN DO; 1691 * a fix for payments reported as yearly that appear to be monthly; 1692 * IF (CMOPAYO{I} < AMTBORRO{I}*.005) THEN CMOPAYO{I}=MAX(REGPAYO{I},TYPAYO{I}); 1693 AMTOWEO{I}=CMOPAYO{I}*((1-1/(1+(INTRATEO{I}/10000)/12)**PAYLFTO{I})/ 1694 ((INTRATEO{I}/10000)/12)) 1695 +(HBALLNO{I}=5)*(BALLNO{I}/((1+(INTRATEO{I}/10000))**PAYLFTO{I})); 1696 AMTOWE_1O{I}=CMOPAYO{I}*((1-1/(1+(INTRATEO{I}/10000)/12)**(PAYLFTO{I}+12))/ 1697 ((INTRATEO{I}/10000)/12)) 1698 +(HBALLNO{I}=5)*(BALLNO{I}/((1+(INTRATEO{I}/10000))**(PAYLFTO{I}+12))); 1699 IF LNSTYRO{I}^=&SYEAR THEN AINTDCTO{I}=(CMOPAYO{I}*12)-(AMTOWE_1O{I}-AMTOWEO{I}); 1700 ELSE IF LNSTYRO{I}=&SYEAR THEN AINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); 1701 END; 1702 ELSE IF (TLMTHO{I} < 0 | CMOPAYO{I} < 0 | PAYLFTO{I} < 0) THEN DO; 1703 AMTOWEO{I}=0; 31 The SAS System 13:32 Friday, January 29, 2021 1704 AMTOWE_1O{I}=0; 1705 AINTDCTO{I}=0; 1706 END; 1707 IF (TLMTHO{I} > 0 & AMTBORRO{I} > 0 & LNAGEO{I} > 0) THEN DO; 1708 CURBALO{I}=AMTBORRO{I}*(((1+(INTRATEO{I}/10000)/12)**TLMTHO{I})- 1709 ((1+(INTRATEO{I}/10000)/12)**(LNAGEO{I})))/ 1710 (((1+(INTRATEO{I}/10000)/12)**TLMTHO{I})-1); 1711 CURBAL_1O{I}=AMTBORRO{I}*(((1+(INTRATEO{I}/10000)/12)**TLMTHO{I})- 1712 ((1+(INTRATEO{I}/10000)/12)**(LNAGEO{I}-12)))/ 1713 (((1+(INTRATEO{I}/10000)/12)**TLMTHO{I})-1); 1714 CINTDCTO{I}=(CMOPAYO{I}*12)-(CURBAL_1O{I}-CURBALO{I}); 1715 END; 1716 ELSE IF (TLMTHO{I} < 0 | AMTBORRO{I} < 0 | LNAGEO{I} < 0) THEN DO; 1717 CURBALO{I}=0; 1718 CURBAL_1O{I}=0; 1719 CINTDCTO{I}=0; 1720 END; 1721 IF (AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN 1722 SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); 1723 ELSE SINTDCTO{I}=0; 1724 1725 * Also fixing cases where mortgage ends or starts in the survey year. 1726 Setting interest deduction to amount outstanding for year prior 1727 to the survey times the interest rate for mortgages ending in the 1728 survey year. For cases where mortgage starts in the survey year, 1729 just use amount borrowed times the interest rate if the home was 1730 not purchased in the survey year. If the home was purchased in 1731 the survey year, set deduction to zero.; 1732 IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I}=0) THEN DO; 1733 CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); 1734 AINTDCTO{I}=CINTDCTO{I}; 1735 END; 1736 IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=&SYEAR & PURCHYRO{I}=&SYEAR) THEN DO; 1737 CINTDCTO{I}=0; 1738 AINTDCTO{I}=0; 1739 SINTDCTO{I}=0; 1740 END; 1741 ELSE IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=&SYEAR) THEN DO; 1742 CINTDCTO{I}=SINTDCTO{I}; 1743 AINTDCTO{I}=SINTDCTO{I}; 1744 END; 1745 1746 1747 * Ad hoc fix for negative interest deductions. Basically sets the 1748 interest deduction equal to curball1_1 times the interest rate if 1749 curball1 and curball1_1 are positive, otherwise the interest 1750 deduction equals the reported amount outstanding times the interest 1751 rate.; 1752 IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & CURBALO{I} > 0 & 1753 CURBAL_1O{I} > 0) THEN DO; 1754 CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); 1755 AINTDCTO{I}=CINTDCTO{I}; 1756 END; 1757 ELSE IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & (CURBALO{I} <= 0 & 1758 CURBAL_1O{I} <= 0)) THEN DO; 1759 CINTDCTO{I}=SINTDCTO{I}; 1760 AINTDCTO{I}=SINTDCTO{I}; 1761 END; 32 The SAS System 13:32 Friday, January 29, 2021 1762 1763 IF (SINTDCTO{I} > 0 & CINTDCTO{I} > 0) THEN 1764 DCTDIFFO{I}=CINTDCTO{I}-SINTDCTO{I}; 1765 ELSE DCTDIFFO{I}=0; 1766 1767 END; 1768 ELSE IF (HAVELNO{I}=1 & (NMYRO{I} IN(-1 -7) & NMPMTO{I} IN(-1 -7)) 1769 & AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN DO; 1770 SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); 1771 AINTDCTO{I}=SINTDCTO{I}; 1772 CINTDCTO{I}=SINTDCTO{I}; 1773 END; 1774 ELSE IF (HAVELNO{I}=1 & (INTRATEO{I}=-1)) THEN DO; 1775 AINTDCTO{I}=0; 1776 CINTDCTO{I}=0; 1777 SINTDCTO{I}=0; 1778 END; 1779 1780 * Averaging across the three measures of interest deduction; 1781 IF ((CINTDCTO{I} + AINTDCTO{I} + SINTDCTO{I}) > 0) THEN DO; 1782 AVINTDCTO{I}=(CINTDCTO{I}+AINTDCTO{I}+SINTDCTO{I})/3; 1783 END; 1784 ELSE AVINTDCTO{I}=0; 1785 1786 * Constraining interest deduction amount to be no more than the reported year 1787 mortgage payment - using avintdedct as prefered interest 1788 deduction measure. Also putting in a fix for cases were the 1789 interest deduction is more than 25 percent of the current amount 1790 outstanding. If this is the case then the use the simple interest deduction.; 1791 IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & CMOPAYO{I} > 0 1792 & (AVINTDCTO{I} > CMOPAYO{I}*12)) THEN DO; 1793 AVINTDCTO{I}=CMOPAYO{I}*12; 1794 CINTDCTO{I}=AVINTDCTO{I}; 1795 AINTDCTO{I}=AVINTDCTO{I}; 1796 SINTDCTO{I}=AVINTDCTO{I}; 1797 END; 1798 IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & AMTOUTO{I} > 0 & 1799 (AVINTDCTO{I} > .25*AMTOUTO{I})) THEN DO; 1800 AVINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); 1801 CINTDCTO{I}=AVINTDCTO{I}; 1802 AINTDCTO{I}=AVINTDCTO{I}; 1803 END; 1804 1805 IF (HAVELNO{I}=1 & Y1=YY1*10+1 & (AVINTDCTO{I} > .25*AMTOUTO{I})) THEN PUT 1806 "DEDUCTION LARGER THAN 25% OF BALANCE OUTSTANDING " Y1= 1807 HAVELNO{I}= NMPMTO{I}= NMYRO{I}= TLMTHO{I}= REGPAYFO{I}= 1808 REGPAYO{I}= CMOPAYO{I}= TYPAYO{I}= TYPAYFO{I}= LNSTYRO{I}= 1809 PAYLFTO{I}= LNAGEO{I}= AMTOUTO{I}= JAMTOUTO{I}= AMTOWEO{I}= 1810 AMTOWE_1O{I}= AINTDCTO{I}= CURBALO{I}= CURBAL_1O{I}= 1811 CINTDCTO{I}= DCTDIFFO{I}= SINTDCTO{I}= AVINTDCTO{I}= 1812 INTRATEO{I}= AMTBORRO{I}= JAMTBORRO{I}= ONSCHEDO{I}= HBALLNO{I}= 1813 BALLNO{I}= HINCOMEO{I}= INCOMEO{I}= PROPTYPE{I}= PERPROP{I}= /; 1814 1815 1816 * Compute total deduction and total amount outstanding; 1817 TOTDEDCTO=TOTDEDCTO+((AVINTDCTO{I})*PERPROP{I}/10000)*(HAVELNO{I}=1); 1818 TOTAMTOUTO=TOTAMTOUTO+AMTOUTO{I}; 1819 33 The SAS System 13:32 Friday, January 29, 2021 1820 * Create flag for loans after 12/15/17, used in computing limits on mortgage 1821 interest deduction for home acquistion debt; 1822 LIMFLAG{I}=(LNSTYRO{I}> 2017 | (LNSTYRO{I}=2017 & LNSTMNO{I}=12)); 1823 END; 1824 END; 1825 1826 * Compute total deduction and total amount outstanding for 1827 qualified properties. Since a filer can only have 2 qualified 1828 homes (primary and secondary), need to check for a primary residence 1829 mortgage, and need to check if a hh has other homes/properties, need 1830 to decide which to count for the deduction. The basic rule assumes 1831 that hhs are rational and report the home/properties with the biggest deductions.; 1832 ADJDEDCTO=0; 1833 ADJAMTOUTO=0; 1834 ADJ17AMTOUTO=0; 1835 FMVOTHPROP=0; 1836 %IF &SYEAR GE 2010 %THEN %DO; 1837 IF (QUALOTHPROP > 0) THEN DO; 1838 IF (QUALOTHPROP=1 & QPROP1=1) THEN DO; 1839 ADJDEDCTO=AVINTDCTO1; 1840 ADJ17AMTOUTO=X1715*(LIMFL1=1); 1841 ADJAMTOUTO=X1715*(LIMFL1=0); 1842 FMVOTHPROP=X1706*(X1705/10000); 1843 END; 1844 ELSE IF (QUALOTHPROP=1 & QPROP2=1) THEN DO; 1845 ADJDEDCTO=AVINTDCTO2; 1846 ADJ17AMTOUTO=X1815*(LIMFL2=1); 1847 ADJAMTOUTO=X1815*(LIMFL2=0); 1848 FMVOTHPROP=X1806*(X1805/10000); 1849 END; 1850 ELSE IF (QUALOTHPROP=2) THEN DO; 1851 IF (AVINTDCTO1 >= AVINTDCTO2) THEN DO; 1852 ADJDEDCTO=AVINTDCTO1; 1853 ADJ17AMTOUTO=X1715*(LIMFL1=1); 1854 ADJAMTOUTO=X1715*(LIMFL1=0); 1855 FMVOTHPROP=X1706*(X1705/10000); 1856 END; 1857 ELSE IF (AVINTDCTO2 >= AVINTDCTO1) THEN DO; 1858 ADJDEDCTO=AVINTDCTO2; 1859 ADJ17AMTOUTO=X1815*(LIMFL2=1); 1860 ADJAMTOUTO=X1815*(LIMFL2=0); 1861 FMVOTHPROP=X1806*(X1805/10000); 1862 END; 1863 END; 1864 END; 1865 %END; 1866 %ELSE %IF &SYEAR LE 2007 %THEN %DO; 1867 IF (QUALOTHPROP > 0) THEN DO; 1868 IF (QUALOTHPROP=1 & QPROP1=1) THEN DO; 1869 ADJDEDCTO=AVINTDCTO1; 1870 ADJ17AMTOUTO=X1715*(LIMFL1=1); 1871 ADJAMTOUTO=X1715*(LIMFL1=0); 1872 FMVOTHPROP=X1706*(X1705/10000); 1873 END; 1874 ELSE IF (QUALOTHPROP=1 & QPROP2=1) THEN DO; 1875 ADJDEDCTO=AVINTDCTO2; 1876 ADJ17AMTOUTO=X1815*(LIMFL2=1); 1877 ADJAMTOUTO=X1815*(LIMFL2=0); 34 The SAS System 13:32 Friday, January 29, 2021 1878 FMVOTHPROP=X1806*(X1805/10000); 1879 END; 1880 ELSE IF (QUALOTHPROP=1 & QPROP3=1) THEN DO; 1881 ADJDEDCTO=AVINTDCTO3; 1882 ADJ17AMTOUTO=X1915*(LIMFL3=1); 1883 ADJAMTOUTO=X1915*(LIMFL3=0); 1884 FMVOTHPROP=X1906*(X1905/10000); 1885 END; 1886 ELSE IF (QUALOTHPROP=2) THEN DO; 1887 IF (QPROP1=1 & QPROP2=1) THEN DO; 1888 IF (AVINTDCTO1 >= AVINTDCTO2) THEN DO; 1889 ADJDEDCTO=AVINTDCTO1; 1890 ADJ17AMTOUTO=X1715*(LIMFL1=1); 1891 ADJAMTOUTO=X1715*(LIMFL1=0); 1892 FMVOTHPROP=X1706*(X1705/10000); 1893 END; 1894 ELSE IF (AVINTDCTO2 >= AVINTDCTO1) THEN DO; 1895 ADJDEDCTO=AVINTDCTO2; 1896 ADJ17AMTOUTO=X1815*(LIMFL2=1); 1897 ADJAMTOUTO=X1815*(LIMFL2=0); 1898 FMVOTHPROP=X1806*(X1805/10000); 1899 END; 1900 END; 1901 ELSE IF (QPROP1=1 & QPROP3=1) THEN DO; 1902 IF (AVINTDCTO1 >= AVINTDCTO3) THEN DO; 1903 ADJDEDCTO=AVINTDCTO1; 1904 ADJ17AMTOUTO=X1715*(LIMFL1=1); 1905 ADJAMTOUTO=X1715*(LIMFL1=0); 1906 FMVOTHPROP=X1706*(X1705/10000); 1907 END; 1908 ELSE IF (AVINTDCTO3 >= AVINTDCTO1) THEN DO; 1909 ADJDEDCTO=AVINTDCTO3; 1910 ADJ17AMTOUTO=X1915*(LIMFL3=1); 1911 ADJAMTOUTO=X1915*(LIMFL3=0); 1912 FMVOTHPROP=X1906*(X1905/10000); 1913 END; 1914 END; 1915 ELSE IF (QPROP2=1 & QPROP3=1) THEN DO; 1916 IF (AVINTDCTO2 >= AVINTDCTO3) THEN DO; 1917 ADJDEDCTO=AVINTDCTO2; 1918 ADJ17AMTOUTO=X1815*(LIMFL2=1); 1919 ADJAMTOUTO=X1815*(LIMFL2=0); 1920 FMVOTHPROP=X1806*(X1805/10000); 1921 END; 1922 ELSE IF (AVINTDCTO3 >= AVINTDCTO2) THEN DO; 1923 ADJDEDCTO=AVINTDCTO3; 1924 ADJ17AMTOUTO=X1915*(LIMFL3=1); 1925 ADJAMTOUTO=X1915*(LIMFL3=0); 1926 FMVOTHPROP=X1906*(X1905/10000); 1927 END; 1928 END; 1929 END; 1930 ELSE IF (QUALOTHPROP=3) THEN DO; 1931 IF (AVINTDCTO1 >= AVINTDCTO2 & AVINTDCTO1 >= AVINTDCTO3) THEN DO; 1932 ADJDEDCTO=AVINTDCTO1; 1933 ADJ17AMTOUTO=X1715*(LIMFL1=1); 1934 ADJAMTOUTO=X1715*(LIMFL1=0); 1935 FMVOTHPROP=X1706*(X1705/10000); 35 The SAS System 13:32 Friday, January 29, 2021 1936 END; 1937 ELSE IF (AVINTDCTO2 >= AVINTDCTO1 & AVINTDCTO2 >= AVINTDCTO3) THEN DO; 1938 ADJDEDCTO=AVINTDCTO2; 1939 ADJ17AMTOUTO=X1815*(LIMFL2=1); 1940 ADJAMTOUTO=X1815*(LIMFL2=0); 1941 FMVOTHPROP=X1806*(X1805/10000); 1942 END; 1943 ELSE IF (AVINTDCTO3 >= AVINTDCTO1 & AVINTDCTO3 >= AVINTDCTO2) THEN DO; 1944 ADJDEDCTO=AVINTDCTO3; 1945 ADJ17AMTOUTO=X1915*(LIMFL3=1); 1946 ADJAMTOUTO=X1915*(LIMFL3=0); 1947 FMVOTHPROP=X1906*(X1905/10000); 1948 END; 1949 END; 1950 END; 1951 %END; 1952 1953 * Check for cases where fair market value of home limits the amount of 1954 home equity debt hh can report. If the home acquisition debt is 1955 greater than the FMV of the home, then no home equity debt is 1956 reportable. But, if the home acquisition debt is less than the FMV 1957 of the home, then either all the home equity debt or a reduced 1958 amount of the home equity debt is reportable. In the second case, 1959 take the min of the difference between HA debt and FMV, and the HE 1960 debt amount.; 1961 1962 IF (X701=-7 & X7133=1) THEN DO; 1963 HOUSE=(X7134/10000)*X716; 1964 END; 1965 ELSE HOUSE=SUM(0,X604,X614,X623,X716,(X513+X526)); 1966 1967 IF (TOTEQDBTL > 0 & GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL+TOTEQDBTL > 1968 (HOUSE)) THEN DO; 1969 IF (FILESTAT^=3 & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) > 0) THEN DO; 1970 ADJEQDBTL=MIN((HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL)),TOTEQDBTL,100000); 1971 ADJDEDCTL=TOTDEDCTL*(ADJEQDBTL/TOTEQDBTL); 1972 END; 1973 ELSE IF (FILESTAT^=3 & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) <= 0) THEN DO; 1974 ADJEQDBTL=0; 1975 ADJDEDCTL=0; 1976 END; 1977 ELSE IF ((FILESTAT=3) & 1978 HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) > 0) THEN DO; 1979 ADJEQDBTL=MIN((HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL)),TOTEQDBTL,50000); 1980 ADJDEDCTL=TOTDEDCTL*(ADJEQDBTL/TOTEQDBTL); 1981 END; 1982 ELSE IF ((FILESTAT=3) & 1983 HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) <= 0) THEN DO; 1984 ADJEQDBTL=0; 1985 ADJDEDCTL=0; 1986 END; 1987 END; 1988 ELSE IF (TOTEQDBTL ^=. & TOTDEDCTL ^=.) THEN DO; 1989 ADJEQDBTL=TOTEQDBTL; 1990 ADJDEDCTL=TOTDEDCTL; 1991 END; 1992 1993 36 The SAS System 13:32 Friday, January 29, 2021 1994 IF (TOTEQDBTL > 0 & GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL+TOTEQDBTL > 1995 (HOUSE) & Y1=YY1*10+1) THEN PUT 1996 "MORTGAGE GREATER THAN FMV FOR PRIMARY RESIDENCE " Y1= HOUSE= 1997 GRFAMTOUTM= HAAMTOUTM= TOTAQDBTL= ADJEQDBTL= TOTEQDBTL= TOTDEDCTM= ADJDEDCTO= 1998 ADJDEDCTL= X701= X501= X503= X723= /; 1999 2000 * Now apply the IRS limits to get the adjusted deduction amount, if 2001 the limit applies, otherwise, just compute total deduction (home 2002 acquisition and home equity), worksheet changed in 2018; 2003 2004 ADJDEDCT=0; 2005 2006 %IF &SYEAR LE 2016 %THEN %DO; 2007 * case 1 - grandfathered debt, no home acquisition debt, maybe home equity; 2008 IF (GRFAMTOUTM > 0 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0) THEN 2009 DO; 2010 IF (FILESTAT^=3 & ADJEQDBTL <= 100000) THEN DO; 2011 OVERLIM=0; 2012 ADJDEDCT=TOTDEDCTM+ADJDEDCTL; 2013 END; 2014 ELSE IF (FILESTAT^=3 & ADJEQDBTL > 100000) THEN DO; 2015 OVERLIM=1; 2016 ADJDEDCT=((GRFAMTOUTM+100000)/(GRFAMTOUTM+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTL); 2017 END; 2018 ELSE IF (FILESTAT=3 & ADJEQDBTL <= 50000) THEN DO; 2019 OVERLIM=0; 2020 ADJDEDCT=TOTDEDCTM+ADJDEDCTL; 2021 END; 2022 ELSE IF (FILESTAT=3 & ADJEQDBTL > 50000) THEN DO; 2023 OVERLIM=1; 2024 ADJDEDCT=((GRFAMTOUTM+50000)/(GRFAMTOUTM+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTL); 2025 END; 2026 END; 2027 * case 2 - some grandfathered debt, some home acquisition debt, maybe 2028 home equity; 2029 ELSE IF (GRFAMTOUTM > 0 & (HAAMTOUTM > 0 | ADJAMTOUTO > 2030 0 | TOTAQDBTL > 0)) THEN DO; 2031 IF (FILESTAT^=3 & (ADJEQDBTL=0 | ADJEQDBTL <= 100000) & 2032 (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 1000000)) THEN DO; 2033 OVERLIM=0; 2034 ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; 2035 END; 2036 ELSE IF (FILESTAT^=3 & ADJEQDBTL > 100000 & 2037 (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 1000000)) THEN DO; 2038 OVERLIM=1; 2039 ADJDEDCT=((GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+100000) 2040 /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) 2041 *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); 2042 END; 2043 ELSE IF (FILESTAT^=3 & (ADJEQDBTL <= 100000) & 2044 (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 1000000)) THEN DO; 2045 OVERLIM=1; 2046 ADJDEDCT=((MAX((GRFAMTOUTM+ADJEQDBTL),(1000000+ADJEQDBTL))) 2047 /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); 2048 END; 2049 ELSE IF (FILESTAT^=3 & (ADJEQDBTL > 100000) & 2050 (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 1000000)) THEN DO; 2051 OVERLIM=1; 37 The SAS System 13:32 Friday, January 29, 2021 2052 ADJDEDCT=((MAX((GRFAMTOUTM+100000),1100000))/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) 2053 *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); 2054 END; 2055 ELSE IF (FILESTAT=3 & 2056 (ADJEQDBTL=0 | ADJEQDBTL <= 50000) & 2057 (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000)) THEN DO; 2058 OVERLIM=0; 2059 ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; 2060 END; 2061 ELSE IF (FILESTAT=3 & ADJEQDBTL > 50000 & 2062 (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000)) THEN DO; 2063 OVERLIM=1; 2064 ADJDEDCT=((GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+50000) 2065 /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) 2066 *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); 2067 END; 2068 ELSE IF (FILESTAT=3 & 2069 (ADJEQDBTL=0 | ADJEQDBTL <= 50000) & 2070 (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000)) THEN DO; 2071 OVERLIM=1; 2072 ADJDEDCT=((MAX((GRFAMTOUTM+ADJEQDBTL),(500000+ADJEQDBTL))) 2073 /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); 2074 END; 2075 ELSE IF (FILESTAT=3 & 2076 (ADJEQDBTL=0 | ADJEQDBTL > 50000) & 2077 (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000)) THEN DO; 2078 OVERLIM=1; 2079 ADJDEDCT=((MAX((GRFAMTOUTM+50000),550000))/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) 2080 *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); 2081 END; 2082 END; 2083 * case 3 - no grandfathered debt, maybe home acquisition, maybe home equity; 2084 ELSE IF (GRFAMTOUTM=0 & (HAAMTOUTM > 0 | ADJAMTOUTO > 2085 0 | TOTAQDBTL > 0 | ADJEQDBTL > 0)) THEN DO; 2086 IF (FILESTAT^=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 0 & 2087 ADJEQDBTL <= 100000) THEN DO; 2088 OVERLIM=0; 2089 ADJDEDCT=ADJDEDCTL; 2090 END; 2091 ELSE IF (FILESTAT^=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & 2092 TOTAQDBTL=0 & ADJEQDBTL > 100000) THEN DO; 2093 OVERLIM=1; 2094 ADJDEDCT=((100000)/ADJEQDBTL)*ADJDEDCTL; 2095 END; 2096 ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ 2097 TOTAQDBTL <= 1000000) & ADJEQDBTL <= 100000) THEN DO; 2098 OVERLIM=0; 2099 ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; 2100 END; 2101 ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ 2102 TOTAQDBTL <= 1000000) & ADJEQDBTL > 100000) THEN DO; 2103 OVERLIM=1; 2104 ADJDEDCT=((HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+100000)/ 2105 (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); 2106 END; 2107 ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ 2108 TOTAQDBTL > 1000000) & (ADJEQDBTL <= 100000)) THEN DO; 2109 OVERLIM=1; 38 The SAS System 13:32 Friday, January 29, 2021 2110 ADJDEDCT=((1000000+ADJEQDBTL)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) 2111 *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); 2112 END; 2113 ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ 2114 TOTAQDBTL > 1000000) & (ADJEQDBTL > 100000)) THEN DO; 2115 OVERLIM=1; 2116 ADJDEDCT=((1100000)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) 2117 *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); 2118 END; 2119 ELSE IF (FILESTAT=3 & 2120 HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 0 & 2121 ADJEQDBTL <= 50000) THEN DO; 2122 OVERLIM=0; 2123 ADJDEDCT=ADJDEDCTL; 2124 END; 2125 ELSE IF (FILESTAT=3 & 2126 HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 50000) THEN DO; 2127 OVERLIM=1; 2128 ADJDEDCT=((50000)/ADJEQDBTL)*ADJDEDCTL; 2129 END; 2130 ELSE IF (FILESTAT=3 & 2131 (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000) & ADJEQDBTL <= 50000) THEN DO; 2132 OVERLIM=0; 2133 ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; 2134 END; 2135 ELSE IF (FILESTAT=3 & 2136 (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000) & ADJEQDBTL > 50000) THEN DO; 2137 OVERLIM=1; 2138 ADJDEDCT=((HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+50000)/ 2139 (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); 2140 END; 2141 ELSE IF (FILESTAT=3 & 2142 (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000) & (ADJEQDBTL <= 50000)) THEN DO; 2143 OVERLIM=1; 2144 ADJDEDCT=((500000+ADJEQDBTL)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) 2145 *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); 2146 END; 2147 ELSE IF (FILESTAT=3 & 2148 (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000) & (ADJEQDBTL > 50000)) THEN DO; 2149 OVERLIM=1; 2150 ADJDEDCT=((550000)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) 2151 *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); 2152 END; 2153 END; 2154 %END; 2155 %ELSE %IF &SYEAR GE 2019 %THEN %DO; 2156 * Starting in 2018, only HELOCs for home acquistion are included per the new tax rules; 2157 * case 1 - grandfathered debt, maybe home acquisition debt and no post 12/15/17 home acquistion debt; 2158 IF (GRFAMTOUTM > 0 & (HAAMTOUTM >= 0 | ADJAMTOUTO >= 0 | TOTAQDBTL >= 0) 2159 & (A17AMTOUTM=0 & ADJ17AMTOUTO=0)) THEN DO; 2160 IF (FILESTAT^=3 & GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 1000000) THEN DO; 2161 OVERLIM=0; 2162 ADJDEDCT=TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL; 2163 END; 2164 ELSE IF (FILESTAT^=3 & GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 1000000) THEN DO; 2165 OVERLIM=1; 2166 ADJDEDCT=((MAX(GRFAMTOUTM,1000000))/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL))*(TOTDEDCTM+ADJDEDCTO 2166 ! +TOTAQDEDCTL); 39 The SAS System 13:32 Friday, January 29, 2021 2167 END; 2168 ELSE IF (FILESTAT=3 & GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000) THEN DO; 2169 OVERLIM=0; 2170 ADJDEDCT=TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL; 2171 END; 2172 ELSE IF (FILESTAT=3 & GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000) THEN DO; 2173 OVERLIM=1; 2174 ADJDEDCT=((MAX(GRFAMTOUTM,500000))/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL))*(TOTDEDCTM+ADJDEDCTO+ 2174 ! TOTAQDEDCTL); 2175 END; 2176 END; 2177 * case 2 - grandfathered debt and both vintages of home acquisition debt; 2178 ELSE IF (GRFAMTOUTM > 0 & (HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 2179 | A17AMTOUTM > 0 | ADJ17AMTOUTO > 0)) THEN DO; 2180 IF (FILESTAT^=3 & GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 750000) THEN DO; 2181 OVERLIM=1; 2182 IF GRFAMTOUTM > 1000000 THEN ADJDECT=((GRFAMTOUTM)/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL)) 2183 *(TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL); 2184 ELSE IF GRFAMTOUTM <=1000000 THEN 2185 ADJDEDCT=((MIN(1000000,(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL)))/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO 2185 ! +TOTAQDBTL)) 2186 *(TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL); 2187 END; 2188 ELSE IF (FILESTAT^=3 & GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+A17AMTOUTM+ADJ17AMTOUTO > 750000) THEN 2188 ! DO; 2189 OVERLIM=1; 2190 ADJDEDCT=((750000)/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+A17AMTOUTM+ADJ17AMTOUTO)) 2191 *(TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL); 2192 END; 2193 ELSE IF (FILESTAT^=3 & GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+A17AMTOUTM+ADJ17AMTOUTO <= 750000) 2193 ! THEN DO; 2194 OVERLIM=0; 2195 ADJDEDCT=TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL; 2196 END; 2197 ELSE IF (FILESTAT=3 & GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 375000) THEN DO; 2198 OVERLIM=1; 2199 IF GRFAMTOUTM > 500000 THEN ADJDECT=((GRFAMTOUTM)/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL)) 2200 *(TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL); 2201 ELSE IF GRFAMTOUTM <=500000 THEN 2202 ADJDEDCT=((MIN(500000,(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL)))/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+ 2202 ! TOTAQDBTL)) 2203 *(TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL); 2204 END; 2205 ELSE IF (FILESTAT=3 & GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+A17AMTOUTM+ADJ17AMTOUTO > 375000) THEN 2205 ! DO; 2206 OVERLIM=1; 2207 ADJDEDCT=((375000)/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+A17AMTOUTM+ADJ17AMTOUTO)) 2208 *(TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL); 2209 END; 2210 ELSE IF (FILESTAT=3 & GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+A17AMTOUTM+ADJ17AMTOUTO <= 375000) THEN 2210 ! DO; 2211 OVERLIM=0; 2212 ADJDEDCT=TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL; 2213 END; 2214 END; 2215 * case 3 - no grandfathered debt and either or both types of home acquisition debt; 2216 ELSE IF (GRFAMTOUTM=0 & (HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 2217 | A17AMTOUTM > 0 | ADJ17AMTOUTO > 0)) THEN DO; 40 The SAS System 13:32 Friday, January 29, 2021 2218 IF (FILESTAT^=3 & HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 750000 & (A17AMTOUTM+ADJ17AMTOUTO=0)) THEN DO; 2219 OVERLIM=1; 2220 ADJDEDCT=((MIN(1000000,(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL)))/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL)) 2221 *(TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL); 2222 END; 2223 ELSE IF (FILESTAT^=3 & HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+A17AMTOUTM+ADJ17AMTOUTO > 750000) THEN DO; 2224 OVERLIM=1; 2225 ADJDEDCT=((750000)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+A17AMTOUTM+ADJ17AMTOUTO)) 2226 *(TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL); 2227 END; 2228 ELSE IF (FILESTAT^=3 & HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+A17AMTOUTM+ADJ17AMTOUTO <= 750000) THEN DO; 2229 OVERLIM=0; 2230 ADJDEDCT=TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL; 2231 END; 2232 ELSE IF (FILESTAT=3 & HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 375000) THEN DO; 2233 OVERLIM=1; 2234 ADJDEDCT=((MIN(500000,(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL)))/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL)) 2235 *(TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL); 2236 END; 2237 ELSE IF (FILESTAT=3 & HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+A17AMTOUTM+ADJ17AMTOUTO > 375000) THEN DO; 2238 OVERLIM=1; 2239 ADJDEDCT=((375000)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+A17AMTOUTM+ADJ17AMTOUTO)) 2240 *(TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL); 2241 END; 2242 ELSE IF (FILESTAT=3 & HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+A17AMTOUTM+ADJ17AMTOUTO <= 375000) THEN DO; 2243 OVERLIM=0; 2244 ADJDEDCT=TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL; 2245 END; 2246 END; 2247 * case 4 - only home equity debt, not deductible; 2248 ELSE IF ADJEQDBTL > 0 THEN OVERLIM=0; 2249 %END; 2250 2251 * a few obs will come out here, but they either have -1 as the 2252 interest rate or are land contracts; 2253 IF ((GRFAMTOUTM > 0 | HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 2254 | (ADJEQDBTL*(&SYEAR LE 2016)) > 0 | A17AMTOUTM > 0 & ADJ17AMTOUTO > 0) & ADJDEDCT=0 2255 & X5744 IN(1 5 6) & Y1=YY1*10+1 & X720^=&SYEAR) THEN PUT 2256 "MORTGAGE DEDUCTION SHOULD NOT BE ZERO " Y1= X5744= X5746= 2257 GRFAMTOUTM= HAAMTOUTM= ADJAMTOUTO= TOTAQDBTL= ADJEQDBTL= A17AMTOUTM= ADJ17AMTOUTO= 2258 TOTDEDCTM= ADJDEDCTO= ADJDEDCTL= OVERLIM= QUALOTHPROP= CINTDCTM1= 2259 CINTDCTM2= CINTDCTM3= CINTDCTO1= CINTDCTO2= X702= X714= X7135= X723=/; 2260 2261 IF ((GRFAMTOUTM > 0 | HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 2262 | ADJEQDBTL > 0 | A17AMTOUTM > 0 & ADJ17AMTOUTO > 0) & OVERLIM=. 2263 & Y1=YY1*10+1) THEN PUT 2264 "OVER LIMIT INDICATOR MISSING " Y1= X5744= X5746= 2265 GRFAMTOUTM= HAAMTOUTM= ADJAMTOUTO= TOTAQDBTL= ADJEQDBTL= 2266 A17AMTOUTM= ADJ17AMTOUTO= TOTDEDCTM= ADJDEDCTO= ADJDEDCTL= OVERLIM= ADJDEDCT=/; 2267 2268 IF ADJDEDCT >= 100000 & Y1=YY1*10+1 THEN PUT 2269 "HUGE MORTGAGE INTEREST DEDUCTION " Y1= TOTDEDCTM= GRFAMTOUTM= 2270 HAAMTOUTM= TOTAQDBTL= ADJDEDCTL= ADJEQDBTL= ADJDEDCTO= ADJAMTOUTO= 2271 A17AMTOUTM= ADJ17AMTOUTO= HOUSE= QUALOTHPROP= FMVOTHPROP= X5744= X5746= ADJDEDCT= /; 2272 2273 ************Real estate taxes; 2274 * TAXSIM doesnt want local property taxes in amount of itemized 2275 deductions, listed as a separate variable; 41 The SAS System 13:32 Friday, January 29, 2021 2276 * Property tax rate, for some cases with high property tax rates R 2277 reports paying an amount on a monthly basis that appears to be a 2278 yearly payment, adjusting those cases below; 2279 PROPTXRATE=0; 2280 IF (HOUSE > 0 & RESTAXM1 > 0) THEN PROPTXRATE=(RESTAXM1/HOUSE)*100; 2281 IF (PROPTXRATE > 10 & Y1=YY1*10+1) THEN PUT "HIGH PROPERTY TAX RATE " Y1= HOUSE= 2282 RESTAXM1= X721= J721= X722= J722= X501= X601= X701= PROPTXRATE=/; 2283 IF (PROPTXRATE > 10 & X722=4) THEN RESTAXM1=X721; 2284 2285 2286 ************Investment interest expense; 2287 * Calculating deductible interest expenses. It appears from the IRS 2288 regulations that a taxpayer can only deduct allowable interest 2289 expense up to the amount of interest income received. So need to 2290 add up dividend/interest income. Capital gains not included in this 2291 amount. Investment expenses (in the SCF data) consists of interest paid on loans for 2292 investments, we have no information on other investment expenses.; 2293 2294 * To calculate investment interest expense, using the same code for 2295 LOCs, investment properties and other loans as used for mortgage interest deduction, 2296 but modifying the code to only count investment properties and 2297 loans for investments.; 2298 * LOCs - only counting loans not secured by the residence and with 2299 asset or real estate investment as loan purpose.; 2300 IF (X1101=1) THEN DO; 2301 DO I=1 TO DIM(SBYHOME); 2302 IF (SBYHOME{I}=5 & DOOWE{I}=1 & LNPURP{I} IN(76 78 79)) THEN DO; 2303 IF (TYPAYL{I} > 0) THEN DO; 2304 %MOCONV(AMT=TYPAYL{I},MOAMT=CMOPAYL{I},PER=TYPAYLF{I},IML=NO,YEAR8=YES); 2305 END; 2306 ELSE IF (TYPAYL{I} IN(0 -1 -2)) THEN DO; 2307 CMOPAYL{I}=0; 2308 END; 2309 IF (INTRATEL{I} > 0) THEN DO; 2310 SINTDCTL{I}=((INTRATEL{I}/10000)*AMTOUTL{I}); 2311 END; 2312 ELSE IF (INTRATEL{I} IN(0 -1)) THEN DO; 2313 SINTDCTL{I}=0; 2314 END; 2315 IF (SINTDCTL{I} > 0 & CMOPAYL{I} > 0 & SINTDCTL{I} > CMOPAYL{I}*12) THEN DO; 2316 SINTDCTL{I}=CMOPAYL{I}*12; 2317 END; 2318 TOTLOCINVEX=TOTLOCINVEX+SINTDCTL{I}; 2319 END; 2320 END; 2321 END; 2322 2323 * Other properties - only counting properties held for investment 2324 purposes, and hh must receive income from the property.; 2325 DO I=1 TO DIM(HAVELNO); 2326 IF (PROPTYPE{I} IN(41 42 43 44 45 46 47 48) & (INCOMEO{I} > 0)) THEN DO; 2327 * indicator and counter of qualified properties; 2328 QUALPINV{I}=(HAVELNO{I}=1); 2329 QUALINVPROP=QUALINVPROP+QUALPINV{I}; 2330 IF (HAVELNO{I}=1 & HBALLNO{I}=5 & NMYRO{I} NOT IN(0 -1 -7) & INTRATEO{I}^=-1 & 2331 AMTBORRO{I}=BALLNO{I} & (CMOPAYO{I}*12 <= AMTBORRO{I}*(INTRATEO{I}/10000))) 2332 THEN DO; 2333 SINTDCTO{I}=CMOPAYO{I}*12; 42 The SAS System 13:32 Friday, January 29, 2021 2334 AINTDCTO{I}=SINTDCTO{I}; 2335 CINTDCTO{I}=SINTDCTO{I}; 2336 END; 2337 ELSE IF (HAVELNO{I}=1 & HBALLNO{I} IN(1 5) & NMYRO{I} NOT IN(0 -1 -7) 2338 & INTRATEO{I}^=-1) THEN DO; 2339 IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I} > 0) THEN DO; 2340 * a fix for payments reported as yearly that appear to be monthly; 2341 * IF (CMOPAYO{I} < AMTBORRO{I}*.005) THEN CMOPAYO{I}=MAX(REGPAYO{I},TYPAYO{I}); 2342 AMTOWEO{I}=CMOPAYO{I}*((1-1/(1+(INTRATEO{I}/10000)/12)**PAYLFTO{I})/ 2343 ((INTRATEO{I}/10000)/12)) 2344 +(HBALLNO{I}=5)*(BALLNO{I}/((1+(INTRATEO{I}/10000))**PAYLFTO{I})); 2345 AMTOWE_1O{I}=CMOPAYO{I}*((1-1/(1+(INTRATEO{I}/10000)/12)**(PAYLFTO{I}+12))/ 2346 ((INTRATEO{I}/10000)/12)) 2347 +(HBALLNO{I}=5)*(BALLNO{I}/((1+(INTRATEO{I}/10000))**(PAYLFTO{I}+12))); 2348 IF LNSTYRO{I}^=&SYEAR THEN AINTDCTO{I}=(CMOPAYO{I}*12)-(AMTOWE_1O{I}-AMTOWEO{I}); 2349 ELSE IF LNSTYRO{I}=&SYEAR THEN AINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); 2350 END; 2351 ELSE IF (TLMTHO{I} < 0 | CMOPAYO{I} < 0 | PAYLFTO{I} < 0) THEN DO; 2352 AMTOWEO{I}=0; 2353 AMTOWE_1O{I}=0; 2354 AINTDCTO{I}=0; 2355 END; 2356 IF (TLMTHO{I} > 0 & AMTBORRO{I} > 0 & LNAGEO{I} > 0) THEN DO; 2357 CURBALO{I}=AMTBORRO{I}*(((1+(INTRATEO{I}/10000)/12)**TLMTHO{I})- 2358 ((1+(INTRATEO{I}/10000)/12)**(LNAGEO{I})))/ 2359 (((1+(INTRATEO{I}/10000)/12)**TLMTHO{I})-1); 2360 CURBAL_1O{I}=AMTBORRO{I}*(((1+(INTRATEO{I}/10000)/12)**TLMTHO{I})- 2361 ((1+(INTRATEO{I}/10000)/12)**(LNAGEO{I}-12)))/ 2362 (((1+(INTRATEO{I}/10000)/12)**TLMTHO{I})-1); 2363 CINTDCTO{I}=(CMOPAYO{I}*12)-(CURBAL_1O{I}-CURBALO{I}); 2364 END; 2365 ELSE IF (TLMTHO{I} < 0 | AMTBORRO{I} < 0 | LNAGEO{I} < 0) THEN DO; 2366 CURBALO{I}=0; 2367 CURBAL_1O{I}=0; 2368 CINTDCTO{I}=0; 2369 END; 2370 IF (AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN 2371 SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); 2372 ELSE SINTDCTO{I}=0; 2373 2374 * Also fixing cases where mortgage ends or starts in the survey year. 2375 Setting interest deduction to amount outstanding for year prior 2376 to the survey times the interest rate for mortgages ending in the 2377 survey year. For cases where mortgage starts in the survey year, 2378 just use amount borrowed times the interest rate if the home was 2379 not purchased in the survey year. If the home was purchased in 2380 the survey year, set deduction to zero.; 2381 IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I}=0) THEN DO; 2382 CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); 2383 AINTDCTO{I}=CINTDCTO{I}; 2384 END; 2385 IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=&SYEAR & PURCHYRO{I}=&SYEAR) THEN DO; 2386 CINTDCTO{I}=0; 2387 AINTDCTO{I}=0; 2388 SINTDCTO{I}=0; 2389 END; 2390 ELSE IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=&SYEAR) THEN DO; 2391 CINTDCTO{I}=SINTDCTO{I}; 43 The SAS System 13:32 Friday, January 29, 2021 2392 AINTDCTO{I}=SINTDCTO{I}; 2393 END; 2394 2395 * Ad hoc fix for negative interest deductions. Basically sets the 2396 interest deduction equal to curball1_1 times the interest rate if 2397 curball1 and curball1_1 are positive, otherwise the interest 2398 deduction equals the reported amount outstanding times the interest 2399 rate.; 2400 IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & CURBALO{I} > 0 & 2401 CURBAL_1O{I} > 0) THEN DO; 2402 CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); 2403 AINTDCTO{I}=CINTDCTO{I}; 2404 END; 2405 ELSE IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & (CURBALO{I} <= 0 & 2406 CURBAL_1O{I} <= 0)) THEN DO; 2407 CINTDCTO{I}=SINTDCTO{I}; 2408 AINTDCTO{I}=SINTDCTO{I}; 2409 END; 2410 2411 IF (SINTDCTO{I} > 0 & CINTDCTO{I} > 0) THEN 2412 DCTDIFFO{I}=CINTDCTO{I}-SINTDCTO{I}; 2413 ELSE DCTDIFFO{I}=0; 2414 2415 END; 2416 ELSE IF (HAVELNO{I}=1 & (NMYRO{I} IN(-1 -7) & NMPMTO{I} IN(-1 -7)) 2417 & AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN DO; 2418 SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); 2419 AINTDCTO{I}=SINTDCTO{I}; 2420 CINTDCTO{I}=SINTDCTO{I}; 2421 END; 2422 ELSE IF (HAVELNO{I}=1 & (INTRATEO{I}=-1)) THEN DO; 2423 AINTDCTO{I}=0; 2424 CINTDCTO{I}=0; 2425 SINTDCTO{I}=0; 2426 END; 2427 2428 * Averaging across the three measures of interest deduction; 2429 IF ((CINTDCTO{I} + AINTDCTO{I} + SINTDCTO{I}) > 0) THEN DO; 2430 AVINTDCTO{I}=(CINTDCTO{I}+AINTDCTO{I}+SINTDCTO{I})/3; 2431 END; 2432 ELSE AVINTDCTO{I}=0; 2433 2434 * Constraining interest deduction amount to be no more than the reported year 2435 mortgage payment - using avintdedct as prefered interest 2436 deduction measure. Also putting in a fix for cases were the 2437 interest deduction is more than 25 percent of the current amount 2438 outstanding. If this is the case then the use the simple interest deduction.; 2439 IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & CMOPAYO{I} > 0 2440 & (AVINTDCTO{I} > CMOPAYO{I}*12)) THEN DO; 2441 AVINTDCTO{I}=CMOPAYO{I}*12; 2442 CINTDCTO{I}=AVINTDCTO{I}; 2443 AINTDCTO{I}=AVINTDCTO{I}; 2444 SINTDCTO{I}=AVINTDCTO{I}; 2445 END; 2446 IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & AMTOUTO{I} > 0 & 2447 (AVINTDCTO{I} > .25*AMTOUTO{I})) THEN DO; 2448 AVINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); 2449 CINTDCTO{I}=AVINTDCTO{I}; 44 The SAS System 13:32 Friday, January 29, 2021 2450 AINTDCTO{I}=AVINTDCTO{I}; 2451 END; 2452 2453 2454 IF (HAVELNO{I}=1 & Y1=YY1*10+1 & (AVINTDCTO{I} > .25*AMTOUTO{I})) THEN PUT 2455 "DEDUCTION LARGER THAN 25% OF BALANCE OUTSTANDING " Y1= 2456 HAVELNO{I}= NMPMTO{I}= NMYRO{I}= TLMTHO{I}= REGPAYFO{I}= 2457 REGPAYO{I}= CMOPAYO{I}= TYPAYO{I}= TYPAYFO{I}= LNSTYRO{I}= 2458 PAYLFTO{I}= LNAGEO{I}= AMTOUTO{I}= JAMTOUTO{I}= AMTOWEO{I}= 2459 AMTOWE_1O{I}= AINTDCTO{I}= CURBALO{I}= CURBAL_1O{I}= 2460 CINTDCTO{I}= DCTDIFFO{I}= SINTDCTO{I}= AVINTDCTO{I}= 2461 INTRATEO{I}= AMTBORRO{I}= JAMTBORRO{I}= ONSCHEDO{I}= HBALLNO{I}= 2462 BALLNO{I}= HINCOMEO{I}= INCOMEO{I}= PROPTYPE{I}= PERPROP{I}= /; 2463 2464 * Compute total investment interest expense; 2465 TOTINVPDCT=TOTINVPDCT+((AVINTDCTO{I})*PERPROP{I}/10000)*(HAVELNO{I}=1); 2466 END; 2467 END; 2468 2469 2470 * Other loans - only counting loans for (non-business) investment purposes; 2471 ARRAY TLMTHI {*} TLMTHI1 TLMTHI2 TLMTHI3 TLMTHI4 TLMTHI5 TLMTHI6; 2472 ARRAY CMOPAYI {*} CMOPAYI1 CMOPAYI2 CMOPAYI3 CMOPAYI4 CMOPAYI5 CMOPAYI6; 2473 ARRAY PAYLFTI {*} PAYLFTI1 PAYLFTI2 PAYLFTI3 PAYLFTI4 PAYLFTI5 PAYLFTI6; 2474 ARRAY AMTOWEI {*} AMTOWEI1 AMTOWEI2 AMTOWEI3 AMTOWEI4 AMTOWEI5 AMTOWEI6; 2475 ARRAY AMTOWE_1I {*} AMTOWE_1I1 AMTOWE_1I2 AMTOWE_1I3 AMTOWE_1I4 AMTOWE_1I5 AMTOWE_1I6; 2476 ARRAY AINTEXPI {*} AINTEXPI1 AINTEXPI2 AINTEXPI3 AINTEXPI4 AINTEXPI5 AINTEXPI6; 2477 ARRAY LNAGEI {*} LNAGEI1 LNAGEI2 LNAGEI3 LNAGEI4 LNAGEI5 LNAGEI6; 2478 ARRAY CURBALI {*} CURBALI1 CURBALI2 CURBALI3 URBALI4 CURBALI5 CURBALI6; 2479 ARRAY CURBAL_1I {*} CURBAL_1I1 CURBAL_1I2 CURBAL_1I3 CURBAL_1I4 CURBAL_1I5 CURBAL_1I6; 2480 ARRAY CINTEXPI {*} CINTEXPI1 CINTEXPI2 CINTEXPI3 CINTEXPI4 CINTEXPI5 CINTEXPI6; 2481 ARRAY DCTDIFFI {*} DCTDIFFI1 DCTDIFFI2 DCTDIFFI3 DCTDIFFI4 DCTDIFFI5 DCTDIFFI6; 2482 ARRAY SINTEXPI {*} SINTEXPI1 SINTEXPI2 SINTEXPI3 SINTEXPI4 SINTEXPI5 SINTEXPI6; 2483 ARRAY AVINTEXPI {*} AVINTEXPI1 AVINTEXPI2 AVINTEXPI3 AVINTEXPI4 AVINTEXPI5 AVINTEXPI6; 2484 ARRAY QUALN {*} QLN1 QLN2 QLN3 QLN4 QLN5 QLN6; 2485 ARRAY NMPMTI {*} X2716 X2733 X2816 X2833 X2916 X2933; 2486 ARRAY NMYRI {*} X2717 X2734 X2817 X2834 X2917 X2934; 2487 ARRAY REGPAYFI {*} X7527 X7526 X7525 X7524 X7523 X7522; 2488 ARRAY REGPAYI {*} X2718 X2735 X2818 X2835 X2918 X2935; 2489 ARRAY TYPAYFI {*} X2720 X2737 X2820 X2837 X2920 X2937; 2490 ARRAY TYPAYI {*} X2719 X2736 X2819 X2836 X2919 X2936; 2491 ARRAY LNSTYRI {*} X2713 X2730 X2813 X2830 X2913 X2930; 2492 ARRAY AMTBORRI {*} X2714 X2731 X2814 X2831 X2914 X2931; 2493 ARRAY JAMTBORRI {*} J2714 J2731 J2814 J2831 J2914 J2931; 2494 ARRAY AMTOUTI {*} X2723 X2740 X2823 X2840 X2923 X2940; 2495 ARRAY JAMTOUTI {*} J2723 J2740 J2823 J2840 J2923 J2940; 2496 ARRAY INTRATEI {*} X2724 X2741 X2824 X2841 X2924 X2941; 2497 ARRAY ONSCHEDI {*} X7521 X7520 X7519 X7518 X7517 X7516;; 2498 ARRAY LNTYPE {*} X2710 X2727 X2810 X2827 X2910 X2927; 2499 ARRAY BUSLN {*} X6842 X6843 X6844 X6845 X6846 X6847; 2500 2501 * Initialize some variables; 2502 DO I=1 TO DIM(TLMTHI); 2503 TLMTHI{I}=0; 2504 CMOPAYI{I}=0; 2505 PAYLFTI{I}=0; 2506 AMTOWEI{I}=0; 2507 AMTOWE_1I{I}=0; 45 The SAS System 13:32 Friday, January 29, 2021 2508 AINTEXPI{I}=0; 2509 LNAGEI{I}=0; 2510 CURBALI{I}=0; 2511 CURBAL_1I{I}=0; 2512 CINTEXPI{I}=0; 2513 DCTDIFFI{I}=0; 2514 SINTEXPI{I}=0; 2515 AVINTEXPI{I}=0; 2516 QUALN{I}=0; 2517 END; 2518 2519 TOTLNINVEX=0; 2520 QUALOANINV=0; 2521 2522 DO I=1 TO DIM(NMPMTI); 2523 2524 %TERMCON(NPMT=NMPMTI{I},NYR=NMYRI{I},NMO=TLMTHI{I},PFREQ=REGPAYFI{I},PMT=REGPAYI{I}, 2525 TPER=TYPAYFI{I}); 2526 IF (REGPAYI{I} > 0) THEN DO; 2527 %MOCONV(AMT=REGPAYI{I},MOAMT=CMOPAYI{I},PER=REGPAYFI{I},IML=NO,YEAR8=YES); 2528 END; 2529 ELSE DO; 2530 %MOCONV(AMT=TYPAYI{I},MOAMT=CMOPAYI{I},PER=TYPAYFI{I},IML=NO,YEAR8=YES); 2531 END; 2532 IF NMYRI{I} NOT IN (0 -1 -7) THEN DO; 2533 PAYLFTI{I}=(TLMTHI{I}-((&SYEAR-LNSTYRI{I})*12)); 2534 LNAGEI{I}=TLMTHI{I}-PAYLFTI{I}; 2535 END; 2536 ELSE DO; 2537 PAYLFTI{I}=0; 2538 LNAGEI{I}=0; 2539 END; 2540 END; 2541 2542 DO I=1 TO MIN(6,X2709); 2543 IF (LNTYPE{I} IN(76 78 79) & BUSLN{I} IN(0 5 8)) THEN DO; 2544 * indicator and counter of qualified loans; 2545 QUALN{I}=1; 2546 QUALOANINV=QUALOANINV+QUALN{I}; 2547 IF (NMYRI{I} NOT IN(0 -1 -7) & INTRATEI{I}^=-1) THEN DO; 2548 IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & PAYLFTI{I} > 0) THEN DO; 2549 * a fix for payments reported as yearly that appear to be monthly; 2550 * IF (CMOPAYI{I} < AMTBORRI{I}*.005) THEN CMOPAYI{I}=MAX(REGPAYI{I},TYPAYI{I}); 2551 AMTOWEI{I}=CMOPAYI{I}*((1-1/(1+(INTRATEI{I}/10000)/12)**PAYLFTI{I})/ 2552 ((INTRATEI{I}/10000)/12)); 2553 AMTOWE_1I{I}=CMOPAYI{I}*((1-1/(1+(INTRATEI{I}/10000)/12)**(PAYLFTI{I}+12))/ 2554 ((INTRATEI{I}/10000)/12)); 2555 IF LNSTYRI{I}^=&SYEAR THEN AINTEXPI{I}=(CMOPAYI{I}*12)-(AMTOWE_1I{I}-AMTOWEI{I}); 2556 ELSE IF LNSTYRI{I}=&SYEAR THEN AINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); 2557 END; 2558 ELSE IF (TLMTHI{I} < 0 | CMOPAYI{I} < 0 | PAYLFTI{I} < 0) THEN DO; 2559 AMTOWEI{I}=0; 2560 AMTOWE_1I{I}=0; 2561 AINTEXPI{I}=0; 2562 END; 2563 IF (TLMTHI{I} > 0 & AMTBORRI{I} > 0 & LNAGEI{I} > 0) THEN DO; 2564 CURBALI{I}=AMTBORRI{I}*(((1+(INTRATEI{I}/10000)/12)**TLMTHI{I})- 2565 ((1+(INTRATEI{I}/10000)/12)**(LNAGEI{I})))/ 46 The SAS System 13:32 Friday, January 29, 2021 2566 (((1+(INTRATEI{I}/10000)/12)**TLMTHI{I})-1); 2567 CURBAL_1I{I}=AMTBORRI{I}*(((1+(INTRATEI{I}/10000)/12)**TLMTHI{I})- 2568 ((1+(INTRATEI{I}/10000)/12)**(LNAGEI{I}-12)))/ 2569 (((1+(INTRATEI{I}/10000)/12)**TLMTHI{I})-1); 2570 CINTEXPI{I}=(CMOPAYI{I}*12)-(CURBAL_1I{I}-CURBALI{I}); 2571 END; 2572 ELSE IF (TLMTHI{I} < 0 | AMTBORRI{I} < 0 | LNAGEI{I} < 0) THEN DO; 2573 CURBALI{I}=0; 2574 CURBAL_1I{I}=0; 2575 CINTEXPI{I}=0; 2576 END; 2577 IF (AMTOUTI{I} > 0 & INTRATEI{I} > 0) THEN 2578 SINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); 2579 ELSE SINTEXPI{I}=0; 2580 2581 * Also fixing cases where loan ends or starts in the survey year. 2582 Setting interest expense to amount outstanding for year prior 2583 to the survey times the interest rate for loans ending in the 2584 survey year. For cases where the loan starts in the survey year, 2585 set the interest expense to zero.; 2586 IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & PAYLFTI{I}=0) THEN DO; 2587 CINTEXPI{I}=CURBAL_1I{I}*(INTRATEI{I}/10000); 2588 AINTEXPI{I}=CINTEXPI{I}; 2589 END; 2590 IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & LNSTYRI{I}=&SYEAR) THEN DO; 2591 CINTEXPI{I}=0; 2592 AINTEXPI{I}=0; 2593 SINTEXPI{I}=0; 2594 END; 2595 2596 * Ad hoc fix for negative interest expenses. Basically sets the 2597 interest deduction equal to curball1_1 times the interest rate if 2598 curball1 and curball1_1 are positive, otherwise the interest 2599 expense equals the reported amount outstanding times the interest 2600 rate.; 2601 IF ((AINTEXPI{I} < 0 | CINTEXPI{I} < 0) & CURBALI{I} > 0 & 2602 CURBAL_1I{I} > 0) THEN DO; 2603 CINTEXPI{I}=CURBAL_1I{I}*(INTRATEI{I}/10000); 2604 AINTEXPI{I}=CINTEXPI{I}; 2605 END; 2606 ELSE IF ((AINTEXPI{I} < 0 | CINTEXPI{I} < 0) & (CURBALI{I} <= 0 & 2607 CURBAL_1I{I} <= 0)) THEN DO; 2608 CINTEXPI{I}=SINTEXPI{I}; 2609 AINTEXPI{I}=SINTEXPI{I}; 2610 END; 2611 2612 IF (SINTEXPI{I} > 0 & CINTEXPI{I} > 0) THEN 2613 DCTDIFFI{I}=CINTEXPI{I}-SINTEXPI{I}; 2614 ELSE DCTDIFFI{I}=0; 2615 END; 2616 * Added an extra provision here for loans that are not regualar 2617 installment loans. If the loan is a other kind of loan, just 2618 using the amount outstanding times the interest rate as 2619 interest expense.; 2620 ELSE IF (NMYRI{I} IN(-1 -7) & NMPMTI{I} IN(-1 -7) 2621 & AMTOUTI{I} > 0 & INTRATEI{I} > 0) | (CMOPAYI{I} > 0 & 2622 INTRATEI{I} > 0 & TLMTHI{I}=0 & AMTOUTI{I} > 0) THEN DO; 2623 SINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); 47 The SAS System 13:32 Friday, January 29, 2021 2624 AINTEXPI{I}=SINTEXPI{I}; 2625 CINTEXPI{I}=SINTEXPI{I}; 2626 END; 2627 ELSE IF (INTRATEI{I}=-1) THEN DO; 2628 AINTEXPI{I}=0; 2629 CINTEXPI{I}=0; 2630 SINTEXPI{I}=0; 2631 END; 2632 2633 2634 * Averaging across the three measures of interest expense; 2635 IF ((CINTEXPI{I} + AINTEXPI{I} + SINTEXPI{I}) > 0) THEN DO; 2636 AVINTEXPI{I}=(CINTEXPI{I}+AINTEXPI{I}+SINTEXPI{I})/3; 2637 END; 2638 ELSE AVINTEXPI{I}=0; 2639 2640 * Constraining interest expense amount to be no more than the reported year 2641 loan payment - using avintdedct as prefered interest expense 2642 measure. Also putting in a fix for cases were the interest 2643 deduction is more than 25 percent of the current amount 2644 outstanding. If this is the case then the use the simple interest deduction.; 2645 IF (AVINTEXPI{I} > 0 & CMOPAYI{I} > 0 2646 & (AVINTEXPI{I} > CMOPAYI{I}*12)) THEN DO; 2647 AVINTEXPI{I}=CMOPAYI{I}*12; 2648 CINTEXPI{I}=AVINTEXPI{I}; 2649 AINTEXPI{I}=AVINTEXPI{I}; 2650 SINTEXPI{I}=AVINTEXPI{I}; 2651 END; 2652 IF (AVINTEXPI{I} > 0 & AMTOUTI{I} > 0 & 2653 (AVINTEXPI{I} > .25*AMTOUTI{I})) THEN DO; 2654 AVINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); 2655 CINTEXPI{I}=AVINTEXPI{I}; 2656 AINTEXPI{I}=AVINTEXPI{I}; 2657 END; 2658 2659 IF (Y1=YY1*10+1 & (AVINTEXPI{I} > .25*AMTOUTI{I})) THEN PUT 2660 "DEDUCTION LARGER THAN 25% OF BALANCE OUTSTANDING " 2661 Y1= NMPMTI{I}= NMYRI{I}= TLMTHI{I}= 2662 REGPAYFI{I}= REGPAYI{I}= CMOPAYI{I}= TYPAYI{I}= TYPAYFI{I}= LNSTYRI{I}= 2663 PAYLFTI{I}= LNAGEI{I}= AMTOUTI{I}= JAMTOUTI{I}= AMTOWEI{I}= AMTOWE_1I{I}= 2664 AINTEXPI{I}= CURBALI{I}= CURBAL_1I{I}= CINTEXPI{I}= DCTDIFFI{I}= SINTEXPI{I}= 2665 AVINTEXPI{I}= INTRATEI{I}= AMTBORRI{I}= JAMTBORRI{I}= 2666 ONSCHEDI{I}= LNTYPE{I}= /; 2667 2668 * Compute loan investment interest expense; 2669 TOTLNINVEX=TOTLNINVEX+AVINTEXPI{I}; 2670 END; 2671 END; 2672 2673 * Total investment interest expense, if investment interest expense 2674 is greater than interest/dividend income, then expense is limited to 2675 income amount; 2676 TOTINTINC=X5708+X5710; 2677 TOTINVEX=0; 2678 TOTINVEX=TOTLOCINVEX+TOTINVPDCT+TOTLNINVEX; 2679 IF TOTINVEX > 0 THEN HINVEX=1; 2680 ELSE HINVEX=0; 2681 IF TOTINVEX > TOTINTINC & Y1=YY1*10+1 THEN PUT 48 The SAS System 13:32 Friday, January 29, 2021 2682 "TOO MUCH INVESTMENT INTEREST EXPENSES " Y1= TOTINVEX= TOTLOCINVEX= 2683 TOTINVPDCT= TOTLNINVEX= TOTINTINC=/; 2684 IF (TOTINVEX > TOTINTINC) THEN TOTINVEX=TOTINTINC; 2685 2686 2687 * In 1988, 40% of personal interest is deductible, this includes 2688 credit cards, car/other vehicle loans, other consumer loans, loans against 2689 life insurance policies, home improvement loans, and non-HELOC 2690 LOCs.; 2691 %IF &SYEAR EQ 1989 %THEN %DO; 2692 * Credit cards - although we do not have interest rate info, assume 2693 17.8% interest rate and pro-rate deduction based on the payment 2694 question (x432). If hh almost always pays balance, then deduction 2695 is balance still owed on all cards multiplied by .178/12. For 2696 sometimes pays balance, deduction is balance still owed multiplied 2697 by .178/6, for hardly ever pays balance, deduction is balance still 2698 owed multiplied by .178; 2699 * 17.8% interest rate taken from Federal Reserve Bulletin; 2700 TOTCCBAL=MAX(0,(X413+X421+X424+X427+X430)); 2701 CCPINEX=0; 2702 2703 IF (X410=1 & TOTCCBAL > 0) THEN DO; 2704 IF (X432=1) THEN CCPINEX=TOTCCBAL*(.178/12); 2705 ELSE IF (X432=3) THEN CCPINEX=TOTCCBAL*(.178/6); 2706 ELSE IF (X432=5) THEN CCPINEX=TOTCCBAL*(.178); 2707 END; 2708 2709 2710 * Car/other vehicle and home improvement loans, using code similar to 2711 other loan investment interest deduction computations; 2712 ARRAY TLMTHC {*} TLMTHC1 TLMTHC2 TLMTHC3 TLMTHC4 TLMTHC5 TLMTHC6 TLMTHC7; 2713 ARRAY CMOPAYC {*} CMOPAYC1 CMOPAYC2 CMOPAYC3 CMOPAYC4 CMOPAYC5 2714 CMOPAYC6 CMOPAYC7; 2715 ARRAY PAYLFTC {*} PAYLFTC1 PAYLFTC2 PAYLFTC3 PAYLFTC4 PAYLFTC5 2716 PAYLFTC6 PAYLFTC7; 2717 ARRAY AMTOWEC {*} AMTOWEC1 AMTOWEC2 AMTOWEC3 AMTOWEC4 AMTOWEC5 2718 AMTOWEC6 AMTOWEC7; 2719 ARRAY AMTOWE_1C {*} AMTOWE_1C1 AMTOWE_1C2 AMTOWE_1C3 AMTOWE_1C4 2720 AMTOWE_1C5 AMTOWE_1C6 AMTOWE_1C7; 2721 ARRAY AINTEXPC {*} AINTEXPC1 AINTEXPC2 AINTEXPC3 AINTEXPC4 2722 AINTEXPC5 AINTEXPC6 AINTEXPC7; 2723 ARRAY LNAGEC {*} LNAGEC1 LNAGEC2 LNAGEC3 LNAGEC4 LNAGEC5 LNAGEC6 LNAGEC7; 2724 ARRAY QUALNC {*} QUALNC1 QUALNC2 QUALNC3 QUALNC4 QUALNC5 QUALNC6 QUALNC7; 2725 ARRAY CURBALC {*} CURBALC1 CURBALC2 CURBALC3 URBALC4 CURBALC5 2726 CURBALC6 CURBALC7; 2727 ARRAY CURBAL_1C {*} CURBAL_1C1 CURBAL_1C2 CURBAL_1C3 CURBAL_1C4 2728 CURBAL_1C5 CURBAL_1C6 CURBAL_1C7; 2729 ARRAY CINTEXPC {*} CINTEXPC1 CINTEXPC2 CINTEXPC3 CINTEXPC4 CINTEXPC5 2730 CINTEXPC6 CINTEXPC7; 2731 ARRAY DCTDIFFC {*} DCTDIFFC1 DCTDIFFC2 DCTDIFFC3 DCTDIFFC4 DCTDIFFC5 2732 DCTDIFFC6 DCTDIFFC7; 2733 ARRAY SINTEXPC {*} SINTEXPC1 SINTEXPC2 SINTEXPC3 SINTEXPC4 SINTEXPC5 2734 SINTEXPC6 SINTEXPC7; 2735 ARRAY AVINTEXPC {*} AVINTEXPC1 AVINTEXPC2 AVINTEXPC3 AVINTEXPC4 2736 AVINTEXPC5 AVINTEXPC6 AVINTEXPC7; 2737 ARRAY NMPMTC {*} X1037 X1208 X2211 X2311 X2411 X2512 X2612; 2738 ARRAY NMYRC {*} X1038 X1209 X2212 X2312 X2412 X2513 X2613; 2739 ARRAY REGPAYFC {*} REGPYFC1 REGPYFC2 REGPYFC3 REGPYFC4 REGPYFC5 49 The SAS System 13:32 Friday, January 29, 2021 2740 REGPYFC6 REGPYFC7; 2741 ARRAY REGPAYC {*} X1039 X1210 X2213 X2313 X2413 X2514 X2614; 2742 ARRAY TYPAYFC {*} X1041 X1212 X2215 X2315 X2415 X2516 X2616; 2743 ARRAY TYPAYC {*} X1040 X1211 X2214 X2314 X2414 X2515 X2615; 2744 ARRAY LNSTYRC {*} X1034 X1205 X2208 X2308 X2408 X2509 X2609; 2745 ARRAY AMTBORRC {*} X1035 X1206 X2209 X2309 X2409 X2510 X2610; 2746 ARRAY JAMTBORRC {*} J1035 J1206 J2209 J2309 J2409 J2510 J2610; 2747 ARRAY AMTOUTC {*} X1044 X1215 X2218 X2318 X2418 X2519 X2619; 2748 ARRAY JAMTOUTC {*} J1044 J1215 J2218 J2318 J2418 J2519 J2619; 2749 ARRAY INTRATEC {*} X1045 X1216 X2219 X2319 X2419 X2520 X2620; 2750 ARRAY HAVELNC {*} X1032 X1203 X2206 X2306 X2406 X2507 X2607; 2751 ARRAY REGLNC {*} X1036 X1207 X2210 X2310 X2410 X2511 X2611; 2752 2753 * Initialize some variables; 2754 DO I=1 TO DIM(TLMTHC); 2755 TLMTHC{I}=0; 2756 CMOPAYC{I}=0; 2757 PAYLFTC{I}=0; 2758 AMTOWEC{I}=0; 2759 AMTOWE_1C{I}=0; 2760 AINTEXPC{I}=0; 2761 LNAGEC{I}=0; 2762 CURBALC{I}=0; 2763 CURBAL_1C{I}=0; 2764 CINTEXPC{I}=0; 2765 DCTDIFFC{I}=0; 2766 SINTEXPC{I}=0; 2767 AVINTEXPC{I}=0; 2768 QUALNC{I}=0; 2769 * frequency of regular payment question not asked for car/vehicle/HI loans, it 2770 is assumed to be monthly; 2771 REGPAYFC{I}=4; 2772 * A fix for length of loan, this variable is not in the public 2773 dataset, and missing values exist in the internal dataset - just 2774 setting the value to inap. It seems from inspecting the data that 2775 any loan with a missing value for the length has a zero interest rate.; 2776 IF NMYRC{I} < -1 THEN NMYRC{I}=0; 2777 END; 2778 2779 TOTLNPINEXC=0; 2780 QUALNPINEXC=0; 2781 2782 DO I=1 TO DIM(NMPMTC); 2783 2784 %TERMCON(NPMT=NMPMTC{I},NYR=NMYRC{I},NMO=TLMTHC{I},PFREQ=REGPAYFC{I},PMT=REGPAYC{I}, 2785 TPER=TYPAYFC{I}); 2786 IF (REGPAYC{I} > 0) THEN DO; 2787 %MOCONV(AMT=REGPAYC{I},MOAMT=CMOPAYC{I},PER=REGPAYFC{I},IML=NO,YEAR8=YES); 2788 END; 2789 ELSE DO; 2790 %MOCONV(AMT=TYPAYC{I},MOAMT=CMOPAYC{I},PER=TYPAYFC{I},IML=NO,YEAR8=YES); 2791 END; 2792 IF NMYRC{I} NOT IN (0 -1 -7) THEN DO; 2793 PAYLFTC{I}=(TLMTHC{I}-((1989-LNSTYRC{I})*12)); 2794 LNAGEC{I}=TLMTHC{I}-PAYLFTC{I}; 2795 END; 2796 ELSE DO; 2797 PAYLFTC{I}=0; 50 The SAS System 13:32 Friday, January 29, 2021 2798 LNAGEC{I}=0; 2799 END; 2800 END; 2801 2802 2803 DO I=1 TO DIM(HAVELNC); 2804 IF (HAVELNC{I}=1) THEN DO; 2805 QUALNC{I}=1; 2806 QUALNPINEXC=QUALNPINEXC+QUALNC{I}; 2807 IF (NMYRC{I} NOT IN(0 -1 -7) & INTRATEC{I}^=-1) THEN DO; 2808 IF (TLMTHC{I} > 0 & CMOPAYC{I} > 0 & PAYLFTC{I} > 0) THEN DO; 2809 * a fix for payments reported as yearly that appear to be monthly; 2810 IF (CMOPAYC{I} < AMTBORRC{I}*.005) THEN CMOPAYC{I}=MAX(REGPAYC{I},TYPAYC{I}); 2811 AMTOWEC{I}=CMOPAYC{I}*((1-1/(1+(INTRATEC{I}/10000)/12)**PAYLFTC{I})/ 2812 ((INTRATEC{I}/10000)/12)); 2813 AMTOWE_1C{I}=CMOPAYC{I}*((1-1/(1+(INTRATEC{I}/10000)/12)**(PAYLFTC{I}+12))/ 2814 ((INTRATEC{I}/10000)/12)); 2815 IF LNSTYRC{I}^=1989 THEN AINTEXPC{I}=(CMOPAYC{I}*12)-(AMTOWE_1C{I}-AMTOWEC{I}); 2816 ELSE IF LNSTYRC{I}=1989 THEN AINTEXPC{I}=AMTOUTC{I}*(INTRATEC{I}/10000); 2817 END; 2818 ELSE IF (TLMTHC{I} < 0 | CMOPAYC{I} < 0 | PAYLFTC{I} < 0) THEN DO; 2819 AMTOWEC{I}=0; 2820 AMTOWE_1C{I}=0; 2821 AINTEXPC{I}=0; 2822 END; 2823 IF (TLMTHC{I} > 0 & AMTBORRC{I} > 0 & LNAGEC{I} > 0) THEN DO; 2824 CURBALC{I}=AMTBORRC{I}*(((1+(INTRATEC{I}/10000)/12)**TLMTHC{I})- 2825 ((1+(INTRATEC{I}/10000)/12)**(LNAGEC{I})))/ 2826 (((1+(INTRATEC{I}/10000)/12)**TLMTHC{I})-1); 2827 CURBAL_1C{I}=AMTBORRC{I}*(((1+(INTRATEC{I}/10000)/12)**TLMTHC{I})- 2828 ((1+(INTRATEC{I}/10000)/12)**(LNAGEC{I}-12)))/ 2829 (((1+(INTRATEC{I}/10000)/12)**TLMTHC{I})-1); 2830 CINTEXPC{I}=(CMOPAYC{I}*12)-(CURBAL_1C{I}-CURBALC{I}); 2831 END; 2832 ELSE IF (TLMTHC{I} < 0 | AMTBORRC{I} < 0 | LNAGEC{I} < 0) THEN DO; 2833 CURBALC{I}=0; 2834 CURBAL_1C{I}=0; 2835 CINTEXPC{I}=0; 2836 END; 2837 IF (AMTOUTC{I} > 0 & INTRATEC{I} > 0) THEN 2838 SINTEXPC{I}=AMTOUTC{I}*(INTRATEC{I}/10000); 2839 ELSE SINTEXPC{I}=0; 2840 2841 * Also fixing cases where loan ends or starts in the survey year. 2842 Setting interest deduction to amount outstanding for year prior 2843 to the survey times the interest rate for loans ending in the 2844 survey year. For cases where the loan starts in the survey year, 2845 set the interest expense to zero; 2846 IF (TLMTHC{I} > 0 & CMOPAYC{I} > 0 & PAYLFTC{I}=0) THEN DO; 2847 CINTEXPC{I}=CURBAL_1C{I}*(INTRATEC{I}/10000); 2848 AINTEXPC{I}=CINTEXPC{I}; 2849 END; 2850 IF (TLMTHC{I} > 0 & CMOPAYC{I} > 0 & LNSTYRC{I}=1989) THEN DO; 2851 CINTEXPC{I}=0; 2852 AINTEXPC{I}=0; 2853 SINTEXPC{I}=0; 2854 END; 2855 51 The SAS System 13:32 Friday, January 29, 2021 2856 * Ad hoc fix for negative personal interest deduction. Basically sets the 2857 interest deduction equal to curball1_1 times the interest rate if 2858 curball1 and curball1_1 are positive, otherwise the interest 2859 deduction equals the reported amount outstanding times the interest 2860 rate.; 2861 IF ((AINTEXPC{I} < 0 | CINTEXPC{I} < 0) & CURBALC{I} > 0 & 2862 CURBAL_1C{I} > 0) THEN DO; 2863 CINTEXPC{I}=CURBAL_1C{I}*(INTRATEC{I}/10000); 2864 AINTEXPC{I}=CINTEXPC{I}; 2865 END; 2866 ELSE IF ((AINTEXPC{I} < 0 | CINTEXPC{I} < 0) & (CURBALC{I} <= 0 & 2867 CURBAL_1C{I} <= 0)) THEN DO; 2868 CINTEXPC{I}=SINTEXPC{I}; 2869 AINTEXPC{I}=SINTEXPC{I}; 2870 END; 2871 2872 IF (SINTEXPC{I} > 0 & CINTEXPC{I} > 0) THEN 2873 DCTDIFFC{I}=CINTEXPC{I}-SINTEXPC{I}; 2874 ELSE DCTDIFFC{I}=0; 2875 END; 2876 * Added an extra provision here for loans that are not regualar 2877 installment loans. If the loan is a other kind of loan, just 2878 using the amount outstanding times the interest rate as 2879 interest deduction.; 2880 ELSE IF (NMYRC{I} IN(-1 -7) & NMPMTC{I} IN(-1 -7) 2881 & AMTOUTC{I} > 0 & INTRATEC{I} > 0) | (CMOPAYC{I} > 0 & 2882 INTRATEC{I} > 0 & TLMTHC{I}=0 & AMTOUTC{I} > 0) THEN DO; 2883 SINTEXPC{I}=AMTOUTC{I}*(INTRATEC{I}/10000); 2884 AINTEXPC{I}=SINTEXPC{I}; 2885 CINTEXPC{I}=SINTEXPC{I}; 2886 END; 2887 ELSE IF (INTRATEC{I}=-1) THEN DO; 2888 AINTEXPC{I}=0; 2889 CINTEXPC{I}=0; 2890 SINTEXPC{I}=0; 2891 END; 2892 2893 2894 * Averaging across the three measures of personal interest deduction; 2895 IF ((CINTEXPC{I} + AINTEXPC{I} + SINTEXPC{I}) > 0) THEN DO; 2896 AVINTEXPC{I}=(CINTEXPC{I}+AINTEXPC{I}+SINTEXPC{I})/3; 2897 END; 2898 ELSE AVINTEXPC{I}=0; 2899 2900 * Constraining personal interest deduction amount to be no more 2901 than the reported year loan payment - using avintdedct as 2902 prefered personal interest deduction measure. Also putting in a 2903 fix for cases were the interest deduction is more than 25 2904 percent of the current amount outstanding. If this is the case 2905 then the use the simple interest deduction.; 2906 IF (AVINTEXPC{I} > 0 & CMOPAYC{I} > 0 2907 & (AVINTEXPC{I} > CMOPAYC{I}*12)) THEN DO; 2908 AVINTEXPC{I}=CMOPAYC{I}*12; 2909 CINTEXPC{I}=AVINTEXPC{I}; 2910 AINTEXPC{I}=AVINTEXPC{I}; 2911 SINTEXPC{I}=AVINTEXPC{I}; 2912 END; 2913 IF (AVINTEXPC{I} > 0 & AMTOUTC{I} > 0 & 52 The SAS System 13:32 Friday, January 29, 2021 2914 (AVINTEXPC{I} > .25*AMTOUTC{I})) THEN DO; 2915 AVINTEXPC{I}=AMTOUTC{I}*(INTRATEC{I}/10000); 2916 CINTEXPC{I}=AVINTEXPC{I}; 2917 AINTEXPC{I}=AVINTEXPC{I}; 2918 END; 2919 2920 IF (Y1=YY1*10+1 & AVINTEXPC{I} > .25*AMTOUTC{I}) THEN PUT 2921 "DEDUCTION LARGER THAN 25% OF BALANCE OUTSTANDING " 2922 Y1= NMPMTC{I}= NMYRC{I}= TLMTHC{I}= 2923 REGPAYFC{I}= REGPAYC{I}= CMOPAYC{I}= TYPAYC{I}= TYPAYFC{I}= LNSTYRC{I}= 2924 PAYLFTC{I}= LNAGEC{I}= AMTOUTC{I}= JAMTOUTC{I}= AMTOWEC{I}= AMTOWE_1C{I}= 2925 AINTEXPC{I}= CURBALC{I}= CURBAL_1C{I}= CINTEXPC{I}= DCTDIFFC{I}= SINTEXPC{I}= 2926 AVINTEXPC{I}= INTRATEC{I}= AMTBORRC{I}= JAMTBORRC{I}= /; 2927 2928 * Compute car/vehicle/HI personal interest deduction; 2929 TOTLNPINEXC=TOTLNPINEXC+AVINTEXPC{I}; 2930 END; 2931 END; 2932 2933 * Non-HELOC lines of credit, using same code as for LOCs deductible 2934 under investment interest expense; 2935 TOTLOCPINEX=0; 2936 2937 IF (X1101=1) THEN DO; 2938 DO I=1 TO DIM(SBYHOME); 2939 IF (SBYHOME{I}=5 & DOOWE{I}=1 & LNPURP{I} NOT IN(76 78 79)) THEN DO; 2940 IF (TYPAYL{I} > 0) THEN DO; 2941 %MOCONV(AMT=TYPAYL{I},MOAMT=CMOPAYL{I},PER=TYPAYLF{I},IML=NO,YEAR8=YES); 2942 END; 2943 ELSE IF (TYPAYL{I} IN(0 -1 -2)) THEN DO; 2944 CMOPAYL{I}=0; 2945 END; 2946 IF (INTRATEL{I} > 0) THEN DO; 2947 SINTDCTL{I}=((INTRATEL{I}/10000)*AMTOUTL{I}); 2948 END; 2949 ELSE IF (INTRATEL{I} IN(0 -1)) THEN DO; 2950 SINTDCTL{I}=0; 2951 END; 2952 IF (SINTDCTL{I} > 0 & CMOPAYL{I} > 0 & SINTDCTL{I} > CMOPAYL{I}*12) THEN DO; 2953 SINTDCTL{I}=CMOPAYL{I}*12; 2954 END; 2955 TOTLOCPINEX=TOTLOCPINEX+SINTDCTL{I}; 2956 END; 2957 END; 2958 END; 2959 2960 * Other consumer loans, using the code for other loans from the 2961 investment interest expense computations; 2962 QUALNPINEXI=0; 2963 TOTLNPINEXI=0; 2964 2965 DO I=1 TO MIN(6,X2709); 2966 IF (LNTYPE{I} NOT IN(76 78 79)) THEN DO; 2967 * indicator and counter of qualified loans; 2968 QUALN{I}=1; 2969 QUALNPINEXI=QUALNPINEXI+QUALN{I}; 2970 IF (NMYRI{I} NOT IN(0 -1 -7) & INTRATEI{I}^=-1) THEN DO; 2971 IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & PAYLFTI{I} > 0) THEN DO; 53 The SAS System 13:32 Friday, January 29, 2021 2972 * a fix for payments reported as yearly that appear to be monthly; 2973 IF (CMOPAYI{I} < AMTBORRI{I}*.005) THEN CMOPAYI{I}=MAX(REGPAYI{I},TYPAYI{I}); 2974 AMTOWEI{I}=CMOPAYI{I}*((1-1/(1+(INTRATEI{I}/10000)/12)**PAYLFTI{I})/ 2975 ((INTRATEI{I}/10000)/12)); 2976 AMTOWE_1I{I}=CMOPAYI{I}*((1-1/(1+(INTRATEI{I}/10000)/12)**(PAYLFTI{I}+12))/ 2977 ((INTRATEI{I}/10000)/12)); 2978 IF LNSTYRI{I}^=1989 THEN AINTEXPI{I}=(CMOPAYI{I}*12)-(AMTOWE_1I{I}-AMTOWEI{I}); 2979 ELSE IF LNSTYRI{I}=1989 THEN AINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); 2980 END; 2981 ELSE IF (TLMTHI{I} < 0 | CMOPAYI{I} < 0 | PAYLFTI{I} < 0) THEN DO; 2982 AMTOWEI{I}=0; 2983 AMTOWE_1I{I}=0; 2984 AINTEXPI{I}=0; 2985 END; 2986 IF (TLMTHI{I} > 0 & AMTBORRI{I} > 0 & LNAGEI{I} > 0) THEN DO; 2987 CURBALI{I}=AMTBORRI{I}*(((1+(INTRATEI{I}/10000)/12)**TLMTHI{I})- 2988 ((1+(INTRATEI{I}/10000)/12)**(LNAGEI{I})))/ 2989 (((1+(INTRATEI{I}/10000)/12)**TLMTHI{I})-1); 2990 CURBAL_1I{I}=AMTBORRI{I}*(((1+(INTRATEI{I}/10000)/12)**TLMTHI{I})- 2991 ((1+(INTRATEI{I}/10000)/12)**(LNAGEI{I}-12)))/ 2992 (((1+(INTRATEI{I}/10000)/12)**TLMTHI{I})-1); 2993 CINTEXPI{I}=(CMOPAYI{I}*12)-(CURBAL_1I{I}-CURBALI{I}); 2994 END; 2995 ELSE IF (TLMTHI{I} < 0 | AMTBORRI{I} < 0 | LNAGEI{I} < 0) THEN DO; 2996 CURBALI{I}=0; 2997 CURBAL_1I{I}=0; 2998 CINTEXPI{I}=0; 2999 END; 3000 IF (AMTOUTI{I} > 0 & INTRATEI{I} > 0) THEN 3001 SINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); 3002 ELSE SINTEXPI{I}=0; 3003 3004 * Also fixing cases where loan ends or starts in the survey year. 3005 Setting interest deduction to amount outstanding for year prior 3006 to the survey times the interest rate for loans ending in the 3007 survey year. For cases where the loan starts in the survey year, 3008 set the interest expense to zero; 3009 IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & PAYLFTI{I}=0) THEN DO; 3010 CINTEXPI{I}=CURBAL_1I{I}*(INTRATEI{I}/10000); 3011 AINTEXPI{I}=CINTEXPI{I}; 3012 END; 3013 IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & LNSTYRI{I}=1989) THEN DO; 3014 CINTEXPI{I}=0; 3015 AINTEXPI{I}=0; 3016 SINTEXPI{I}=0; 3017 END; 3018 3019 * Ad hoc fix for negative personal interest deduction. Basically sets the 3020 interest deduction equal to curball1_1 times the interest rate if 3021 curball1 and curball1_1 are positive, otherwise the interest 3022 deduction equals the reported amount outstanding times the interest 3023 rate.; 3024 IF ((AINTEXPI{I} < 0 | CINTEXPI{I} < 0) & CURBALI{I} > 0 & 3025 CURBAL_1I{I} > 0) THEN DO; 3026 CINTEXPI{I}=CURBAL_1I{I}*(INTRATEI{I}/10000); 3027 AINTEXPI{I}=CINTEXPI{I}; 3028 END; 3029 ELSE IF ((AINTEXPI{I} < 0 | CINTEXPI{I} < 0) & (CURBALI{I} <= 0 & 54 The SAS System 13:32 Friday, January 29, 2021 3030 CURBAL_1I{I} <= 0)) THEN DO; 3031 CINTEXPI{I}=SINTEXPI{I}; 3032 AINTEXPI{I}=SINTEXPI{I}; 3033 END; 3034 3035 IF (SINTEXPI{I} > 0 & CINTEXPI{I} > 0) THEN 3036 DCTDIFFI{I}=CINTEXPI{I}-SINTEXPI{I}; 3037 ELSE DCTDIFFI{I}=0; 3038 END; 3039 * Added an extra provision here for loans that are not regualar 3040 installment loans. If the loan is a other kind of loan, just 3041 using the amount outstanding times the interest rate as 3042 interest deduction.; 3043 ELSE IF (NMYRI{I} IN(-1 -7) & NMPMTI{I} IN(-1 -7) 3044 & AMTOUTI{I} > 0 & INTRATEI{I} > 0) | (CMOPAYI{I} > 0 & 3045 INTRATEI{I} > 0 & TLMTHI{I}=0 & AMTOUTI{I} > 0) THEN DO; 3046 SINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); 3047 AINTEXPI{I}=SINTEXPI{I}; 3048 CINTEXPI{I}=SINTEXPI{I}; 3049 END; 3050 ELSE IF (INTRATEI{I}=-1) THEN DO; 3051 AINTEXPI{I}=0; 3052 CINTEXPI{I}=0; 3053 SINTEXPI{I}=0; 3054 END; 3055 3056 3057 * Averaging across the three measures of personal interest deduction; 3058 IF ((CINTEXPI{I} + AINTEXPI{I} + SINTEXPI{I}) > 0) THEN DO; 3059 AVINTEXPI{I}=(CINTEXPI{I}+AINTEXPI{I}+SINTEXPI{I})/3; 3060 END; 3061 ELSE AVINTEXPI{I}=0; 3062 3063 * Constraining personal interest deduction amount to be no more 3064 than the reported year loan payment - using avintdedct as 3065 prefered personal interest deduction measure. Also putting in a 3066 fix for cases were the interest deduction is more than 25 3067 percent of the current amount outstanding. If this is the case 3068 then the use the simple interest deduction.; 3069 IF (AVINTEXPI{I} > 0 & CMOPAYI{I} > 0 3070 & (AVINTEXPI{I} > CMOPAYI{I}*12)) THEN DO; 3071 AVINTEXPI{I}=CMOPAYI{I}*12; 3072 CINTEXPI{I}=AVINTEXPI{I}; 3073 AINTEXPI{I}=AVINTEXPI{I}; 3074 SINTEXPI{I}=AVINTEXPI{I}; 3075 END; 3076 IF (AVINTEXPI{I} > 0 & AMTOUTI{I} > 0 & 3077 (AVINTEXPI{I} > .25*AMTOUTI{I})) THEN DO; 3078 AVINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); 3079 CINTEXPI{I}=AVINTEXPI{I}; 3080 AINTEXPI{I}=AVINTEXPI{I}; 3081 END; 3082 3083 IF (Y1=YY1*10+1 & (AVINTEXPI{I} > .25*AMTOUTI{I})) THEN PUT 3084 "DEDUCTION LARGER THAN 25% OF BALANCE OUTSTANDING " 3085 Y1= NMPMTI{I}= NMYRI{I}= TLMTHI{I}= 3086 REGPAYFI{I}= REGPAYI{I}= CMOPAYI{I}= TYPAYI{I}= TYPAYFI{I}= LNSTYRI{I}= 3087 PAYLFTI{I}= LNAGEI{I}= AMTOUTI{I}= JAMTOUTI{I}= AMTOWEI{I}= AMTOWE_1I{I}= 55 The SAS System 13:32 Friday, January 29, 2021 3088 AINTEXPI{I}= CURBALI{I}= CURBAL_1I{I}= CINTEXPI{I}= DCTDIFFI{I}= SINTEXPI{I}= 3089 AVINTEXPI{I}= INTRATEI{I}= AMTBORRI{I}= JAMTBORRI{I}= 3090 LNTYPE{I}= /; 3091 3092 * Compute other loans personal interest deduction; 3093 TOTLNPINEXI=TOTLNPINEXI+AVINTEXPI{I}; 3094 END; 3095 END; 3096 3097 * Loans against whole life insurance policies - these loans must not 3098 be recorded elsewhere in the data. Check that interest deduction 3099 is not greater than yearly payment on the loan. If it is, then 3100 deduction amount equals the annual payment; 3101 LIFEINSINEX=0; 3102 LIPAYM=0; 3103 IF (X4001=1 & X4004=1 & X4007=1 & X4009=5) THEN DO; 3104 LIFEINSINEX=MAX(0,(X4010)*(X4013/10000)); 3105 %MOCONV(AMT=X4011,MOAMT=LIPAYM,PER=X4012,IML=NO,YEAR8=YES); 3106 IF (LIPAYM > 0) & (LIFEINSINEX > (LIPAYM*12)) THEN 3107 LIFEINSINEX=(LIPAYM*12); 3108 END; 3109 3110 * Total personal interest deduction, only 40% is deductible; 3111 TOTPINEX=MAX(0,(CCPINEX+TOTLNPINEXC+TOTLOCPINEX+TOTLNPINEXI+LIFEINSINEX))*.4; 3112 UNADJTOTPINEX=MAX(0,(CCPINEX+TOTLNPINEXC+TOTLOCPINEX+TOTLNPINEXI+LIFEINSINEX)); 3113 %END; 3114 %ELSE %IF &SYEAR GE 1992 %THEN %DO; 3115 TOTPINEX=0; 3116 %END; 3117 3118 3119 **************Charitable Contributions; 3120 * Contributions to charity, only know if hh contributed $500 or 3121 more. Need to use agi to compute limits on charitable deductions, 3122 assuming all contributions fall under 50% limit organizations. For 3123 TAXSIM, will classify all contributions as cash contributions 3124 (from IRS tables, 80 to 90 percent of contributions in a given 3125 year are cash). Remember to give TAXSIM X5823, TAXSIM will apply the limits.; 3126 GCHARITY=(X5822=1); 3127 CHARITYAMT=0; 3128 IF (X5822=1 & X5823 > 0) THEN DO; 3129 IF (X5823 > .5*AGI) & (AGI>0) THEN 3130 CHARITYAMT=.5*AGI; 3131 ELSE CHARITYAMT=X5823; 3132 END; 3133 3134 IF X5822=1 & X5823 > 0 & AGI < 0 & Y1=YY1*10+1 THEN PUT 3135 "NEGATIVE AGI BUT CHARITYAMT > 0 " Y1= X5823= CHARITYAMT= X5744= X5746= AGI=; 3136 3137 END; 3138 ELSE IF ITEMDEDCT_FLAG=0 THEN DO; 3139 ADJDEDCT=0; 3140 RESTAXM1=0; 3141 TOTINVEX=0; 3142 CHARITYAMT=0; 3143 TOTPINEX=0; 3144 END; 3145 56 The SAS System 13:32 Friday, January 29, 2021 3146 **********Total itemized deductions and exemptions 3147 * Total itemized deductions, including property taxes here, but 3148 remember to separate them out for TAXSIM. Imposing IRS limits on 3149 total deductions, rules from itemized deductions worksheet.; 3150 TOTITEMDCT=0; 3151 3152 * no limits on itemized deductions in 1988, 2012 and 2018; 3153 * starting in 2015, itemized deduction phaseout limit for AGI are the 3154 same as for personal exemptions, so using EXLIM1-4 in this code; 3155 %IF &SYEAR EQ 1989 OR &SYEAR EQ 2013 OR &SYEAR EQ 2019 %THEN %DO; 3156 TOTITEMDCT=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); 3157 DEDCTLIM=0; 3158 %END; 3159 %ELSE %IF (&SYEAR GE 1992 AND &SYEAR LE 2010) %THEN %DO; 3160 TEMPITEMDCT=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); 3161 IF TEMPITEMDCT > 0 & ((AGI <= &ITDLIM1 & FILESTAT^=3) 3162 | (AGI <= &ITDLIM2 & FILESTAT=3)) THEN DO; 3163 TOTITEMDCT=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); 3164 DEDCTLIM=0; 3165 END; 3166 ELSE IF TEMPITEMDCT > 0 & DEDCTLIM^=0 THEN DO; 3167 ITDLIM=&ITDLIM1*(FILESTAT^=3)+&ITDLIM2*(FILESTAT=3); 3168 DEDCTLIM=1; 3169 IWLINE1=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); 3170 IF (IWLINE1-TOTINVEX <= 0) THEN TOTITEMDCT=IWLINE1; 3171 ELSE IF (IWLINE1-TOTINVEX > 0) THEN DO; 3172 IWLINE4=(IWLINE1-TOTINVEX)*.80; 3173 IWLINE7=AGI-ITDLIM; 3174 IWLINE8=IWLINE7*.03; 3175 IWLINE9=MIN(IWLINE4,IWLINE8); 3176 %IF &SYEAR GE 2007 OR &SYEAR EQ 2010 %THEN %DO; 3177 IWLINE10=IWLINE9/&ITDL10; 3178 IWLINE11=IWLINE9-IWLINE10; 3179 TOTITEMDCT=IWLINE1-IWLINE11; 3180 %END; 3181 %ELSE %IF &SYEAR GE 1992 AND &SYEAR LE 2004 %THEN %DO; 3182 TOTITEMDCT=IWLINE1-IWLINE9; 3183 %END; 3184 END; 3185 END; 3186 ELSE IF TEMPITEMDCT=0 THEN DEDCTLIM=0; 3187 %END; 3188 %ELSE %IF (&SYEAR EQ 2016) %THEN %DO; 3189 TEMPITEMDCT=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); 3190 IF TEMPITEMDCT > 0 & ((AGI <= &EXLIM1 & FILESTAT=1) 3191 | (AGI <= &EXLIM2 & FILESTAT IN(2 5)) | (AGI <= &EXLIM3 & FILESTAT=3) 3192 | (AGI <= &EXLIM4 & FILESTAT=4)) THEN DO; 3193 TOTITEMDCT=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); 3194 DEDCTLIM=0; 3195 END; 3196 ELSE IF TEMPITEMDCT > 0 & DEDCTLIM^=0 THEN DO; 3197 ITDLIM=&EXLIM1*(FILESTAT=1)+&EXLIM2*(FILESTAT IN(2 5)) 3198 +&EXLIM3*(FILESTAT=3)+&EXLIM4*(FILESTAT=4); 3199 DEDCTLIM=1; 3200 IWLINE1=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); 3201 IF (IWLINE1-TOTINVEX <= 0) THEN TOTITEMDCT=IWLINE1; 3202 ELSE IF (IWLINE1-TOTINVEX > 0) THEN DO; 3203 IWLINE4=(IWLINE1-TOTINVEX)*.80; 57 The SAS System 13:32 Friday, January 29, 2021 3204 IWLINE7=AGI-ITDLIM; 3205 IWLINE8=IWLINE7*.03; 3206 IWLINE9=MIN(IWLINE4,IWLINE8); 3207 TOTITEMDCT=IWLINE1-IWLINE9; 3208 END; 3209 END; 3210 ELSE IF TEMPITEMDCT=0 THEN DEDCTLIM=0; 3211 %END 3212 3213 * Total dollar amount of exemptions, also applying phaseouts; NOTE: Extraneous text on %END statement ignored. 3214 * NOTE: Change in worksheet for 2006; 3215 * no limits on exemptions in 1988 and 2012, no exemptions in 2018; 3216 TOTEXPTAMT=0; 3217 EXPTLIM=0; 3218 %IF &SYEAR EQ 2019 %THEN %DO; 3219 TOTEXPTAMT=0; 3220 %END; 3221 %ELSE %IF &SYEAR EQ 1989 OR &SYEAR EQ 2013 %THEN %DO; 3222 TOTEXPTAMT=TOTEXPT*&EXPAMT; 3223 %END; 3224 %ELSE %DO; 3225 EXLIM=&EXLIM1*(FILESTAT=1)+&EXLIM2*(FILESTAT IN(2 5)) 3226 +&EXLIM3*(FILESTAT=3)+&EXLIM4*(FILESTAT=4); 3227 EXPAGIT=&EXPAGIT1*(FILESTAT^=3)+&EXPAGIT2*(FILESTAT=3); 3228 DLINE6=2500*(FILESTAT^=3)+1250*(FILESTAT=3); 3229 IF (AGI <= EXLIM) THEN TOTEXPTAMT=TOTEXPT*&EXPAMT; 3230 ELSE IF (AGI > EXLIM) THEN DO; 3231 EXPTLIM=1; 3232 EWLINE2=TOTEXPT*&EXPAMT; 3233 EWLINE5=AGI-EXLIM; 3234 IF EWLINE5 > EXPAGIT THEN TOTEXPTAMT=TOTEXPT*&EXPAMT2; 3235 ELSE IF EWLINE5 <= EXPAGIT THEN DO; 3236 EWLINE6=ROUND((EWLINE5/DLINE6),1); 3237 EWLINE7=EWLINE6*.02; 3238 EWLINE8=EWLINE7*EWLINE2; 3239 %IF &SYEAR EQ 2007 0R &SYEAR EQ 2010 %THEN %DO; 3240 EWLINE9=EWLINE8/&EXDL9; 3241 TOTEXPTAMT=EWLINE2-EWLINE9; 3242 %END; 3243 %ELSE %IF (&SYEAR GE 1992 AND &SYEAR LE 2004) | (&SYEAR EQ 2016) %THEN %DO; 3244 TOTEXPTAMT=EWLINE2-EWLINE8; 3245 %END; 3246 END; 3247 END; 3248 %END; 3249 3250 * Standard deduction by filing status, including addition deduction 3251 amount for over 65, dont have any info on blindness. Also compute 3252 number of age exemptions and flag nonfilers based on IRS filing 3253 thresholds and a few other assumptions. Nonfilers also cannot have 3254 negative AGI, losses from business or capital gains or more than 3255 1/3 of the lowest filing threshold, which is married, filing separately; 3256 BUSRENTCAPLOSS=(TBUSINC < 0 | RENTINC < 0 | CAPGLINC < 0); 3257 HWSINCSE=(WSINCOME >= (.33*&FILELIM6) | WSINCSP >= (.33*&FILELIM6) | TBUSINC >= (.33*&FILELIM6)); 3258 STDDCT=0; 3259 IF (FILESTAT=1 & TUAGE < 65) THEN DO; 3260 STDDCT=&STDAMT1; 58 The SAS System 13:32 Friday, January 29, 2021 3261 NONFILER=(0 < AGI < &FILELIM1)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); 3262 END; 3263 ELSE IF (FILESTAT=1 & TUAGE >= 65) THEN DO; 3264 STDDCT=&STDAMT2; 3265 NONFILER=(0 < AGI < &FILELIM2)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); 3266 END; 3267 ELSE IF (FILESTAT=2 & TUAGE < 65 & SPAGE < 65) THEN DO; 3268 STDDCT=&STDAMT3; 3269 NONFILER=(0 < AGI < &FILELIM3)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); 3270 END; 3271 ELSE IF (FILESTAT=2 & TUAGE >= 65 & SPAGE >= 65) THEN DO; 3272 STDDCT=&STDAMT5; 3273 NONFILER=(0 < AGI < &FILELIM5)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); 3274 END; 3275 ELSE IF (FILESTAT=2 & (TUAGE >= 65 | SPAGE >= 65)) THEN DO; 3276 STDDCT=&STDAMT4; 3277 NONFILER=(0 < AGI < &FILELIM4)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); 3278 END; 3279 ELSE IF (FILESTAT=3 & TUAGE < 65) THEN DO; 3280 %IF &SYEAR GE 2004 %THEN %DO; 3281 STDDCT=&STDAMT1; 3282 %END; 3283 %ELSE %IF &SYEAR LE 2001 %THEN %DO; 3284 STDDCT=&STDAMT3/2; 3285 %END; 3286 NONFILER=(AGI < &FILELIM6)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); 3287 END; 3288 ELSE IF (FILESTAT=3 & TUAGE >= 65) THEN DO; 3289 %IF &SYEAR GE 2004 %THEN %DO; 3290 STDDCT=&STDAMT2; 3291 %END; 3292 %ELSE %IF &SYEAR LE 2001 %THEN %DO; 3293 STDDCT=&STDAMT5/2; 3294 %END; 3295 NONFILER=(AGI < &FILELIM6)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); 3296 END; 3297 ELSE IF (FILESTAT=4 & TUAGE < 65) THEN DO; 3298 STDDCT=&STDAMT6; 3299 NONFILER=(0 < AGI < &FILELIM7)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); 3300 END; 3301 ELSE IF (FILESTAT=4 & TUAGE >= 65) THEN DO; 3302 STDDCT=&STDAMT7; 3303 NONFILER=(0 < AGI < &FILELIM8)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); 3304 END; 3305 ELSE IF (FILESTAT=5 & TUAGE < 65) THEN DO; 3306 STDDCT=&STDAMT3; 3307 NONFILER=(AGI < &FILELIM9)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); 3308 END; 3309 ELSE IF (FILESTAT=5 & TUAGE >= 65) THEN DO; 3310 STDDCT=&STDAMT4; 3311 NONFILER=(0 < AGI < &FILELIM10)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); 3312 END; 3313 AGEXMP=(TUAGE > 65) + (SPAGE > 65)*(FILESTAT=2); 3314 3315 3316 * Did the hh itemize; 3317 * No itemization question in 1989 or 1992, so itemize will be zero; 3318 ITEMIZE=(TAXUNIT=0)*(X7367=1 | X7368=1 | X7369=1)+(TAXUNIT=1)*(X7368=1)+(TAXUNIT=2)*(X7369=1); 59 The SAS System 13:32 Friday, January 29, 2021 3319 CITEMIZE=(TOTITEMDCT => STDDCT); 3320 3321 3322 * Construct other variables needed for TAXSIM; 3323 TAXUNITID=Y1*100+TAXUNIT; 3324 YEAR=&TYEAR; 3325 AGECL=1*(TUAGE < 26)+2*(26<=TUAGE<35)+3*(35<=TUAGE<45) 3326 +4*(45<=TUAGE<55)+5*(55<=TUAGE<65)+6*(TUAGE>=65); 3327 3328 3329 * Dividing capital gains/losses up into long-term and short-term 3330 portions based on the following procedure. Using the aggregate data 3331 on long-term and short-term capital gains/losses from the IRS SOI 3332 Individual report (table 1.4), the share of gains/losses that are 3333 long and short term is determined for 3 broad AGI classes, < 50K, 50 to < 3334 100K, and 100K +. The shares from this computation are then applied 3335 to the data (by AGI class).; 3336 STCAPINC=0; 3337 LTCAPINC=0; 3338 IF (AGICL IN(1)) THEN DO; 3339 IF (CAPGLINC > 0) THEN DO; 3340 LTCAPINC=CAPGLINC*&LCGAGI1; 3341 STCAPINC=CAPGLINC*(1-&LCGAGI1); 3342 END; 3343 ELSE IF (CAPGLINC < 0) THEN DO; 3344 LTCAPINC=CAPGLINC*&LCLAGI1; 3345 STCAPINC=CAPGLINC*(1-&LCLAGI1); 3346 END; 3347 END; 3348 ELSE IF (AGICL IN(2)) THEN DO; 3349 IF (CAPGLINC > 0) THEN DO; 3350 LTCAPINC=CAPGLINC*&LCGAGI2; 3351 STCAPINC=CAPGLINC*(1-&LCGAGI2); 3352 END; 3353 ELSE IF (CAPGLINC < 0) THEN DO; 3354 LTCAPINC=CAPGLINC*&LCLAGI2; 3355 STCAPINC=CAPGLINC*(1-&LCLAGI2); 3356 END; 3357 END; 3358 ELSE IF (AGICL IN(3)) THEN DO; 3359 IF (CAPGLINC > 0) THEN DO; 3360 LTCAPINC=CAPGLINC*&LCGAGI3; 3361 STCAPINC=CAPGLINC*(1-&LCGAGI3); 3362 END; 3363 ELSE IF (CAPGLINC < 0) THEN DO; 3364 LTCAPINC=CAPGLINC*&LCLAGI3; 3365 STCAPINC=CAPGLINC*(1-&LCLAGI3); 3366 END; 3367 END; 3368 3369 ARRAY NEG_1 {*} TBUSINC OTHINC RENTINC OTHPINC; 3370 3371 DO I=1 TO DIM(NEG_1); 3372 IF NEG_1{I}=-1 THEN NEG_1{I}=0; 3373 END; 3374 3375 UNADJTOTDEDCT=MAX(0,(ADJDEDCT+TOTINVEX+CHARITYAMT)); 3376 CHCAREXP=0; 60 The SAS System 13:32 Friday, January 29, 2021 3377 TINCOME=WSINCOME+WSINCSP+TBUSINC+INTINC+NTAXINC+DIVINC+CAPGLINC+RENTINC 3378 +UNEMPINC+GSSINC+PENINC+AFDCINC+OTHINC; 3379 TOTXINC=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC 3380 +UNEMPINC+GSSINC+PENINC+OTHINC; 3381 *set 3000 max loss for capital gains for comparison with IRS 3382 estimates; 3383 IF CAPGLINC < -3000 THEN CAPGL3K=-3000; 3384 ELSE CAPGL3K=CAPGLINC; 3385 3386 3387 * Check for cases were totxinc=0 and x5729 > 0 - should be none. Note 3388 that X5706 and X5720 are not included in totxinc, so check that they 3389 are zero.; 3390 IF (TOTXINC=0 & TINCOME > 0 & AFDCINC=0 & NTAXINC=0 & TAXUNIT < 3 & Y1=YY1*10+1) 3391 THEN PUT "TOTXINC IS ZERO BUT TINCOME > 0 " 3392 YY1= Y1= TOTXINC= TINCOME= WSINCOME= WSINCSP= TBUSINC= INTINC= NTAXINC= DIVINC= RENTINC= 3393 UNEMPINC= AFDCINC= GSSINC= PENINC= OTHINC= CAPGLINC= RAGE= SPAGE= FILESTAT= 3394 TAXUNIT= X4100= X4700=/; 3395 3396 3397 * Adding in payroll tax liability and mtr, assuming employee pays both 3398 employee and employer share, and the SE pay 2x the employee 3399 amount. Therefore, the rate is the same regardless of SE/EMP 3400 status. Also need rules for computing mtr from the payroll tax, for 3401 single earner households payroll mtr is just the contribution rate, 3402 unless earnings are above the maximum, then the payroll mtr is 3403 zero. For dual earner households, need to split up earnings reported 3404 in x5702/x5704 to compute the payroll tax liability and mtr. The 3405 rule used here is to look at the current earning for R and Sp, and 3406 as long as R and Sp have worked at their current jobs for at least 3407 one year, then use the percent each accounts for in total household 3408 earnings to split up x5702/x5704. If either R or Sp has been at 3409 their current job for less than one year, then split up x5702/x5704 3410 50-50. Only computing the payroll mtr for R in dual earner 3411 households. Also, need to check for hhs who worked in tax year, but not 3412 currently working. For single earner households of this type, just 3413 calculate payroll tax liability and mtr using x5702/x5704. In the 3414 case of hhs with a two earners, divide x5702/x5704 50-50 and caculate the 3415 payroll liability and mtr. Computing the payroll atr in a similar 3416 fashion. 3417 NOTE: Need to adjust for different amounts used to compute the mtr, 3418 initially computing payroll mtr for adding $1 to earnings.; 3419 * Need to adjust for 1988, 2% credit for SE, in 1991, limit on medicare tax; 3420 ** earnings from wages and businesses for head and spouse/parnter; 3421 REARN=R_LABORINC+R_BUSINC; 3422 SPEARN=SP_LABORINC+SP_BUSINC; 3423 HHEARN=REARN+SPEARN; 3424 TWSINC=WSINCOME+WSINCSP; 3425 PAYROLLIAB=0; 3426 PAYROLLMTR=0; 3427 PAYROLLATR=0; 3428 IF TAXUNIT=0 THEN DO; 3429 %IF &SYEAR GE 1992 %THEN %DO; 3430 IF (X4106 IN(1 2 3 4 -7) & X4706=0) | (X4106=0 & X4706 IN(1 2 3 4 -7)) 3431 | (X4106=0 & X4706=0 & X102=0 & (TWSINC > 0 | TBUSINC > 0)) THEN DO; 3432 PAYROLLIAB=MIN(&PTLIM,(TWSINC+TBUSINC*(TBUSINC >0)))*&PAYTAX + 3433 ((TWSINC+TBUSINC*(TBUSINC >0))*&MEDHI)*(&SYEAR GE 1995)+ 3434 (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*&MEDHI)*(&SYEAR EQ 1992); 61 The SAS System 13:32 Friday, January 29, 2021 3435 PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= &PTLIM)*(100*&PAYTAX))+ 3436 (100*&MEDHI)*(&SYEAR GE 1995)+ 3437 (100*&MEDHI)*(&SYEAR EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 125000); 3438 IF (PAYROLLIAB >0) THEN PAYROLLATR=100*(PAYROLLIAB/(TWSINC+TBUSINC*(TBUSINC > 0))); 3439 END; 3440 ELSE IF (X4106 IN(1 2 3 4 -7) & X4706 IN(1 2 3 4 -7)) THEN DO; 3441 IF (X4115 >=1 & X4715 >=1 & HHEARN > 0) THEN DO; 3442 PAYROLLIAB=MIN(&PTLIM,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*&PAYTAX + 3443 ((TWSINC+TBUSINC*(TBUSINC >0))*(REARN/HHEARN))*&MEDHI*(&SYEAR GE 1995)+ 3444 (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*(REARN/HHEARN))*&MEDHI*(&SYEAR EQ 1992)+ 3445 MIN(&PTLIM,((TWSINC+TBUSINC*(TBUSINC >0))*(SPEARN/HHEARN)))*&PAYTAX + 3446 ((TWSINC+TBUSINC*(TBUSINC >0))*(SPEARN/HHEARN))*&MEDHI*(&SYEAR GE 1995)+ 3447 (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*(SPEARN/HHEARN))*&MEDHI*(&SYEAR EQ 1992); 3448 PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(REARN/HHEARN) <= 3449 &PTLIM)*(100*&PAYTAX))+(100*&MEDHI)*(&SYEAR GE 1995)+ 3450 (100*&MEDHI)*(&SYEAR EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1)*(REARN/HHEARN) <= 125000); 3451 IF ((MIN(&PTLIM,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*&PAYTAX + 3452 ((TWSINC+TBUSINC*(TBUSINC >0))*(REARN/HHEARN))*&MEDHI) > 0) THEN 3453 PAYROLLATR=100*((MIN(&PTLIM,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*&PAYTAX + 3454 ((&SYEAR GE 1995)*((TWSINC+TBUSINC*(TBUSINC >0))*(REARN/HHEARN))*&MEDHI)+ 3455 ((&SYEAR EQ 1992)*(MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*(REARN/HHEARN))*&MEDHI))/ 3456 ((TWSINC+TBUSINC*(TBUSINC > 0))*(REARN/HHEARN))); 3457 END; 3458 ELSE IF (X4115 =-1 & X4715=-1) | (X4115 >=1 & X4715=-1) | 3459 (X4115=-1 & X4715 >=1) | (HHEARN=0) THEN DO; 3460 IF ((TWSINC+TBUSINC*(TBUSINC >0)) <= &PTLIM) THEN DO; 3461 PAYROLLIAB=(TWSINC+TBUSINC*(TBUSINC >0))*&PAYTAX+ 3462 (TWSINC+TBUSINC*(TBUSINC >0))*&MEDHI; 3463 END; 3464 ELSE IF ((TWSINC+TBUSINC*(TBUSINC >0)) > &PTLIM) THEN DO; 3465 PAYROLLIAB=MIN(2*&PTLIM,((TWSINC+TBUSINC*(TBUSINC >0))))*&PAYTAX+ 3466 (TWSINC+TBUSINC*(TBUSINC >0))*&MEDHI*(&SYEAR GE 1995)+ 3467 MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*&MEDHI*(&SYEAR EQ 1992); 3468 END; 3469 PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(.5) <= 3470 &PTLIM)*(100*&PAYTAX))+(100*&MEDHI)*(&SYEAR GE 1995)+ 3471 (100*&MEDHI)*(&SYEAR EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 125000); 3472 IF (PAYROLLIAB*.5 > 0) THEN 3473 PAYROLLATR=100*((PAYROLLIAB*.5)/((TWSINC+TBUSINC*(TBUSINC >0))*(.5))); 3474 END; 3475 END; 3476 ELSE IF (X4106=0 & X4706=0 & X102^=0 & (TWSINC > 0 | TBUSINC > 0)) THEN 3477 DO; 3478 PAYROLLIAB=2*(MIN(&PTLIM,((TWSINC+TBUSINC*(TBUSINC >0))*(.5)))*&PAYTAX + 3479 ((TWSINC+TBUSINC*(TBUSINC >0))*(.5))*&MEDHI*(&SYEAR GE 1995)+ 3480 (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)*(.5)))*&MEDHI)*(&SYEAR EQ 1992)); 3481 PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(.5) <= 3482 &PTLIM)*(100*&PAYTAX))+(100*&MEDHI)*(&SYEAR GE 1995)+ 3483 (100*&MEDHI)*(&SYEAR EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 125000); 3484 IF (PAYROLLIAB*.5 > 0) THEN 3485 PAYROLLATR=100*((PAYROLLIAB*.5)/((TWSINC+TBUSINC*(TBUSINC >0))*(.5))); 3486 END; 3487 %END; 3488 %ELSE %IF &SYEAR EQ 1989 %THEN %DO; 3489 IF (X4106 IN(1 2 3 4 -7) & X4706=0) | (X4106=0 & X4706 IN(1 2 3 4 -7)) 3490 | (X4106=0 & X4706=0 & X102=0 & (TWSINC > 0 | TBUSINC > 0)) THEN DO; 3491 PAYROLLIAB=MIN(&PTLIM,(TWSINC+TBUSINC*(TBUSINC >0)))*&PAYTAX*(R_SOLEPROP=0)+ 3492 MIN(&PTLIM,(TWSINC+TBUSINC*(TBUSINC >0)))*(&PAYTAX-.02)*(R_SOLEPROP=1); 62 The SAS System 13:32 Friday, January 29, 2021 3493 PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC > 0)+1) <=&PTLIM)*(100*&PAYTAX)*(R_SOLEPROP=0)+ 3494 ((TWSINC+TBUSINC*(TBUSINC > 0)+1) <=&PTLIM)*(100*(&PAYTAX-.02))*(R_SOLEPROP=1)); 3495 IF (PAYROLLIAB >0) THEN PAYROLLATR=100*(PAYROLLIAB/(TWSINC+TBUSINC*(TBUSINC > 0))); 3496 END; 3497 ELSE IF (X4106 IN(1 2 3 4 -7) & X4706 IN(1 2 3 4 -7)) THEN DO; 3498 IF (X4115 >=1 & X4715 >=1 & HHEARN > 0) THEN DO; 3499 PAYROLLIAB=MIN(&PTLIM,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*&PAYTAX*(R_SOLEPROP=0)+ 3500 MIN(&PTLIM,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*(&PAYTAX-.02)*(R_SOLEPROP=1)+ 3501 MIN(&PTLIM,((TWSINC+TBUSINC*(TBUSINC >0))*(SPEARN/HHEARN)))*&PAYTAX*(SP_SOLEPROP=0) + 3502 MIN(&PTLIM,((TWSINC+TBUSINC*(TBUSINC >0))*(SPEARN/HHEARN)))*(&PAYTAX-.02)*(SP_SOLEPROP=1); 3503 PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(REARN/HHEARN) <=&PTLIM)*(100*&PAYTAX)*(R_SOLEPROP=0)+ 3504 ((TWSINC+TBUSINC*(TBUSINC >0)+1)*(REARN/HHEARN) <=&PTLIM)*(100*(&PAYTAX-.02))*(R_SOLEPROP=1)); 3505 PAYROLLATR=100*((MIN(&PTLIM,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*&PAYTAX*(R_SOLEPROP=0)+ 3506 (MIN(&PTLIM,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*(&PAYTAX-.02)*(R_SOLEPROP=1)))); 3507 END; 3508 ELSE IF (X4115 =-1 & X4715=-1) | (X4115 >=1 & X4715=-1) | 3509 (X4115=-1 & X4715 >=1) | (HHEARN=0) THEN DO; 3510 IF ((TWSINC+TBUSINC*(TBUSINC >0)) <= &PTLIM) THEN DO; 3511 PAYROLLIAB=(TWSINC+TBUSINC*(TBUSINC >0))*&PAYTAX*(R_SOLEPROP=0 3512 & SP_SOLEPROP=0)+(TWSINC+TBUSINC*(TBUSINC >0))*(&PAYTAX-.02)*(R_SOLEPROP=1 3513 | SP_SOLEPROP=1); 3514 END; 3515 ELSE IF ((TWSINC+TBUSINC*(TBUSINC >0)) > &PTLIM) THEN DO; 3516 PAYROLLIAB=MIN(2*&PTLIM,((TWSINC+TBUSINC*(TBUSINC >0))))*&PAYTAX*(R_SOLEPROP=0 3517 & SP_SOLEPROP=0)+MIN(2*&PTLIM,((TWSINC+TBUSINC*(TBUSINC >0))))*(&PAYTAX-.02)*(R_SOLEPROP=1 3518 | SP_SOLEPROP=1); 3519 END; 3520 PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(.5) <= 3521 &PTLIM)*(100*&PAYTAX)*(R_SOLEPROP=0 & SP_SOLEPROP=0)+((TWSINC+TBUSINC*(TBUSINC >0)+1)*(.5) <= 3522 &PTLIM)*(100*(&PAYTAX-.02))*(R_SOLEPROP=1 | SP_SOLEPROP=1)); 3523 IF (PAYROLLIAB*.5 > 0) THEN 3524 PAYROLLATR=100*((PAYROLLIAB*.5)/((TWSINC+TBUSINC*(TBUSINC >0))*(.5))); 3525 END; 3526 END; 3527 ELSE IF (X4106=0 & X4706=0 & X102^=0 & (TWSINC > 0 | TBUSINC > 0)) THEN 3528 DO; 3529 PAYROLLIAB=2*(MIN(&PTLIM,((TWSINC+TBUSINC*(TBUSINC>0))*(.5)))*&PAYTAX*(R_SOLEPROP=0 & SP_SOLEPROP=0)+ 3530 MIN(&PTLIM,((TWSINC+TBUSINC*(TBUSINC>0))*(.5)))*(&PAYTAX-.02)*(R_SOLEPROP=1 | SP_SOLEPROP=1)); 3531 PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(.5) <=&PTLIM)*(100*&PAYTAX)*(R_SOLEPROP=0 & 3531 ! SP_SOLEPROP=0)+ 3532 ((TWSINC+TBUSINC*(TBUSINC >0)+1)*(.5) <=&PTLIM)*(100*(&PAYTAX-.02))*(R_SOLEPROP=1 | SP_SOLEPROP=1)); 3533 IF (PAYROLLIAB*.5 > 0) THEN 3534 PAYROLLATR=100*((PAYROLLIAB*.5)/((TWSINC+TBUSINC*(TBUSINC >0))*(.5))); 3535 END; 3536 %END; 3537 END; 3538 ELSE IF TAXUNIT >= 1 THEN DO; 3539 %IF &SYEAR GE 1992 %THEN %DO; 3540 IF (WSINCOME > 0 | TBUSINC > 0) THEN DO; 3541 PAYROLLIAB=MIN(&PTLIM,(WSINCOME+TBUSINC*(TBUSINC >0)))*&PAYTAX + 3542 ((WSINCOME+TBUSINC*(TBUSINC >0))*&MEDHI)*(&SYEAR GE 1995)+ 3543 (MIN(125000,(WSINCOME+TBUSINC*(TBUSINC >0)))*&MEDHI)*(&SYEAR EQ 1992); 3544 PAYROLLMTR=(((WSINCOME+TBUSINC*(TBUSINC > 0)+1)<=&PTLIM)*(100*&PAYTAX))+ 3545 (100*&MEDHI)*(&SYEAR GE 1995)+ 3546 (100*&MEDHI)*(&SYEAR EQ 1992)*((WSINCOME+TBUSINC*(TBUSINC > 0)+1) <= 125000); 3547 IF (PAYROLLIAB >0) THEN PAYROLLATR=100*(PAYROLLIAB/(WSINCOME+TBUSINC*(TBUSINC > 0))); 3548 END; 3549 %END; 63 The SAS System 13:32 Friday, January 29, 2021 3550 %ELSE %IF &SYEAR EQ 1989 %THEN %DO; 3551 SOLEPROP=(R_SOLEPROP=1 & TAXUNIT=1)+(SP_SOLEPROP=1 & TAXUNIT=2); 3552 IF (WSINCOME > 0 | TBUSINC > 0) THEN DO; 3553 PAYROLLIAB=MIN(&PTLIM,(WSINCOME+TBUSINC*(TBUSINC >0)))*&PAYTAX*(SOLEPROP=0)+ 3554 MIN(&PTLIM,(WSINCOME+TBUSINC*(TBUSINC>0)))*(&PAYTAX-.02)*(SOLEPROP=1); 3555 PAYROLLMTR=(((WSINCOME+TBUSINC*(TBUSINC > 0)+1)<=&PTLIM)*(100*&PAYTAX)*(SOLEPROP=0)+ 3556 ((WSINCOME+TBUSINC*(TBUSINC >0)+1)<=&PTLIM)*(100*(&PAYTAX-.02))*(SOLEPROP=1)); 3557 IF (PAYROLLIAB >0) THEN PAYROLLATR=100*(PAYROLLIAB/(WSINCOME+TBUSINC*(TBUSINC > 0))); 3558 END; 3559 %END; 3560 END; 3561 IF PAYROLLIAB=0 & PAYROLLMTR=0 & PAYROLLATR=0 & (TWSINC > 0 | TBUSINC > 0) & 3562 Y1=YY1*10+1 THEN PUT "NO PAYROLL LIABILITY, MTR, OR ATR " Y1= X102= X4106= 3563 X4706= X4115= X4715= X4112= X4113= X4131= X4132= X4712= X4713= X4731= X4732= TWSINC= 3564 TBUSINC= R_LABORINC= R_BUSINC= R_SOLEPROP= SP_LABORINC= SP_BUSINC= 3565 SP_SOLEPROP= REARN= SPEARN= HHEARN= TAXUNIT=/; 3566 3567 3568 * Check for missing variables; 3569 ARRAY CHVARS {*} YY1 Y1 CHARITYAMT X5823 TOTITEMDCT STDDCT 3570 AGI AGICL AGIGE50K DEDCTLIM X7372 3571 X7018 X8023 X105 PERSEXP KIDS TOTEXPT FILESTAT TOTEXPTAMT EXPTLIM 3572 RAGE SPAGE TUAGE YEAR STATE TAXUNIT WSINCOME 3573 WSINCSP TBUSINC NTAXINC INTINC DIVINC CAPGLINC RENTINC UNEMPINC 3574 CHSPALINC AFDCINC PENINC OTHINC GSSINC OTHPINC NONTAX RENT 3575 UNADJTOTDEDCT CHCAREXP TINCOME TOTXINC STCAPINC LTCAPINC PAYROLLIAB 3576 PAYROLLMTR PAYROLLATR LWP KIDSU17 KIDSU18 KIDSU13; 3577 3578 DO I=1 TO DIM(CHVARS); 3579 IF CHVARS{I}=. THEN PUT "MISSING VALUE FOR " Y1= CHVARS{I}=; 3580 END; 3581 RUN; 3582 3583 * Create a dataset for full TAXSIM. Breaking out total itemized 3584 deductions into its parts - have applied the limits for the mortgage 3585 interest deduction and investment interest expense, but not for 3586 charitable contributions.; 3587 PROC SORT DATA=SCF; 3588 BY TAXUNITID; 3589 RUN; 3590 3591 proc means; 3592 var y1 yy1 year year; 3593 run; 3594 3595 3596 * Rename variables to TAXSIM names, use lowercase for TAXSIM file names; 3597 libname swt "../swt/sas"; 3598 DATA swt.swt&SYR2; 3599 SET SCF; 3600 rep=mod(y1,10); 3601 3602 * IF FILESTAT > 0; 3603 3604 mstat=1*(FILESTAT IN(1 4))+2*(FILESTAT IN(2 5))+6*(FILESTAT IN(3)); 3605 otherprop=RENTINC+TBUSINC; 3606 nonprop=CHSPALINC+OTHINC; 3607 otheritem=TOTINVEX+TOTPINEX; 64 The SAS System 13:32 Friday, January 29, 2021 3608 mortgage=ADJDEDCT+X5823; 3609 scorp=0; 3610 pbusinc=0; 3611 pprofinc=0; 3612 sbusinc=0; 3613 sprofinc=0; 3614 tyear=YEAR; 3615 tstate=STATE; 3616 * set idtl=2 to get detailed output from TAXSIM; 3617 idtl=2; 3618 DROP STATE; 3619 RENAME TAXUNITID=taxsimid TUAGE=page SPAGE=sage KIDS=depx KIDSU13=dep13 KIDSU17=dep17 3620 KIDSU18=dep18 WSINCOME=pwages WSINCSP=swages DIVINC=dividends INTINC=intrec STCAPINC=stcg 3621 LTCAPINC=ltcg PENINC=pensions GSSINC=gssi UNEMPINC=ui AFDCINC=transfers RENT=rentpaid 3622 RESTAXM1=proptax CHCAREXP=childcare tyear=year; 3623 RUN; 3624 3625 proc means; 3626 var y1 yy1 year; 3627 run; 3628 3629 libname taxsim "../txpydata/sas"; 3630 3631 proc contents data=swt.swt&SYR2;run; 3632 3633 DATA taxsim.txpydata&SYR2; 3634 SET swt.swt&SYR2(KEEP=taxsimid year mstat page sage depx 3635 dep13 dep17 dep18 pwages swages dividends 3636 intrec stcg ltcg otherprop nonprop pensions gssi ui transfers rentpaid proptax otheritem 3637 childcare mortgage scorp pbusinc pprofinc sbusinc sprofinc 3638 Y1 YY1 taxunit rep); 3639 y1=Y1; 3640 yy1=YY1; 3641 RUN; 3642 3643 proc contents data=taxsim.txpydata&SYR2;run; 3644 %IF &HTAXFILE EQ YES %THEN %DO; 3645 * Merge full TAXSIM output file back into the main dataset; 3646 PROC IMPORT DATAFILE=TAXSIM 3647 OUT=FTAXSCFI DBMS=CSV REPLACE; 3648 GETNAMES=YES; 3649 RUN; 3650 3651 DATA FTAXSCFI; 3652 SET FTAXSCFI; 3653 RENAME taxsimid=TAXUNITID fiitax=FEDTAXLIAB siitax=STTAXLIAB frate=FEDMTR1 srate=STMTR1 3654 v10=TAGI v18=TAXINC v41=STBR fica=FICA state=STATE; 3655 3656 FEDITST=(v17>0); 3657 AMTFLG=(v27>0); 3658 * setting bracket rate to zero, as not in v32 output, asking Dan for a mod to get this; 3659 FEDBR=0; 3660 3661 DROP year v11 v12 v13 v14 v16 v16 v17 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 3662 v32 v33 v34 v35 v36 v37 v38 v39 v40; 3663 RUN; 3664 3665 PROC SORT DATA=FTAXSCFI; 65 The SAS System 13:32 Friday, January 29, 2021 3666 BY TAXUNITID; 3667 RUN; 3668 3669 PROC SORT DATA=SCF; 3670 BY TAXUNITID; 3671 RUN; 3672 3673 DATA TAXSCF; 3674 MERGE SCF (IN=IN1) FTAXSCFI; 3675 BY TAXUNITID STATE; 3676 IF IN1; 3677 RUN; 3678 3679 DATA TAXSCF; 3680 SET TAXSCF; 3681 3682 * only calculating average tax rates for hhs with positive taxable 3683 income and a positive tax liability; 3684 IF (TOTXINC > 0 & FEDTAXLIAB > 0) THEN FEDATR=(FEDTAXLIAB/TOTXINC)*100; 3685 ELSE FEDATR=0; 3686 IF (TOTXINC > 0 & STTAXLIAB > 0) THEN STATR=(STTAXLIAB/TOTXINC)*100; 3687 ELSE STATR=0; 3688 TOTATR=MIN(100,(FEDATR+STATR+PAYROLLATR)); 3689 PINCNZLIAB=(TOTXINC >= 0 & FEDTAXLIAB <= 0); 3690 NINCPLIAB=(TOTXINC < 0 & FEDTAXLIAB > 0); 3691 NINCNZLIAB=(TOTXINC < 0 & FEDTAXLIAB <=0); 3692 3693 * Create some TAXSIM AGI classes; 3694 TAGIGE50K=(TAGI >= 50000); 3695 TAGICL=0; 3696 IF (TAGI<=0) THEN TAGICL=1; 3697 ELSE IF (0 < TAGI < 5000) THEN TAGICL=2; 3698 ELSE IF (5000 <= TAGI < 10000) THEN TAGICL=3; 3699 ELSE IF (10000 <= TAGI < 15000) THEN TAGICL=4; 3700 ELSE IF (15000 <= TAGI < 20000) THEN TAGICL=5; 3701 ELSE IF (20000 <= TAGI < 25000) THEN TAGICL=6; 3702 ELSE IF (25000 <= TAGI < 30000) THEN TAGICL=7; 3703 ELSE IF (30000 <= TAGI < 40000) THEN TAGICL=8; 3704 ELSE IF (40000 <= TAGI < 50000) THEN TAGICL=9; 3705 ELSE IF (50000 <= TAGI < 75000) THEN TAGICL=10; 3706 ELSE IF (75000 <= TAGI < 100000) THEN TAGICL=11; 3707 ELSE IF (100000 <= TAGI < 200000) THEN TAGICL=12; 3708 ELSE IF (200000 <= TAGI < 500000) THEN TAGICL=13; 3709 ELSE IF (500000 <= TAGI < 1000000) THEN TAGICL=14; 3710 ELSE IF (1000000 <= TAGI < 1500000) THEN TAGICL=15; 3711 ELSE IF (1500000 <= TAGI < 2000000) THEN TAGICL=16; 3712 ELSE IF (2000000 <= TAGI < 5000000) THEN TAGICL=17; 3713 ELSE IF (5000000 <= TAGI < 10000000) THEN TAGICL=18; 3714 ELSE IF (TAGI >= 10000000) THEN TAGICL=19; 3715 3716 3717 * Checking out negative and high tax liabilities and rates; 3718 IF (FEDTAXLIAB < 0 | FEDMTR1 < 0) & FILESTAT > 0 & Y1=YY1*10+1 3719 THEN PUT "NEGATIVE FED TAX LIABILITY OR RATE " TAXUNITID= FEDTAXLIAB= FEDMTR1= FEDATR= 3720 FEDBR= STTAXLIAB= STMTR1= STATR= STBR= 3721 KIDS= AGEXMP= WSINCOME= WSINCSP= DIVINC= OTHPINC= PENINC= 3722 GSSINC= NONTAX= RENT= RESTAXM1= UNADJTOTDEDCT= CHCAREXP= UNEMPINC= FEDITST= CITEMIZE= 3723 TAXINC= TOTXINC= FILESTAT= TOTITEMDCT= ADJDEDCT= CHARITYAMT= RESTAXM1= 66 The SAS System 13:32 Friday, January 29, 2021 3724 TOTINVEX= TOTEXPT= KIDS= PERSEXP= X5744= X5746= AGI= 3725 STDDCT= CAPGLINC= TBUSINC= TINCOME= STATE= AMTFLG= /; 3726 3727 IF FEDMTR1 > 45 & FILESTAT > 0 & Y1=YY1*10+1 3728 THEN PUT "HIGH FED MTR1 " TAXUNITID= FEDTAXLIAB= FEDMTR1= FEDATR= 3729 FEDBR= STTAXLIAB= STMTR1= STATR= STBR= 3730 KIDS= AGEXMP= WSINCOME= WSINCSP= DIVINC= OTHPINC= PENINC= 3731 GSSINC= NONTAX= RENT= RESTAXM1= UNADJTOTDEDCT= CHCAREXP= UNEMPINC= FEDITST= CITEMIZE= 3732 TAXINC= TOTXINC= FILESTAT= TOTITEMDCT= ADJDEDCT= CHARITYAMT= RESTAXM1= 3733 TOTINVEX= TOTEXPT= KIDS= PERSEXP= X5744= X5746= AGI= 3734 STDDCT= CAPGLINC= TBUSINC= TINCOME= STATE= AMTFLG= /; 3735 3736 IF FEDTAXLIAB > 10000000 & FILESTAT > 0 & Y1=YY1*10+1 3737 THEN PUT "HIGH FED TAX LIABILITY " TAXUNITID= FEDTAXLIAB= FEDMTR1= FEDATR= 3738 FEDBR= STTAXLIAB= STMTR1= STATR= STBR= 3739 KIDS= AGEXMP= WSINCOME= WSINCSP= DIVINC= OTHPINC= PENINC= 3740 GSSINC= NONTAX= RENT= RESTAXM1= UNADJTOTDEDCT= CHCAREXP= UNEMPINC= FEDITST= CITEMIZE= 3741 TAXINC= TOTXINC= FILESTAT= TOTITEMDCT= ADJDEDCT= CHARITYAMT= RESTAXM1= 3742 TOTINVEX= TOTEXPT= KIDS= PERSEXP= X5744= X5746= AGI= 3743 STDDCT= CAPGLINC= TBUSINC= TINCOME= STATE= AMTFLG= /; 3744 3745 IF FEDATR > 50 & FILESTAT > 0 & Y1=YY1*10+1 3746 THEN PUT "HIGH FED ATR " TAXUNITID= FEDTAXLIAB= FEDMTR1= FEDATR= 3747 FEDBR= STTAXLIAB= STMTR1= STATR= STBR= 3748 KIDS= AGEXMP= WSINCOME= WSINCSP= DIVINC= OTHPINC= PENINC= 3749 GSSINC= NONTAX= RENT= RESTAXM1= UNADJTOTDEDCT= CHCAREXP= UNEMPINC= FEDITST= CITEMIZE= 3750 TAXINC= TOTXINC= FILESTAT= TOTITEMDCT= ADJDEDCT= CHARITYAMT= RESTAXM1= 3751 TOTINVEX= TOTEXPT= KIDS= PERSEXP= X5744= X5746= AGI= 3752 STDDCT= CAPGLINC= TBUSINC= TINCOME= STATE= AMTFLG= /; 3753 3754 RUN; 3755 3756 %END; 3757 3758 3759 %IF &HTAXFILE EQ YES %THEN %DO; 3760 * Compute stats on merged dataset, includes TAXSIM generated variables; 3761 3762 ******* The unit of observation in the default dataset created is the tax unit, which is not 3763 the same as the household. The code below creates two household level datasets from the 3764 tax units, the first aggregates tax units into PEU households, and the second aggregates 3765 tax units into PEU households and includes any NPEU tax units with those households. 3766 The household level datasets only include selected variables that can be easily aggregated, 3767 such as federal tax liability, and not variables such as marginal tax rates.; 3768 3769 * Create a tax unit level dataset with tax variables; 3770 DATA OUT.FTAX&SYR2.PTU; 3771 SET TAXSCF(KEEP= Y1 YY1 WGT YEAR TAXUNITID TAXUNIT FEDTAXLIAB STTAXLIAB FEDMTR1 STMTR1 3772 FEDBR STBR FEDATR STATR FEDITST AMTFLG PINCNZLIAB NINCPLIAB NINCNZLIAB 3773 FILESTAT KIDS PERSEXP AGI TOTEXPT AGEXMP CITEMIZE TOTITEMDCT STDDCT 3774 TOTEXPTAMT TAXINC TOTXINC TOTATR ITEMIZE TOTINVEX TOTPINEX 3775 WSINCOME WSINCSP DIVINC RENTINC INTINC TBUSINC CHSPALINC OTHINC 3776 OTHPINC PENINC GSSINC NONTAX RENT RESTAXM1 NTAXINC AFDCINC TINCOME 3777 CHCAREXP UNEMPINC ADJDEDCT TOTINVEX TOTPINEX X5823 STCAPINC LTCAPINC STATE 3778 PAYROLLIAB PAYROLLMTR PAYROLLATR FICA LWP NONFILER X5744 X5746 KIDSU17 3779 TUAGE SPAGE KIDSU13 KIDSU18 TAGI X5823); 3780 RUN; 3781 67 The SAS System 13:32 Friday, January 29, 2021 3782 PROC CONTENTS DATA=OUT.FTAX&SYR2.PTU; 3783 RUN; 3784 3785 * Create a household level dataset that sums tax liabilities for all 3786 tax units in household, including NPEU; 3787 PROC SORT DATA=TAXSCF OUT=TAXSCFHLNP; 3788 BY Y1; 3789 RUN; 3790 3791 * setting non-filers federal and state tax liability to zero; 3792 * with NPEU; 3793 DATA TAXSCFHLNP; 3794 SET TAXSCFHLNP; 3795 IF NONFILER=1 THEN DO; 3796 FEDTAXLIAB=0; 3797 STTAXLIAB=0; 3798 END; 3799 RUN; 3800 3801 DATA WGT; 3802 SET MAIN(KEEP=Y1 X42001); 3803 WGT=X42001/5; 3804 RUN; 3805 3806 DATA STAXSCFHLNP; 3807 MERGE STAXSCFHLNP (IN=IN1) WGT; 3808 BY Y1; 3809 IF IN1=1; 3810 RUN; 3811 3812 DATA OUT.FTAX&SYR2.PHN; 3813 SET STAXSCFHLNP; 3814 RUN; 3815 3816 PROC CONTENTS DATA=OUT.FTAX&SYR2.PHN; 3817 RUN; 3818 3819 * without NPEU; 3820 DATA TAXSCFHL; 3821 SET TAXSCFHLNP; 3822 IF TAXUNIT <=2; 3823 RUN; 3824 3825 3826 DATA STAXSCFHL; 3827 MERGE STAXSCFHL (IN=IN1) WGT; 3828 BY Y1; 3829 IF IN1=1; 3830 RUN; 3831 3832 DATA OUT.FTAX&SYR2.PH; 3833 SET STAXSCFHL; 3834 RUN; 3835 3836 3837 %END; 3838 %MEND; 3839 68 The SAS System 13:32 Friday, January 29, 2021 3840 * set HTAXFILE=YES if you have do not have the TAXSIM output dataset, set HTAXFILE=YES 3841 if you have the TAXSIM output dataset; 3842 3843 %TAXSCF(SYEAR=2019,TYEAR=2018,WYEAR=2016,ITDLIM1=0,ITDLIM2=0,ITDL10=0,EXPAMT=0, 3844 EXPAMT2=0,EXDL9=0,EXPAGIT1=0,EXPAGIT2=0,EXLIM1=0,EXLIM2=0, 3845 EXLIM3=0,EXLIM4=0,STDAMT1=12000,STDAMT2=13600,STDAMT3=24000,STDAMT4=25300, 3846 STDAMT5=26600,STDAMT6=18000,STDAMT7=19600,FILELIM1=12000,FILELIM2=13600,FILELIM3=24000,FILELIM4=25300, 3847 FILELIM5=26600,FILELIM6=5,FILELIM7=18000,FILELIM8=19600,FILELIM9=24000,FILELIM10=25300,LCGAGI1=.87, 3848 3849 LCLAGI1=.62,LCGAGI2=.86,LCLAGI2=.66,LCGAGI3=.94,LCLAGI3=.87,PAYTAX=.124,MEDHI=.029,PTLIM=128400,HTAXFILE=&SYS 3849 ! PARM); MPRINT(TAXSCF): * define libraries for SCF public datasets; MPRINT(TAXSCF): LIBNAME SCF19 "../orig/sas7bdat" ACCESS=READONLY; NOTE: Libref SCF19 was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/orig/sas7bdat MPRINT(TAXSCF): * directory for datasets created by the program; MPRINT(TAXSCF): LIBNAME OUT "."; NOTE: Libref OUT was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code MPRINT(TAXSCF): * csv file for TAXSIM v32; MPRINT(TAXSCF): FILENAME SCFTAX "txpydata19.csv"; MPRINT(TAXSCF): * csv from TAXSIM v32; MPRINT(TAXSCF): FILENAME TAXSIM "results19.csv"; MPRINT(TAXSCF): * read in public SCF data, assumes dataset name is pXXiY.sas7bdat; MPRINT(TAXSCF): * NOTE: Any changes to the libname or data set name must also be made in this data step; MPRINT(TAXSCF): DATA MAIN; MPRINT(TAXSCF): SET SCF19.P19I6; NOTE: Data file SCF19.P19I6.DATA is in a format that is native to another host, or the file encoding does not match the session encoding. Cross Environment Data Access will be used, which might require additional CPU resources and might reduce performance. MPRINT(TAXSCF): RUN; NOTE: There were 28885 observations read from the data set SCF19.P19I6. NOTE: The data set WORK.MAIN has 28885 observations and 5333 variables. NOTE: DATA statement used (Total process time): real time 0.68 seconds cpu time 0.67 seconds MPRINT(TAXSCF): PROC SORT DATA=MAIN; MPRINT(TAXSCF): BY Y1; MPRINT(TAXSCF): RUN; NOTE: There were 28885 observations read from the data set WORK.MAIN. NOTE: The data set WORK.MAIN has 28885 observations and 5333 variables. NOTE: PROCEDURE SORT used (Total process time): real time 0.48 seconds cpu time 0.48 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET MAIN; MPRINT(TAXSCF): file "null.txt"; MPRINT(TAXSCF): WGT=(X42001/5); MPRINT(TAXSCF): POP=1; MPRINT(TAXSCF): * setting STATE variable to zero, set to -1 if you want TAXSIM to compute state tax for all 51 states; 69 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): STATE=0; MPRINT(TAXSCF): * Small data fix for one case in 1992; MPRINT(TAXSCF): * Small data fix for one case in 1998; MPRINT(TAXSCF): * Small data fix for one case in 2007; MPRINT(TAXSCF): * Small data fix for one case in 2013; MPRINT(TAXSCF): * Payment frequency on other loans not asked in 1989, assumed to be monthly; MPRINT(TAXSCF): * Only one other income variable after 1992, set to zero for 1992 forward; MPRINT(TAXSCF): X5726=0; MPRINT(TAXSCF): X5727=0; MPRINT(TAXSCF): * Spouse/partner in PEU, need to create X7020 for 1989 to 1998; MPRINT(TAXSCF): * A few other recodes to construct variables not asked in 1989 and 1992; MPRINT(TAXSCF): * Number of years with spouse/partner; MPRINT(TAXSCF): IF 2019=X8005 THEN X7370=-1; MPRINT(TAXSCF): ELSE X7370=2019-X8005; MPRINT(TAXSCF): * Number of people in NPEU, need to compute for 1989 to 2004, variable exists for 2007 forward; MPRINT(TAXSCF): * Absent spouse/partner indicator; MPRINT(TAXSCF): IF (X100=5) | (X106=5 & X107 IN(2 5 12)) THEN ABSP_P=1; MPRINT(TAXSCF): ELSE ABSP_P=0; MPRINT(TAXSCF): PERSEXP=1+(X105 IN(1 2))*(ABSP_P=0); MPRINT(TAXSCF): * Including children living elsewhere that are under 18, max of one extra as there is uncertainty about dependent status; MPRINT(TAXSCF): 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) + (X226 IN(4 13))*(X228 < 19) + (X5912 > 0 | X5912=-2); MPRINT(TAXSCF): * For the child tax credit - must be under 17; MPRINT(TAXSCF): 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) + (X226 IN(4 13))*(X228 < 17); MPRINT(TAXSCF): KIDSU18=(X108 IN(4 13))*(X110 < 18) + (X114 IN(4 13))*(X116 < 18) + (X120 IN(4 13))*(X122 < 18) + (X126 IN(4 13))*(X128 < 18) + (X132 IN(4 13))*(X134 < 18) + (X202 IN(4 13))*(X204 < 18) + (X208 IN(4 13))*(X210 < 18) + (X214 IN(4 13))*(X216 < 18) + (X220 IN(4 13))*(X222 < 18) + (X226 IN(4 13))*(X228 < 18); MPRINT(TAXSCF): KIDSU13=(X108 IN(4 13))*(X110 < 13) + (X114 IN(4 13))*(X116 < 13) + (X120 IN(4 13))*(X122 < 13) + (X126 IN(4 13))*(X128 < 13) + (X132 IN(4 13))*(X134 < 13) + (X202 IN(4 13))*(X204 < 13) + (X208 IN(4 13))*(X210 < 13) + (X214 IN(4 13))*(X216 < 13) + (X220 IN(4 13))*(X222 < 13) + (X226 IN(4 13))*(X228 < 13); MPRINT(TAXSCF): * Indicator for R living with a partner; MPRINT(TAXSCF): LWP=(X8023=2); MPRINT(TAXSCF): RAGE=X14; MPRINT(TAXSCF): * Set spouse/parnter age to zero if absent spouse/partner; MPRINT(TAXSCF): SPAGE=X19*(X7020=2); MPRINT(TAXSCF): * Possible scenarios, not considering NPEU right now, will create those tax units last 1. Married filing jointly households = tax unit 2. Single person households = tax unit 3. Filing separately households = split into two tax units, need to determine if single or married filing separately filing status 4. LWP households = split into two tax units even if one person is a nonfiler For 3. and 4., one of the tax units may have head of household status depending on presence of children For each new tax unit, start with replicate of household data and parse out income, deductions, exemptions; MPRINT(TAXSCF): * Create new observations from married filing separately households or LWP households. 0. Tax unit = household 1. Created tax unit for household head 2. Created tax unit for spouse/parnter 3-8. Created tax unit for NPEU member Note: If R and Sp are legally married for more than one year, treat as married filing joint even if x5746=3,4. If R and Sp LWP and report filing jointly treat as two tax units. If R and Sp married and report filing separately, treat as filing jointly unless either R or Sp has a past marriage. Inspection of the data reveals that too many married couples report filing separately when compared to the IRS data. The past marriage condition put the number closer to the IRS data.; MPRINT(TAXSCF): MARRIED=(X8023=1 & X105=1 & X7370 >= 1 & X7020=2); MPRINT(TAXSCF): IF (X5744 IN(1 6) & X5746=1 & MARRIED=1) | (MARRIED=1 & ((X5744=5 | X5746 IN(3 4)) | (X5746=2 & X7377^=2 & X7392^=2))) | (X8023 > 0 & X105=0 & (X5744=5 | (X5744 IN(1 6) & X5746=0))) | (X8023 > 0 & X105 > 0 & X5744 IN(1 5 6) & X5746=0 & X7020=1) | (X8023=8 & X105=0 & X5744=1 & X5746=1) THEN TAXUNIT=0; MPRINT(TAXSCF): ELSE IF (X5744 IN(1 6) & X5746 IN(2 3 4)) | (X8023 > 0 & X105 > 0 & (X5744=5 | (X5744 IN(1 6) & X5746 IN(0 1)))) | (X8023=1 & X105=1 & X7370=-1 & X5744=1) THEN TAXUNIT=1; 70 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE PUT "MISSING TAXUNIT STATUS " YY1= X5744= X5746= X8023= X105= X7020= MARRIED= X7372= X7018= X7370=; MPRINT(TAXSCF): TUAGE=RAGE; MPRINT(TAXSCF): RUN; NOTE: The file "null.txt" is: Filename=/disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code/null.txt, Owner Name=taxsim,Group Name=taxsim, Access Permission=-rw-r--r--, Last Modified=29Jan2021:13:32:06 NOTE: 0 records were written to the file "null.txt". NOTE: There were 28885 observations read from the data set WORK.MAIN. NOTE: The data set WORK.SCF has 28885 observations and 5351 variables. NOTE: DATA statement used (Total process time): real time 0.57 seconds cpu time 0.56 seconds MPRINT(TAXSCF): DATA NEWUNITS; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): IF TAXUNIT=1; MPRINT(TAXSCF): TAXUNIT=2; MPRINT(TAXSCF): TUAGE=SPAGE; MPRINT(TAXSCF): SPAGE=0; MPRINT(TAXSCF): RUN; NOTE: There were 28885 observations read from the data set WORK.SCF. NOTE: The data set WORK.NEWUNITS has 2945 observations and 5351 variables. NOTE: DATA statement used (Total process time): real time 0.27 seconds cpu time 0.28 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF NEWUNITS; MPRINT(TAXSCF): RUN; NOTE: There were 28885 observations read from the data set WORK.SCF. NOTE: There were 2945 observations read from the data set WORK.NEWUNITS. NOTE: The data set WORK.SCF has 31830 observations and 5351 variables. NOTE: DATA statement used (Total process time): real time 1.57 seconds cpu time 0.72 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): * Codes for filestat, assigning status even if did not file, will determine non-filer status later, filing status for split tax units done after splitting up income 1= Single 2= Married filing jointly 3= Married filing separately 4= Head of HH 5= Qualified widower; MPRINT(TAXSCF): FILESTAT=0; MPRINT(TAXSCF): IF TAXUNIT=0 THEN DO; MPRINT(TAXSCF): IF (MARRIED=1) THEN FILESTAT=2; MPRINT(TAXSCF): ELSE IF MARRIED=0 THEN DO; MPRINT(TAXSCF): IF PERSEXP=1 & KIDS=0 THEN FILESTAT=1; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS > 0 & X8023=5 & X7372=5 & X8007>=2016 THEN FILESTAT=5; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS > 0 THEN FILESTAT=4; 71 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTEXPT=PERSEXP+KIDS; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * No AGI variables starting in 2010; MPRINT(TAXSCF): * Coding income variables with -1 and -2 to zero; MPRINT(TAXSCF): ARRAY NEG {*} X5704 X5714 X5724 X5726 X5729; MPRINT(TAXSCF): DO I=1 TO DIM(NEG); MPRINT(TAXSCF): IF NEG{I} IN(-2 -1) THEN NEG{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Income from wages and business; MPRINT(TAXSCF): R_LABORINC=MAX(0,X4112) MPRINT(ACONV): *((X4113=2)*52.18+(X4113=3)*26.09+(X4113=4)*12+(X4113=5)*4+(X4113=6)+(X4113=8)+ (X4113=11)*2+(X4113=12)*6+(X4113=31)*24+(X4113=14)+(X4113=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): SP_LABORINC=MAX(0,X4712) MPRINT(ACONV): *((X4713=2)*52.18+(X4713=3)*26.09+(X4713=4)*12+(X4713=5)*4+(X4713=6)+(X4713=8)+ (X4713=11)*2+(X4713=12)*6+(X4713=31)*24+(X4713=14)+(X4713=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): R_BUSINC=MAX(0,X4131) MPRINT(ACONV): *((X4132=2)*52.18+(X4132=3)*26.09+(X4132=4)*12+(X4132=5)*4+(X4132=6)+(X4132=8)+ (X4132=11)*2+(X4132=12)*6+(X4132=31)*24+(X4132=14)+(X4132=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): SP_BUSINC=MAX(0,X4731) MPRINT(ACONV): *((X4732=2)*52.18+(X4732=3)*26.09+(X4732=4)*12+(X4732=5)*4+(X4732=6)+(X4732=8)+ (X4732=11)*2+(X4732=12)*6+(X4732=31)*24+(X4732=14)+(X4732=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): * Income from pensions and tax-deferred account withdrawals. No withdrawal information for IRAs or future pensions prior to 2004. No withdrawal information for any tax-deferred accounts, aside from other income, prior to 2001; MPRINT(TAXSCF): R_REGPEN=MAX(0,(X5318 MPRINT(ACONV): *((X5319=2)*52.18+(X5319=3)*26.09+(X5319=4)*12+(X5319=5)*4+(X5319=6)+(X5319=8)+ (X5319=11)*2+(X5319=12)*6+(X5319=31)*24+(X5319=14)+(X5319=22)) MPRINT(TAXSCF): *(X5315=1)*(X5317>=1))) +MAX(0,(X5326 MPRINT(ACONV): *((X5327=2)*52.18+(X5327=3)*26.09+(X5327=4)*12+(X5327=5)*4+(X5327=6)+(X5327=8)+ (X5327=11)*2+(X5327=12)*6+(X5327=31)*24+(X5327=14)+(X5327=22)) MPRINT(TAXSCF): *(X5323=1)*(X5325>=1))) +MAX(0,(X5334 MPRINT(ACONV): *((X5335=2)*52.18+(X5335=3)*26.09+(X5335=4)*12+(X5335=5)*4+(X5335=6)+(X5335=8)+ (X5335=11)*2+(X5335=12)*6+(X5335=31)*24+(X5335=14)+(X5335=22)) MPRINT(TAXSCF): *(X5331=1)*(X5333>=1))) +MAX(0,(X5418 MPRINT(ACONV): *((X5419=2)*52.18+(X5419=3)*26.09+(X5419=4)*12+(X5419=5)*4+(X5419=6)+(X5419=8)+ (X5419=11)*2+(X5419=12)*6+(X5419=31)*24+(X5419=14)+(X5419=22)) MPRINT(TAXSCF): *(X5415=1)*(X5417>=1))); MPRINT(TAXSCF): R_WITHDRAW=X6558+(X6574*.5)+MAX(0,(X6464 MPRINT(ACONV): *((X6465=2)*52.18+(X6465=3)*26.09+(X6465=4)*12+(X6465=5)*4+(X6465=6)+(X6465=8)+ (X6465=11)*2+(X6465=12)*6+(X6465=31)*24+(X6465=14)+(X6465=22)) MPRINT(TAXSCF): *(X5315=1))) +MAX(0,(X6469 MPRINT(ACONV): *((X6470=2)*52.18+(X6470=3)*26.09+(X6470=4)*12+(X6470=5)*4+(X6470=6)+(X6470=8)+ (X6470=11)*2+(X6470=12)*6+(X6470=31)*24+(X6470=14)+(X6470=22)) MPRINT(TAXSCF): *(X5323=1)))+MAX(0,(X6474 MPRINT(ACONV): *((X6475=2)*52.18+(X6475=3)*26.09+(X6475=4)*12+(X6475=5)*4+(X6475=6)+(X6475=8)+ (X6475=11)*2+(X6475=12)*6+(X6475=31)*24+(X6475=14)+(X6475=22)) MPRINT(TAXSCF): *(X5331=1))) +MAX(0,(X6479 MPRINT(ACONV): *((X6480=2)*52.18+(X6480=3)*26.09+(X6480=4)*12+(X6480=5)*4+(X6480=6)+(X6480=8)+ (X6480=11)*2+(X6480=12)*6+(X6480=31)*24+(X6480=14)+(X6480=22)) MPRINT(TAXSCF): *(X5415=1)))+MAX(0,(X6965 MPRINT(ACONV): *((X6966=2)*52.18+(X6966=3)*26.09+(X6966=4)*12+(X6966=5)*4+(X6966=6)+(X6966=8)+ (X6966=11)*2+(X6966=12)*6+(X6966=31)*24+(X6966=14)+(X6966=22)) MPRINT(TAXSCF): *(X5606=1))) +MAX(0,(X6971 72 The SAS System 13:32 Friday, January 29, 2021 MPRINT(ACONV): *((X6972=2)*52.18+(X6972=3)*26.09+(X6972=4)*12+(X6972=5)*4+(X6972=6)+(X6972=8)+ (X6972=11)*2+(X6972=12)*6+(X6972=31)*24+(X6972=14)+(X6972=22)) MPRINT(TAXSCF): *(X5614=1)))+MAX(0,(X6977 MPRINT(ACONV): *((X6978=2)*52.18+(X6978=3)*26.09+(X6978=4)*12+(X6978=5)*4+(X6978=6)+(X6978=8)+ (X6978=11)*2+(X6978=12)*6+(X6978=31)*24+(X6978=14)+(X6978=22)) MPRINT(TAXSCF): *(X5622=1))) +MAX(0,(X6983 MPRINT(ACONV): *((X6984=2)*52.18+(X6984=3)*26.09+(X6984=4)*12+(X6984=5)*4+(X6984=6)+(X6984=8)+ (X6984=11)*2+(X6984=12)*6+(X6984=31)*24+(X6984=14)+(X6984=22)) MPRINT(TAXSCF): *(X5630=1)))+(X5724)*(X5725=11)*.5; MPRINT(TAXSCF): SP_REGPEN=MAX(0,(X5318 MPRINT(ACONV): *((X5319=2)*52.18+(X5319=3)*26.09+(X5319=4)*12+(X5319=5)*4+(X5319=6)+(X5319=8)+ (X5319=11)*2+(X5319=12)*6+(X5319=31)*24+(X5319=14)+(X5319=22)) MPRINT(TAXSCF): *(X5315=2)*(X5317>=1))) +MAX(0,(X5326 MPRINT(ACONV): *((X5327=2)*52.18+(X5327=3)*26.09+(X5327=4)*12+(X5327=5)*4+(X5327=6)+(X5327=8)+ (X5327=11)*2+(X5327=12)*6+(X5327=31)*24+(X5327=14)+(X5327=22)) MPRINT(TAXSCF): *(X5323=2)*(X5325>=1))) +MAX(0,(X5334 MPRINT(ACONV): *((X5335=2)*52.18+(X5335=3)*26.09+(X5335=4)*12+(X5335=5)*4+(X5335=6)+(X5335=8)+ (X5335=11)*2+(X5335=12)*6+(X5335=31)*24+(X5335=14)+(X5335=22)) MPRINT(TAXSCF): *(X5331=2)*(X5333>=1))) +MAX(0,(X5418 MPRINT(ACONV): *((X5419=2)*52.18+(X5419=3)*26.09+(X5419=4)*12+(X5419=5)*4+(X5419=6)+(X5419=8)+ (X5419=11)*2+(X5419=12)*6+(X5419=31)*24+(X5419=14)+(X5419=22)) MPRINT(TAXSCF): *(X5415=2)*(X5417>=1))); MPRINT(TAXSCF): SP_WITHDRAW=X6566+(X6574*.5)+MAX(0,(X6464 MPRINT(ACONV): *((X6465=2)*52.18+(X6465=3)*26.09+(X6465=4)*12+(X6465=5)*4+(X6465=6)+(X6465=8)+ (X6465=11)*2+(X6465=12)*6+(X6465=31)*24+(X6465=14)+(X6465=22)) MPRINT(TAXSCF): *(X5315=2))) +MAX(0,(X6469 MPRINT(ACONV): *((X6470=2)*52.18+(X6470=3)*26.09+(X6470=4)*12+(X6470=5)*4+(X6470=6)+(X6470=8)+ (X6470=11)*2+(X6470=12)*6+(X6470=31)*24+(X6470=14)+(X6470=22)) MPRINT(TAXSCF): *(X5323=2)))+MAX(0,(X6474 MPRINT(ACONV): *((X6475=2)*52.18+(X6475=3)*26.09+(X6475=4)*12+(X6475=5)*4+(X6475=6)+(X6475=8)+ (X6475=11)*2+(X6475=12)*6+(X6475=31)*24+(X6475=14)+(X6475=22)) MPRINT(TAXSCF): *(X5331=2))) +MAX(0,(X6479 MPRINT(ACONV): *((X6480=2)*52.18+(X6480=3)*26.09+(X6480=4)*12+(X6480=5)*4+(X6480=6)+(X6480=8)+ (X6480=11)*2+(X6480=12)*6+(X6480=31)*24+(X6480=14)+(X6480=22)) MPRINT(TAXSCF): *(X5415=2)))+MAX(0,(X6965 MPRINT(ACONV): *((X6966=2)*52.18+(X6966=3)*26.09+(X6966=4)*12+(X6966=5)*4+(X6966=6)+(X6966=8)+ (X6966=11)*2+(X6966=12)*6+(X6966=31)*24+(X6966=14)+(X6966=22)) MPRINT(TAXSCF): *(X5606=2))) +MAX(0,(X6971 MPRINT(ACONV): *((X6972=2)*52.18+(X6972=3)*26.09+(X6972=4)*12+(X6972=5)*4+(X6972=6)+(X6972=8)+ (X6972=11)*2+(X6972=12)*6+(X6972=31)*24+(X6972=14)+(X6972=22)) MPRINT(TAXSCF): *(X5614=2)))+MAX(0,(X6977 MPRINT(ACONV): *((X6978=2)*52.18+(X6978=3)*26.09+(X6978=4)*12+(X6978=5)*4+(X6978=6)+(X6978=8)+ (X6978=11)*2+(X6978=12)*6+(X6978=31)*24+(X6978=14)+(X6978=22)) MPRINT(TAXSCF): *(X5622=2))) +MAX(0,(X6983 MPRINT(ACONV): *((X6984=2)*52.18+(X6984=3)*26.09+(X6984=4)*12+(X6984=5)*4+(X6984=6)+(X6984=8)+ (X6984=11)*2+(X6984=12)*6+(X6984=31)*24+(X6984=14)+(X6984=22)) MPRINT(TAXSCF): *(X5630=2)))+(X5724)*(X5725=11)*.5; MPRINT(TAXSCF): * For new tax units need to split up income and determine which new tax unit is assigned which deductions and exemptions. Also need to zero out any variables not relevant to the new tax unit (ex. spouses wages); MPRINT(TAXSCF): IF TAXUNIT IN(1 2) THEN DO; MPRINT(TAXSCF): * age; MPRINT(TAXSCF): IF (TAXUNIT=1) THEN SPAGE=0; MPRINT(TAXSCF): * wages; MPRINT(TAXSCF): IF (TAXUNIT=1 & (R_LABORINC+SP_LABORINC>0)) THEN WSINCOME=MAX(0,X5702)*(R_LABORINC/(R_LABORINC+SP_LABORINC))*(R_LABORINC>0); MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & (R_LABORINC+SP_LABORINC>0)) THEN WSINCOME=MAX(0,X5702)*(SP_LABORINC/(R_LABORINC+SP_LABORINC))*(SP_LABORINC>0); MPRINT(TAXSCF): ELSE WSINCOME=MAX(0,X5702)*.5; 73 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): WSINCSP=0; MPRINT(TAXSCF): * business income; MPRINT(TAXSCF): R_SOLEPROP=(X4106 IN(2 3 4) | (X3113=1 & X3119=2) | (X3213=1 & X3219=2)); MPRINT(TAXSCF): SP_SOLEPROP=(X4706 IN(2 3 4) | (X3114=1 & X3119=2) | (X3214=1 & X3219=2)); MPRINT(TAXSCF): IF (TAXUNIT=1 & (R_BUSINC+SP_BUSINC>0) & (R_SOLEPROP=1 | SP_SOLEPROP=1)) THEN DO; MPRINT(TAXSCF): IF (R_SOLEPROP=1 & SP_SOLEPROP=1) THEN TBUSINC=X5704*(R_BUSINC/(R_BUSINC+SP_BUSINC))*(R_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=1 & SP_SOLEPROP=0) THEN TBUSINC=X5704; MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=0 & SP_SOLEPROP=1) THEN TBUSINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & (R_BUSINC+SP_BUSINC>0) & (R_SOLEPROP=1 | SP_SOLEPROP=1)) THEN DO; MPRINT(TAXSCF): IF (R_SOLEPROP=1 & SP_SOLEPROP=1) THEN TBUSINC=X5704*(SP_BUSINC/(R_BUSINC+SP_BUSINC))*(SP_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=0 & SP_SOLEPROP=1) THEN TBUSINC=X5704; MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=1 & SP_SOLEPROP=0) THEN TBUSINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE TBUSINC=X5704*.5; MPRINT(TAXSCF): * interest, dividends, and capital gains - just split 50-50; MPRINT(TAXSCF): NTAXINC= MAX(0,X5706)*.5; MPRINT(TAXSCF): INTINC= MAX(0,X5708)*.5; MPRINT(TAXSCF): DIVINC= MAX(0,X5710)*.5; MPRINT(TAXSCF): IF X5712=-1 THEN CAPGLINC=0; MPRINT(TAXSCF): ELSE CAPGLINC=X5712*.5; MPRINT(TAXSCF): * rent, royalties, partnership and scorp income; MPRINT(TAXSCF): R_PARTNER_SCORP=(X4106 IN(2 3 4) | (X3113=1 & X3119 IN(1 3 6 11 12 15)) | (X3213=1 & X3219 IN(1 3 6 11 12 15))); MPRINT(TAXSCF): SP_PARTNER_SCORP=(X4106 IN(2 3 4) | (X3114=1 & X3119 IN(1 3 6 11 12 15)) | (X3214=1 & X3219 IN(1 3 6 11 12 15))); MPRINT(TAXSCF): IF (TAXUNIT=1 & (R_BUSINC+SP_BUSINC>0) & (R_PARTNER_SCORP=1 | SP_PARTNER_SCORP=1)) THEN DO; MPRINT(TAXSCF): IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=1) THEN RENTINC=X5714*(R_BUSINC/(R_BUSINC+SP_BUSINC))*(R_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=0) THEN RENTINC=X5714; MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=0 & SP_PARTNER_SCORP=1) THEN RENTINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & (R_BUSINC+SP_BUSINC>0) & (R_PARTNER_SCORP=1 | SP_PARTNER_SCORP=1)) THEN DO; MPRINT(TAXSCF): IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=1) THEN RENTINC=X5714*(SP_BUSINC/(R_BUSINC+SP_BUSINC))*(SP_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=0 & SP_PARTNER_SCORP=1) THEN RENTINC=X5714; MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=0) THEN RENTINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE RENTINC=X5714*.5; MPRINT(TAXSCF): * unemployment income, no questions about unemployed in past 12 months prior to 1998; MPRINT(TAXSCF): IF (TAXUNIT=1) THEN DO; MPRINT(TAXSCF): IF (X6780=1) THEN UNEMPINC=MAX(0,X5716)*(X6784 IN(0 5))+MAX(0,X5716)*(X6784=1)*.5; MPRINT(TAXSCF): ELSE IF (X6780=5 & X6784=1) THEN UNEMPINC=0; MPRINT(TAXSCF): ELSE UNEMPINC=MAX(0,X5716)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2) THEN DO; MPRINT(TAXSCF): IF (X6784=1) THEN UNEMPINC=MAX(0,X5716)*(X6780 IN(0 5))+MAX(0,X5716)*(X6780=1)*.5; MPRINT(TAXSCF): ELSE IF (X6784=5 & X6780=1) THEN UNEMPINC=0; MPRINT(TAXSCF): ELSE UNEMPINC=MAX(0,X5716)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * child support and alimony income; MPRINT(TAXSCF): IF (TAXUNIT=1 & X7377=2) THEN DO; MPRINT(TAXSCF): CHSPALINC=MAX(0,X5718)*(X7392^=2)+MAX(0,X5718)*(X7392=2)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & X7392=2) THEN DO; MPRINT(TAXSCF): CHSPALINC=MAX(0,X5718)*(X7377^=2)+MAX(0,X5718)*(X7377=2)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE CHSPALINC=MAX(0,X5718)*.5; 74 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): * government transfers, split 50/50; MPRINT(TAXSCF): AFDCINC=MAX(0,X5720)*.5; MPRINT(TAXSCF): * other income, split 50/50 - remove other income that is non-taxable, such as scholarships/grants, inheritances/gifts/, support from family or others, also remove IRA/Keogh income; MPRINT(TAXSCF): * special fix for 1992, removing other income coded 14, repayment of debts, it appears the total amount of the debt was reported, not just the interest on the debt; MPRINT(TAXSCF): OTHINC= (X5724)*(X5725 NOT IN(3 11 12 13 28))*.5+(X5726)*(X5727 NOT IN(3 11 12 13 28))*.5; MPRINT(TAXSCF): * social security and pension income, adding in withdrawals from IRA/Keogh/401ks; MPRINT(TAXSCF): R_GSSINC=MAX(0,(X5306 MPRINT(ACONV): *((X5307=2)*52.18+(X5307=3)*26.09+(X5307=4)*12+(X5307=5)*4+(X5307=6)+(X5307=8)+ (X5307=11)*2+(X5307=12)*6+(X5307=31)*24+(X5307=14)+(X5307=22)) MPRINT(TAXSCF): *(X5305>=1))); MPRINT(TAXSCF): SP_GSSINC=MAX(0,(X5311 MPRINT(ACONV): *((X5312=2)*52.18+(X5312=3)*26.09+(X5312=4)*12+(X5312=5)*4+(X5312=6)+(X5312=8)+ (X5312=11)*2+(X5312=12)*6+(X5312=31)*24+(X5312=14)+(X5312=22)) MPRINT(TAXSCF): *(X5310>=1))); MPRINT(TAXSCF): T_GSSINC=MAX(0,((X5306 MPRINT(ACONV): *((X5307=2)*52.18+(X5307=3)*26.09+(X5307=4)*12+(X5307=5)*4+(X5307=6)+(X5307=8)+ (X5307=11)*2+(X5307=12)*6+(X5307=31)*24+(X5307=14)+(X5307=22)) MPRINT(TAXSCF): *(X5305>=1))+(X5311 MPRINT(ACONV): *((X5312=2)*52.18+(X5312=3)*26.09+(X5312=4)*12+(X5312=5)*4+(X5312=6)+(X5312=8)+ (X5312=11)*2+(X5312=12)*6+(X5312=31)*24+(X5312=14)+(X5312=22)) MPRINT(TAXSCF): *(X5310>=1)))); MPRINT(TAXSCF): NOSS_X5722=MAX(0,(X5722-T_GSSINC)); MPRINT(TAXSCF): IF (TAXUNIT=1) THEN DO; MPRINT(TAXSCF): IF (R_REGPEN > 0) THEN PENINC=NOSS_X5722*(R_REGPEN/(R_REGPEN+SP_REGPEN))+R_WITHDRAW; MPRINT(TAXSCF): ELSE IF (R_REGPEN=0 & R_WITHDRAW > 0) THEN PENINC=R_WITHDRAW; MPRINT(TAXSCF): ELSE IF (R_REGPEN=0 & R_WITHDRAW=0 & SP_REGPEN > 0) THEN PENINC=0; MPRINT(TAXSCF): ELSE IF (R_REGPEN=0 & R_WITHDRAW=0 & SP_REGPEN=0) THEN PENINC=NOSS_X5722*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2) THEN DO; MPRINT(TAXSCF): IF (SP_REGPEN > 0) THEN PENINC=NOSS_X5722*(SP_REGPEN/(R_REGPEN+SP_REGPEN))+SP_WITHDRAW; MPRINT(TAXSCF): ELSE IF (SP_REGPEN=0 & SP_WITHDRAW > 0) THEN PENINC=SP_WITHDRAW; MPRINT(TAXSCF): ELSE IF (SP_REGPEN=0 & SP_WITHDRAW=0 & R_REGPEN > 0) THEN PENINC=0; MPRINT(TAXSCF): ELSE IF (SP_REGPEN=0 & SP_WITHDRAW=0 & R_REGPEN=0) THEN PENINC=NOSS_X5722*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): GSSINC=MAX(0,R_GSSINC)*(TAXUNIT=1)+MAX(0,SP_GSSINC)*(TAXUNIT=2); MPRINT(TAXSCF): OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; MPRINT(TAXSCF): NONTAX=NTAXINC+AFDCINC; MPRINT(TAXSCF): RENT=MAX(0,(X602 MPRINT(ACONV): *((X603=2)*52.18+(X603=3)*26.09+(X603=4)*12+(X603=5)*4+(X603=6)+(X603=8)+ (X603=11)*2+(X603=12)*6+(X603=31)*24+(X603=14)+(X603=22)) MPRINT(TAXSCF): ),(X612 MPRINT(ACONV): *((X613=2)*52.18+(X613=3)*26.09+(X613=4)*12+(X613=5)*4+(X613=6)+(X613=8)+ (X613=11)*2+(X613=12)*6+(X613=31)*24+(X613=14)+(X613=22)) MPRINT(TAXSCF): ),(X619 MPRINT(ACONV): *((X620=2)*52.18+(X620=3)*26.09+(X620=4)*12+(X620=5)*4+(X620=6)+(X620=8)+ (X620=11)*2+(X620=12)*6+(X620=31)*24+(X620=14)+(X620=22)) MPRINT(TAXSCF): ), (X708 MPRINT(ACONV): *((X709=2)*52.18+(X709=3)*26.09+(X709=4)*12+(X709=5)*4+(X709=6)+(X709=8)+ (X709=11)*2+(X709=12)*6+(X709=31)*24+(X709=14)+(X709=22)) MPRINT(TAXSCF): ))*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TAXUNIT=0 THEN DO; MPRINT(TAXSCF): R_SOLEPROP=(X4106 IN(2 3 4) | (X3113=1 & X3119=2) | (X3213=1 & X3219=2)); MPRINT(TAXSCF): SP_SOLEPROP=(X4706 IN(2 3 4) | (X3114=1 & X3119=2) | (X3214=1 & X3219=2)); MPRINT(TAXSCF): * Split wages across primary and secondary earner for married filing jointly households; MPRINT(TAXSCF): IF FILESTAT^=2 THEN DO; 75 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): WSINCOME=MAX(0,X5702); MPRINT(TAXSCF): WSINCSP=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF FILESTAT=2 THEN DO; MPRINT(TAXSCF): IF ((R_LABORINC > 0 & SP_LABORINC=0) | (R_LABORINC=0 & SP_LABORINC > 0) | (R_LABORINC=0 & SP_LABORINC=0)) THEN DO; MPRINT(TAXSCF): WSINCOME=MAX(0,X5702); MPRINT(TAXSCF): WSINCSP=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (R_LABORINC > 0 & SP_LABORINC > 0) THEN DO; MPRINT(TAXSCF): WSINCOME=MAX(0,X5702)*(R_LABORINC/(R_LABORINC+SP_LABORINC)); MPRINT(TAXSCF): WSINCSP=MAX(0,X5702)*(SP_LABORINC/(R_LABORINC+SP_LABORINC)); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TBUSINC = X5704; MPRINT(TAXSCF): NTAXINC= MAX(0,X5706); MPRINT(TAXSCF): INTINC= MAX(0,X5708); MPRINT(TAXSCF): DIVINC= MAX(0,X5710); MPRINT(TAXSCF): IF X5712=-1 THEN CAPGLINC=0; MPRINT(TAXSCF): ELSE CAPGLINC=X5712; MPRINT(TAXSCF): RENTINC= X5714; MPRINT(TAXSCF): UNEMPINC = MAX(0,X5716); MPRINT(TAXSCF): CHSPALINC=MAX(0,X5718); MPRINT(TAXSCF): AFDCINC = MAX(0,X5720); MPRINT(TAXSCF): * Starting in 2004, IRA/Keogh/401K type income is not reported in other income, instead withdrawals are reported separately during the questions about the assets, so need to add the withdrawals to pension income. There may be a few withdrawals still reported as other income if the asset account was closed or emptied out during the year prior to the survey.; MPRINT(TAXSCF): * also remove other income that is non-taxable, such as scholarships/grants, inheritances/gifts/, support from family or others; MPRINT(TAXSCF): * special fix for 1992, removing other income coded 14, repayment of debts, it appears the total amount of the debt was report, not just the interest on the debt; MPRINT(TAXSCF): OTHINC= (X5724)*(X5725 NOT IN(3 11 12 13 28))+(X5726)*(X5727 NOT IN(3 11 12 13 28)); MPRINT(TAXSCF): GSSINC=MAX(0,((X5306 MPRINT(ACONV): *((X5307=2)*52.18+(X5307=3)*26.09+(X5307=4)*12+(X5307=5)*4+(X5307=6)+(X5307=8)+ (X5307=11)*2+(X5307=12)*6+(X5307=31)*24+(X5307=14)+(X5307=22)) MPRINT(TAXSCF): *(X5305>=1))+(X5311 MPRINT(ACONV): *((X5312=2)*52.18+(X5312=3)*26.09+(X5312=4)*12+(X5312=5)*4+(X5312=6)+(X5312=8)+ (X5312=11)*2+(X5312=12)*6+(X5312=31)*24+(X5312=14)+(X5312=22)) MPRINT(TAXSCF): *(X5310>=1)))); MPRINT(TAXSCF): IF GSSINC=0 THEN PENINC= MAX(0,X5722)+R_WITHDRAW+SP_WITHDRAW; MPRINT(TAXSCF): ELSE IF (GSSINC > 0) THEN PENINC=MAX(0,(X5722-GSSINC)) +R_WITHDRAW+SP_WITHDRAW; MPRINT(TAXSCF): OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; MPRINT(TAXSCF): NONTAX=NTAXINC+AFDCINC; MPRINT(TAXSCF): RENT=MAX(0,(X602 MPRINT(ACONV): *((X603=2)*52.18+(X603=3)*26.09+(X603=4)*12+(X603=5)*4+(X603=6)+(X603=8)+ (X603=11)*2+(X603=12)*6+(X603=31)*24+(X603=14)+(X603=22)) MPRINT(TAXSCF): ),(X612 MPRINT(ACONV): *((X613=2)*52.18+(X613=3)*26.09+(X613=4)*12+(X613=5)*4+(X613=6)+(X613=8)+ (X613=11)*2+(X613=12)*6+(X613=31)*24+(X613=14)+(X613=22)) MPRINT(TAXSCF): ),(X619 MPRINT(ACONV): *((X620=2)*52.18+(X620=3)*26.09+(X620=4)*12+(X620=5)*4+(X620=6)+(X620=8)+ (X620=11)*2+(X620=12)*6+(X620=31)*24+(X620=14)+(X620=22)) MPRINT(TAXSCF): ), (X708 MPRINT(ACONV): *((X709=2)*52.18+(X709=3)*26.09+(X709=4)*12+(X709=5)*4+(X709=6)+(X709=8)+ (X709=11)*2+(X709=12)*6+(X709=31)*24+(X709=14)+(X709=22)) MPRINT(TAXSCF): )); MPRINT(TAXSCF): END; 76 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): * AGI - note that starting in 2010, AGI questions no longer asked, so using total income minus non-taxable income plus IRA/401k withdrawals as a proxy. No information on adjustments to AGI; MPRINT(TAXSCF): AGI=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC+UNEMPINC+CHSPALINC+OTHINC+PENINC+GSSINC; MPRINT(TAXSCF): IF AGI=-1 THEN AGI=0; MPRINT(TAXSCF): AGIGE50K=(AGI>=50000); MPRINT(TAXSCF): AGICL=1*(AGI < 50000)+2*(50000 <= AGI < 100000)+3*(AGI >= 100000); MPRINT(TAXSCF): * For allocating itemized deductions - mortgage interest, investment interest expense, property taxes, and charitable contributions - between new tax units, assume tax unit with higher income assigned all itemized deductions. Creating a flag here for use in computing deductions later in the program. Using wages, business, and pension income as income measure (all other income components are split 50/50 between the new tax units).; MPRINT(TAXSCF): IF (TAXUNIT IN(1 2)) THEN DO; MPRINT(TAXSCF): R_TINCOME=R_LABORINC+R_BUSINC+R_REGPEN+R_WITHDRAW; MPRINT(TAXSCF): SP_TINCOME=SP_LABORINC+SP_BUSINC+SP_REGPEN+SP_WITHDRAW; MPRINT(TAXSCF): ITEMDEDCT_FLAG=(TAXUNIT=1 & R_TINCOME >= SP_TINCOME) +(TAXUNIT=2 & SP_TINCOME > R_TINCOME); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TAXUNIT=0 THEN ITEMDEDCT_FLAG=1; MPRINT(TAXSCF): * Set personal exemption to one for split households, divide kids among split households, if one, give to both tax units, if even number, split evenly between tax units, if odd number, give more to higher income tax unit; MPRINT(TAXSCF): IF TAXUNIT IN(1 2) THEN DO; MPRINT(TAXSCF): PERSEXP=1; MPRINT(TAXSCF): IF KIDS>1 THEN DO; MPRINT(TAXSCF): IF (KIDSU13>0 & MOD(KIDSU13,2)=0) THEN KIDSU13=KIDSU13/2; MPRINT(TAXSCF): ELSE IF (KIDSU13>0 & MOD(KIDSU13,2)^=0) THEN DO; MPRINT(TAXSCF): KIDSU13=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU13/2,1))+ (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU13/2)-.5); MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (KIDSU17>0 & MOD(KIDSU17,2)=0) THEN KIDSU17=KIDSU17/2; MPRINT(TAXSCF): ELSE IF (KIDSU17>0 & MOD(KIDSU17,2)^=0) THEN DO; MPRINT(TAXSCF): KIDSU17=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU17/2,1))+ (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU17/2)-.5); MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (KIDSU18>0 & MOD(KIDSU18,2)=0) THEN KIDSU18=KIDSU18/2; MPRINT(TAXSCF): ELSE IF (KIDSU18>0 & MOD(KIDSU18,2)^=0) THEN DO; MPRINT(TAXSCF): KIDSU18=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU18/2,1))+ (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU18/2)-.5); MPRINT(TAXSCF): END; MPRINT(TAXSCF): KIDS=KIDSU13+KIDSU17+KIDSU18; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF PERSEXP=1 & MARRIED=1 THEN FILESTAT=3; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS=0 & MARRIED=0 THEN FILESTAT=1; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS>0 & MARRIED=0 THEN FILESTAT=4; MPRINT(TAXSCF): TOTEXPT=PERSEXP+KIDS; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF FILESTAT=0 THEN PUT "MISSING FILING STATUS " Y1= X5744= X5746= TAXUNIT= MARRIED= KIDS= PERSEXP=; MPRINT(TAXSCF): RUN; NOTE: There were 31830 observations read from the data set WORK.SCF. NOTE: The data set WORK.SCF has 31830 observations and 5393 variables. NOTE: DATA statement used (Total process time): real time 2.07 seconds cpu time 0.93 seconds MPRINT(TAXSCF): * Create tax units based on NPEU members. If there are multiple NPEU members, need to allocate 77 The SAS System 13:32 Friday, January 29, 2021 income, assets, and debt across the members; MPRINT(TAXSCF): DATA TEMP NPEU; MPRINT(TAXSCF): SET SCF(WHERE=(TAXUNIT IN(0 1) & X7050 >=1)); MPRINT(TAXSCF): file "null.txt"; MPRINT(TAXSCF): TAXUNIT=2; MPRINT(TAXSCF): ARRAY NPEUAGE {*} X110 X116 X122 X128 X134 X204 X210 X216 X222 X228; MPRINT(TAXSCF): ARRAY LIVEWITH {*} X112 X118 X124 X130 X136 X206 X212 X218 X224 X230; MPRINT(TAXSCF): ARRAY FINDEP {*} X113 X119 X125 X131 X137 X207 X213 X219 X225 X231; MPRINT(TAXSCF): DO I=1 TO DIM(LIVEWITH); MPRINT(TAXSCF): IF LIVEWITH{I} IN(1 2 3 4) & FINDEP{I} IN(2 3 4 5) THEN DO; MPRINT(TAXSCF): TAXUNIT=TAXUNIT+1; MPRINT(TAXSCF): TUAGE=NPEUAGE{I}; MPRINT(TAXSCF): SPAGE=0; MPRINT(TAXSCF): OUTPUT NPEU; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): RUN; NOTE: The file "null.txt" is: Filename=/disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code/null.txt, Owner Name=taxsim,Group Name=taxsim, Access Permission=-rw-r--r--, Last Modified=29Jan2021:13:32:11 NOTE: 0 records were written to the file "null.txt". NOTE: There were 3335 observations read from the data set WORK.SCF. WHERE TAXUNIT in (0, 1) and (X7050>=1); NOTE: The data set WORK.TEMP has 0 observations and 5393 variables. NOTE: The data set WORK.NPEU has 4465 observations and 5393 variables. NOTE: DATA statement used (Total process time): real time 0.19 seconds cpu time 0.17 seconds MPRINT(TAXSCF): DATA NPEU; MPRINT(TAXSCF): SET NPEU; MPRINT(TAXSCF): ARRAY INCTYPES {*} WSINCOME WSINCSP TBUSINC INTINC NTAXINC DIVINC RENTINC UNEMPINC AFDCINC GSSINC PENINC OTHINC CAPGLINC; MPRINT(TAXSCF): DO I=1 TO DIM(INCTYPES); MPRINT(TAXSCF): INCTYPES{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Allocate NPEU wage income across all NPEU members less than 70 years old. If only other type of income is Social Security, allocate amount across NPEU members age 62 or more. Otherwise, allocate total amount of nonwage income divided by the number of other types of income to each type of income equally to each NPEU member; MPRINT(TAXSCF): NUMU70=(0=62 & X113=5)+(X116>=62 & X119=5)+(X122>=62 & X125=5) +(X128>=62 & X131=5)+(X134>=62 & X137=5)+(X204>=62 & X207=5) +(X210>=62 & X213=5)+(X216>=62 & X219=5)+(X222>=62 & X225=5) +(X228>=62 & X231=5); MPRINT(TAXSCF): NUMINCTYPES=(X6406=1)+(X6407=1)+(X6408=1)+(X6409=1)+(X6410=1)+(X6411=1) +(X6412=1)+(X6413=1)+(X6414 > 5); MPRINT(TAXSCF): IF (NUMU70 > 0) THEN WSINCOME=(MAX(0,X6403)/NUMU70)*(TUAGE < 70); MPRINT(TAXSCF): ELSE WSINCOME=(MAX(0,X6403)/X7050); MPRINT(TAXSCF): IF (X6415 > 0 & NUMINCTYPES > 0) THEN DO; MPRINT(TAXSCF): IF (NUMGE62 > 0) THEN GSSINC=(X6406=1)*((MAX(0,X6415)/(NUMINCTYPES))/NUMGE62)*(TUAGE>=62); MPRINT(TAXSCF): ELSE GSSINC=(X6406=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): TBUSINC=(X6412=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): INTINC=(X6410=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); 78 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): DIVINC=(X6411=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): RENTINC=(X6413=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): PENINC=(X6407=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050) +(X6408=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): AFDCINC=(X6409=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): CAPGLINC=(X6414 IN(13))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): UNEMPINC=(X6414 IN(10))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): OTHINC=(X6414 IN(11 12 15))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): END; MPRINT(TAXSCF): OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; MPRINT(TAXSCF): NONTAX=NTAXINC+AFDCINC; MPRINT(TAXSCF): * All NPEU tax units take the standard deduction, have one personal exemption, and have filing status of single; MPRINT(TAXSCF): ITEMDEDCT_FLAG=0; MPRINT(TAXSCF): PERSEXP=1; MPRINT(TAXSCF): TOTEXPT=1; MPRINT(TAXSCF): KIDS=0; MPRINT(TAXSCF): KIDSU13=0; MPRINT(TAXSCF): KIDSU17=0; MPRINT(TAXSCF): KIDSU18=0; MPRINT(TAXSCF): FILESTAT=1; MPRINT(TAXSCF): AGI=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC+UNEMPINC+CHSPALINC+OTHINC+PENINC+GSSINC; MPRINT(TAXSCF): IF AGI=-1 THEN AGI=0; MPRINT(TAXSCF): AGIGE50K=(AGI>=50000); MPRINT(TAXSCF): AGICL=1*(AGI < 50000)+2*(50000 <= AGI < 100000)+3*(AGI >= 100000); MPRINT(TAXSCF): RUN; NOTE: There were 4465 observations read from the data set WORK.NPEU. NOTE: The data set WORK.NPEU has 4465 observations and 5396 variables. NOTE: DATA statement used (Total process time): real time 0.11 seconds cpu time 0.11 seconds MPRINT(TAXSCF): * Add NPEU tax units; MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF NPEU; MPRINT(TAXSCF): RUN; NOTE: There were 31830 observations read from the data set WORK.SCF. NOTE: There were 4465 observations read from the data set WORK.NPEU. NOTE: The data set WORK.SCF has 36295 observations and 5396 variables. NOTE: DATA statement used (Total process time): real time 0.70 seconds cpu time 0.70 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): ************Itemized deductions; MPRINT(TAXSCF): IF ITEMDEDCT_FLAG=1 THEN DO; MPRINT(TAXSCF): ************Mortgage interest deduction; MPRINT(TAXSCF): * Convert real estate taxes on primary residence into a yearly amount; MPRINT(TAXSCF): RESTAXM1=0; MPRINT(TAXSCF): IF (X721 > 0) THEN DO; MPRINT(TAXSCF): RESTAXM1=X721 MPRINT(ACONV): *((X722=2)*52.18+(X722=3)*26.09+(X722=4)*12+(X722=5)*4+(X722=6)+(X722=8)+ (X722=11)*2+(X722=12)*6+(X722=31)*24+(X722=14)+(X722=22)) MPRINT(TAXSCF): ; 79 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Create arrays for various mortgage loan components; MPRINT(TAXSCF): ARRAY TLMTH {*} TLMTHM1 TLMTHM2 TLMTHM3; MPRINT(TAXSCF): ARRAY CMOPAY {*} CMOPAYM1 CMOPAYM2 CMOPAYM3; MPRINT(TAXSCF): ARRAY PAYLFT {*} PAYLFTM1 PAYLFTM2 PAYLFTM3; MPRINT(TAXSCF): ARRAY AMTOWE {*} AMTOWEM1 AMTOWEM2 AMTOWEM3; MPRINT(TAXSCF): ARRAY AMTOWE_1 {*} AMTOWE_1M1 AMTOWE_1M2 AMTOWE_1M3; MPRINT(TAXSCF): ARRAY AINTDCT {*} AINTDCTM1 AINTDCTM2 AINTDCTM3; MPRINT(TAXSCF): ARRAY LNAGE {*} LNAGEM1 LNAGEM2 LNAGEM3; MPRINT(TAXSCF): ARRAY CURBAL {*} CURBALM1 CURBALM2 CURBALM3; MPRINT(TAXSCF): ARRAY CURBAL_1 {*} CURBAL_1M1 CURBAL_1M2 CURBAL_1M3; MPRINT(TAXSCF): ARRAY CINTDCT {*} CINTDCTM1 CINTDCTM2 CINTDCTM3; MPRINT(TAXSCF): ARRAY DCTDIFF {*} DCTDIFFM1 DCTDIFFM2 DCTDIFFM3; MPRINT(TAXSCF): ARRAY SINTDCT {*} SINTDCTM1 SINTDCTM2 SINTDCTM3; MPRINT(TAXSCF): ARRAY AVINTDCT {*} AVINTDCTM1 AVINTDCTM2 AVINTDCTM3; MPRINT(TAXSCF): ARRAY NMPMT {*} X807 X907 X1007; MPRINT(TAXSCF): ARRAY NMYR {*} X806 X906 X1006; MPRINT(TAXSCF): ARRAY REGPAYF {*} X809 X909 X1009; MPRINT(TAXSCF): ARRAY REGPAY {*} X808 X908 X1008; MPRINT(TAXSCF): ARRAY TYPAYF {*} X814 X914 X1014; MPRINT(TAXSCF): ARRAY TYPAY {*} X813 X913 X1013; MPRINT(TAXSCF): ARRAY LNSTMN {*} X801 X901 X1001; MPRINT(TAXSCF): ARRAY LNSTYR {*} X802 X902 X1002; MPRINT(TAXSCF): ARRAY HBALLN {*} X811 X911 X1011; MPRINT(TAXSCF): ARRAY BALLN {*} X812 X912 X1012; MPRINT(TAXSCF): ARRAY HAVELN {*} X723 X830 X931; MPRINT(TAXSCF): ARRAY AMTBORR {*} X804 X904 X1004; MPRINT(TAXSCF): ARRAY JAMTBORR {*} J804 J904 J1004; MPRINT(TAXSCF): ARRAY AMTOUT {*} X805 X905 X1005; MPRINT(TAXSCF): ARRAY JAMTOUT {*} J805 J905 J1005; MPRINT(TAXSCF): ARRAY INTRATE {*} X816 X916 X1016; MPRINT(TAXSCF): ARRAY ONSCHED {*} X7571 X7570 X7569; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTH); MPRINT(TAXSCF): TLMTH{I}=0; MPRINT(TAXSCF): CMOPAY{I}=0; MPRINT(TAXSCF): PAYLFT{I}=0; MPRINT(TAXSCF): AMTOWE{I}=0; MPRINT(TAXSCF): AMTOWE_1{I}=0; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): LNAGE{I}=0; MPRINT(TAXSCF): CURBAL{I}=0; MPRINT(TAXSCF): CURBAL_1{I}=0; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): DCTDIFF{I}=0; MPRINT(TAXSCF): SINTDCT{I}=0; MPRINT(TAXSCF): AVINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): NUMORT=(X723=1)+(X830=1)+(X931=1); MPRINT(TAXSCF): TOTAMTOUTM=0; MPRINT(TAXSCF): TOTDEDCTM=0; MPRINT(TAXSCF): GRFAMTOUTM=0; MPRINT(TAXSCF): A17AMTOUTM=0; MPRINT(TAXSCF): HAAMTOUTM=0; MPRINT(TAXSCF): DO I=1 TO DIM(NMPMT); MPRINT(TERMCON): IF (NMYR{I}=0 & NMPMT{I}=0) THEN DO; MPRINT(TERMCON): TLMTH{I}=0; MPRINT(TERMCON): END; 80 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TERMCON): ELSE IF (NMYR{I}^=0|NMPMT{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYR{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYR{I}=-1) THEN DO; MPRINT(TERMCON): TLMTH{I}=NMYR{I}; MPRINT(TERMCON): IF (NMPMT{I}=0) THEN DO; MPRINT(TERMCON): NMPMT{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYR{I}>0) THEN DO; MPRINT(TERMCON): TLMTH{I}=NMYR{I}*12; MPRINT(TERMCON): IF (NMPMT{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYF{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMT{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYF{I}=-7) THEN DO; MPRINT(TERMCON): NMPMT{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYF{I}=8) THEN DO; MPRINT(TERMCON): NMPMT{I}=1; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYF{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYF{I}=1) THEN NMPMT{I}=TLMTH{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=2) THEN NMPMT{I}=TLMTH{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=3) THEN NMPMT{I}=TLMTH{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=4) THEN NMPMT{I}=TLMTH{I}; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=5) THEN NMPMT{I}=TLMTH{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=6) THEN NMPMT{I}=TLMTH{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=20) THEN NMPMT{I}=TLMTH{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=21) THEN NMPMT{I}=TLMTH{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=11) THEN NMPMT{I}=TLMTH{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=12) THEN NMPMT{I}=TLMTH{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=23) THEN NMPMT{I}=TLMTH{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=24) THEN NMPMT{I}=TLMTH{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=25) THEN NMPMT{I}=TLMTH{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=31) THEN NMPMT{I}=TLMTH{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=18) THEN NMPMT{I}=TLMTH{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=0) THEN NMPMT{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYF{I}>.Z & REGPAYF{I}^=-1 & REGPAYF{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMT{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTH{I}= REGPAYF{I}= NMPMT{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTH{I}>.Z & TLMTH{I}<-2) THEN DO; MPRINT(MOCONV): NMPMT{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTH{I}= REGPAYF{I}= NMPMT{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTH{I}<=.Z) THEN NMPMT{I}=TLMTH{I}; MPRINT(MOCONV): ELSE IF (TLMTH{I}^=-1 & TLMTH{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYF{I}= TLMTH{I}= "SETTING AMT=."; MPRINT(MOCONV): NMPMT{I}=.; MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMT{I}=-1) THEN DO; MPRINT(TERMCON): TLMTH{I}=-1; MPRINT(TERMCON): IF (NMYR{I}=0) THEN DO; 81 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TERMCON): NMYR{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMT{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYF{I}; MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYF{I}>0) THEN PFREQ=TYPAYF{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTH{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; MPRINT(TERMCON): TLMTH{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): IF (NMPMT{I}>0) THEN DO; MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTH{I}=NMPMT{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}))); MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12))); MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTH{I}=NMPMT{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTH{I}=NMPMT{I}*2/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTH{I}=NMPMT{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTH{I}=NMPMT{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTH{I}=NMPMT{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTH{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): TLMTH{I}=NMPMT{I}; MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMT{I}= PFREQ= TLMTH{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMT{I}>.Z & NMPMT{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTH{I}=NMPMT{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMT{I}= PFREQ= TLMTH{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMT{I}=0) THEN TLMTH{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMT{I}<=.Z) THEN TLMTH{I}=NMPMT{I}; MPRINT(IMOCONV): ELSE IF (NMPMT{I}^=-1 & NMPMT{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMT{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTH{I}=.; MPRINT(IMOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTH{I}>0) THEN DO; MPRINT(TERMCON): NMYR{I}=MAX(1,INT(.5+(TLMTH{I}/12))); MPRINT(TERMCON): TLMTH{I}=MAX(1,ROUND(TLMTH{I})); MPRINT(TERMCON): END; MPRINT(TERMCON): IF (NMYR{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMT{I}= NMYR{I}= TLMTH{I}= REGPAYF{I}= REGPAY{I}= TYPAYF{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAY{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYF{I}=1) THEN CMOPAY{I}=REGPAY{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=2) THEN CMOPAY{I}=REGPAY{I}*52/12; 82 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (REGPAYF{I}=3) THEN CMOPAY{I}=REGPAY{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=4) THEN CMOPAY{I}=REGPAY{I}; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=5) THEN CMOPAY{I}=REGPAY{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=6) THEN CMOPAY{I}=REGPAY{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=20) THEN CMOPAY{I}=REGPAY{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=21) THEN CMOPAY{I}=REGPAY{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=8) THEN CMOPAY{I}=REGPAY{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=11) THEN CMOPAY{I}=REGPAY{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=12) THEN CMOPAY{I}=REGPAY{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=23) THEN CMOPAY{I}=REGPAY{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=24) THEN CMOPAY{I}=REGPAY{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=25) THEN CMOPAY{I}=REGPAY{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=31) THEN CMOPAY{I}=REGPAY{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=18) THEN CMOPAY{I}=REGPAY{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=0) THEN CMOPAY{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYF{I}>.Z & REGPAYF{I}^=-1 & REGPAYF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAY{I}= REGPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAY{I}>.Z & REGPAY{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAY{I}= REGPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAY{I}<=.Z) THEN CMOPAY{I}=REGPAY{I}; MPRINT(MOCONV): ELSE IF (REGPAY{I}^=-1 & REGPAY{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYF{I}= REGPAY{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(MOCONV): IF (TYPAYF{I}=1) THEN CMOPAY{I}=TYPAY{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=2) THEN CMOPAY{I}=TYPAY{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=3) THEN CMOPAY{I}=TYPAY{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=4) THEN CMOPAY{I}=TYPAY{I}; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=5) THEN CMOPAY{I}=TYPAY{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=6) THEN CMOPAY{I}=TYPAY{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=20) THEN CMOPAY{I}=TYPAY{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=21) THEN CMOPAY{I}=TYPAY{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=8) THEN CMOPAY{I}=TYPAY{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=11) THEN CMOPAY{I}=TYPAY{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=12) THEN CMOPAY{I}=TYPAY{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=23) THEN CMOPAY{I}=TYPAY{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=24) THEN CMOPAY{I}=TYPAY{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=25) THEN CMOPAY{I}=TYPAY{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=31) THEN CMOPAY{I}=TYPAY{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=18) THEN CMOPAY{I}=TYPAY{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=0) THEN CMOPAY{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYF{I}>.Z & TYPAYF{I}^=-1 & TYPAYF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAY{I}= TYPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAY{I}>.Z & TYPAY{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAY{I}= TYPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAY{I}<=.Z) THEN CMOPAY{I}=TYPAY{I}; MPRINT(MOCONV): ELSE IF (TYPAY{I}^=-1 & TYPAY{I}^=-2) THEN DO; 83 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYF{I}= TYPAY{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF NMYR{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFT{I}=(TLMTH{I}-((2019-LNSTYR{I})*12)); MPRINT(TAXSCF): LNAGE{I}=TLMTH{I}-PAYLFT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFT{I}=0; MPRINT(TAXSCF): LNAGE{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): file "null.txt"; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((X723=1) & (X810 IN(1 2 3)) & TLMTHM1 > 0 & X816 > 0) THEN DO; MPRINT(TAXSCF): IF (X811=1) THEN DO; MPRINT(MORTPAY): AMOPAYM1=ROUND((MORT((X804),.,((X816/10000)/12),(TLMTHM1))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (CMOPAYM1 > AMOPAYM1) THEN CMOPAYM1=AMOPAYM1; MPRINT(TAXSCF): 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= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X811=2) THEN DO; MPRINT(TAXSCF): IF (X804 > X812) THEN ADJBORR=X804-X812; MPRINT(TAXSCF): ELSE IF (X804 < X812) THEN ADJBORR=X804; MPRINT(TAXSCF): IF ADJBORR > 0 THEN MPRINT(MORTPAY): AMOPAYM1=ROUND((MORT((ADJBORR),.,((X816/10000)/12),(TLMTHM1))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (X804=X812) THEN AMOPAYM1=((X804)*(X816/10000))/12; MPRINT(TAXSCF): IF (CMOPAYM1 > AMOPAYM1) THEN CMOPAYM1=AMOPAYM1; MPRINT(TAXSCF): 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= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * 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); MPRINT(TAXSCF): * NOT INCLUDING LAND CONTRACTS; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELN); MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTDCT{I}=CMOPAY{I}*12; MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; 84 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELN{I}=1 & HBALLN{I} IN(1 2) & NMYR{I} NOT IN(0 -1 -7) & INTRATE{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & PAYLFT{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAY{I} < AMTBORR{I}*.005) THEN CMOPAY{I}=MAX(REGPAY{I},TYPAY{I}); MPRINT(TAXSCF): 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})); MPRINT(TAXSCF): 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))); MPRINT(TAXSCF): IF LNSTYR{I}^=2019 THEN AINTDCT{I}=(CMOPAY{I}*12)-(AMTOWE_1{I}-AMTOWE{I}); MPRINT(TAXSCF): ELSE IF LNSTYR{I}=2019 THEN AINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTH{I} < 0 | CMOPAY{I} < 0 | PAYLFT{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWE{I}=0; MPRINT(TAXSCF): AMTOWE_1{I}=0; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & AMTBORR{I} > 0 & LNAGE{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTDCT{I}=(CMOPAY{I}*12)-(CURBAL_1{I}-CURBAL{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTH{I} < 0 | AMTBORR{I} < 0 | LNAGE{I} < 0) THEN DO; MPRINT(TAXSCF): CURBAL{I}=0; MPRINT(TAXSCF): CURBAL_1{I}=0; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUT{I} > 0 & INTRATE{I} > 0) THEN SINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): ELSE SINTDCT{I}=0; MPRINT(TAXSCF): * 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 the home was not purchased in the survey year. If the home was purchased in the survey year, set deduction to zero.; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & PAYLFT{I}=0) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=CURBAL_1{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): AINTDCT{I}=CINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & LNSTYR{I}=2019 & X720=2019) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): SINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & LNSTYR{I}=2019) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTDCT{I} < 0 | CINTDCT{I} < 0) & CURBAL{I} > 0 & CURBAL_1{I} > 0) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=CURBAL_1{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): AINTDCT{I}=CINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTDCT{I} < 0 | CINTDCT{I} < 0) & (CURBAL{I} <= 0 & CURBAL_1{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; 85 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCT{I} > 0 & CINTDCT{I} > 0) THEN DCTDIFF{I}=CINTDCT{I}-SINTDCT{I}; MPRINT(TAXSCF): ELSE DCTDIFF{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELN{I}=1 & (NMYR{I} IN(-1 -7) | NMPMT{I} IN(-1 -7)) & AMTOUT{I} > 0 & INTRATE{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELN{I}=1 & (INTRATE{I}=-1)) THEN DO; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): SINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest deduction; MPRINT(TAXSCF): IF ((CINTDCT{I} + AINTDCT{I} + SINTDCT{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTDCT{I}=(CINTDCT{I}+AINTDCT{I}+SINTDCT{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTDCT{I}=0; MPRINT(TAXSCF): * Constraining interest deduction amount to be no more than the reported year 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.; MPRINT(TAXSCF): IF (HAVELN{I}=1 & AVINTDCT{I} > 0 & CMOPAY{I} > 0 & (AVINTDCT{I} > CMOPAY{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTDCT{I}=CMOPAY{I}*12; MPRINT(TAXSCF): CINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): SINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELN{I}=1 & AVINTDCT{I} > 0 & AMTOUT{I} > 0 & (AVINTDCT{I} > .25*AMTOUT{I})) THEN DO; MPRINT(TAXSCF): AVINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): CINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELN{I}=1 & Y1=YY1*10+1 & AVINTDCT{I}=0 & NMYR{I}^=2019) 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}= /; MPRINT(TAXSCF): * 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; MPRINT(TAXSCF): IF (X702=1 & X714=1 & X7135=5) THEN DO; MPRINT(TAXSCF): TOTDEDCTM=TOTDEDCTM+(AVINTDCT{I}/X715)*(HAVELN{I}=1); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE TOTDEDCTM=TOTDEDCTM+AVINTDCT{I}; MPRINT(TAXSCF): * Total amount outstanding on loans; MPRINT(TAXSCF): TOTAMTOUTM=TOTAMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): * Need to divide mortgages up by date, pre 10/13/87 mortgages are considered grandfathered debt by IRS, and different limits apply to mortgages taken out after 12/15/2017; MPRINT(TAXSCF): IF ((LNSTYR{I}=1987 & LNSTMN{I} < 10) | (LNSTYR{I} < 1987)) THEN DO; MPRINT(TAXSCF): GRFAMTOUTM=GRFAMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((LNSTYR{I}=2017 & LNSTMN{I}=12) | (LNSTYR{I} > 2017)) THEN DO; MPRINT(TAXSCF): A17AMTOUTM=A17AMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((LNSTYR{I}=1987 & LNSTMN {I} >= 10) | (1987 < LNSTYR{I} < 2017) | (LNSTYR{I}=2017 & LNSTMN{I}<=11)) THEN DO; MPRINT(TAXSCF): HAAMTOUTM=HAAMTOUTM+AMTOUT{I}; 86 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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, 3, or 4 as home acquisition debt (same as a mortgage, counts toward mortgage balance limit), while HELOCs with other use codes counted as home equity debt. Ignoring the mopup as we dont know if that LOC is secured by a home; MPRINT(TAXSCF): ARRAY CMOPAYL {*} CMOPAYL1 CMOPAYL2 CMOPAYL3; MPRINT(TAXSCF): ARRAY SINTDCTL {*} SINTDCTL1 SINTDCTL2 SINTDCTL3; MPRINT(TAXSCF): ARRAY AQDBT {*} AQDBTL1 AQDBTL2 AQDBTL3; MPRINT(TAXSCF): ARRAY AQINT {*} AQINTL1 AQINTL2 AQINTL3; MPRINT(TAXSCF): ARRAY EQDBT {*} EQDBTL1 EQDBTL2 EQDBTL3; MPRINT(TAXSCF): ARRAY SBYHOME {*} X1103 X1114 X1125; MPRINT(TAXSCF): ARRAY DOOWE {*} X1105 X1116 X1127; MPRINT(TAXSCF): ARRAY LNPURP {*} X1106 X1117 X1128; MPRINT(TAXSCF): ARRAY AMTOUTL {*} X1108 X1119 X1130; MPRINT(TAXSCF): ARRAY TYPAYL {*} X1109 X1120 X1131; MPRINT(TAXSCF): ARRAY TYPAYLF {*} X1110 X1121 X1132; MPRINT(TAXSCF): ARRAY INTRATEL {*} X1111 X1122 X1133; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): TOTAQDBTL=0; MPRINT(TAXSCF): TOTEQDBTL=0; MPRINT(TAXSCF): TOTDEDCTL=0; MPRINT(TAXSCF): TOTAQDEDCTL=0; MPRINT(TAXSCF): TOTLOCINVEX=0; MPRINT(TAXSCF): DO I=1 TO DIM(CMOPAYL); MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): AQDBT{I}=0; MPRINT(TAXSCF): AQINT{I}=0; MPRINT(TAXSCF): EQDBT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (X1101=1) THEN DO; MPRINT(TAXSCF): DO I=1 TO DIM(SBYHOME); MPRINT(TAXSCF): IF (SBYHOME{I}=1 & DOOWE{I}=1) THEN DO; MPRINT(TAXSCF): IF (TYPAYL{I} > 0) THEN DO; MPRINT(MOCONV): IF (TYPAYLF{I}=1) THEN CMOPAYL{I}=TYPAYL{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=2) THEN CMOPAYL{I}=TYPAYL{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=3) THEN CMOPAYL{I}=TYPAYL{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=4) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=5) THEN CMOPAYL{I}=TYPAYL{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=6) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=20) THEN CMOPAYL{I}=TYPAYL{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=21) THEN CMOPAYL{I}=TYPAYL{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=8) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=11) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=12) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=23) THEN CMOPAYL{I}=TYPAYL{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=24) THEN CMOPAYL{I}=TYPAYL{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=25) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=31) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=18) THEN CMOPAYL{I}=TYPAYL{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=0) THEN CMOPAYL{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}>.Z & TYPAYLF{I}^=-1 & TYPAYLF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}>.Z & TYPAYL{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; 87 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}<=.Z) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYL{I}^=-1 & TYPAYL{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYLF{I}= TYPAYL{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TYPAYL{I} IN(0 -1 -2)) THEN DO; MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (INTRATEL{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=((INTRATEL{I}/10000)*AMTOUTL{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEL{I} IN(0 -1)) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTL{I} > 0 & CMOPAYL{I} > 0 & SINTDCTL{I} > CMOPAYL{I}*12) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=CMOPAYL{I}*12; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (LNPURP{I} IN(1 3 4)) THEN DO; MPRINT(TAXSCF): AQDBT{I}=AMTOUTL{I}; MPRINT(TAXSCF): AQINT{I}=SINTDCTL{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (LNPURP{I} NOT IN(1 3 4)) THEN DO; MPRINT(TAXSCF): EQDBT{I}=AMTOUTL{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTDEDCTL=TOTDEDCTL+SINTDCTL{I}; MPRINT(TAXSCF): TOTAQDEDCTL=TOTAQDEDCTL+AQINT{I}; MPRINT(TAXSCF): TOTAQDBTL=TOTAQDBTL+AQDBT{I}; MPRINT(TAXSCF): TOTEQDBTL=TOTEQDBTL+EQDBT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * Dropped third column of grid for 2010 forward; MPRINT(TAXSCF): * Create arrays for various other property loan components; MPRINT(TAXSCF): ARRAY TLMTHO {*} TLMTHO1 TLMTHO2; MPRINT(TAXSCF): ARRAY CMOPAYO {*} CMOPAYO1 CMOPAYO2; MPRINT(TAXSCF): ARRAY AMOPAYO {*} AMOPAYO1 AMOPAYO2; MPRINT(TAXSCF): ARRAY PAYLFTO {*} PAYLFTO1 PAYLFTO2; MPRINT(TAXSCF): ARRAY AMTOWEO {*} AMTOWEO1 AMTOWEO2; MPRINT(TAXSCF): ARRAY AMTOWE_1O {*} AMTOWE_1O1 AMTOWE_1O2; MPRINT(TAXSCF): ARRAY AINTDCTO {*} AINTDCTO1 AINTDCTO2; MPRINT(TAXSCF): ARRAY LNAGEO {*} LNAGEO1 LNAGEO2; MPRINT(TAXSCF): ARRAY CURBALO {*} CURBALO1 CURBALO2; MPRINT(TAXSCF): ARRAY CURBAL_1O {*} CURBAL_1O1 CURBAL_1O2; MPRINT(TAXSCF): ARRAY CINTDCTO {*} CINTDCTO1 CINTDCTO2; MPRINT(TAXSCF): ARRAY DCTDIFFO {*} DCTDIFFO1 DCTDIFFO2; MPRINT(TAXSCF): ARRAY SINTDCTO {*} SINTDCTO1 SINTDCTO2; MPRINT(TAXSCF): ARRAY AVINTDCTO {*} AVINTDCTO1 AVINTDCTO2; MPRINT(TAXSCF): ARRAY QUALPROP {*} QPROP1 QPROP2; MPRINT(TAXSCF): ARRAY QUALPINV {*} QPINV1 QPINV2; MPRINT(TAXSCF): ARRAY ADJBORRO {*} ADJBORRO1 ADJBORRO2; MPRINT(TAXSCF): ARRAY NMPMTO {*} X1717 X1817; MPRINT(TAXSCF): ARRAY NMYRO {*} X1716 X1816; 88 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ARRAY REGPAYFO {*} X1719 X1819; MPRINT(TAXSCF): ARRAY REGPAYO {*} X1718 X1818; MPRINT(TAXSCF): ARRAY TYPAYFO {*} X1724 X1824; MPRINT(TAXSCF): ARRAY TYPAYO {*} X1723 X1823; MPRINT(TAXSCF): ARRAY LNSTMNO {*} X1712 X1812; MPRINT(TAXSCF): ARRAY LNSTYRO {*} X1713 X1813; MPRINT(TAXSCF): ARRAY HBALLNO {*} X1721 X1821; MPRINT(TAXSCF): ARRAY BALLNO {*} X1722 X1822; MPRINT(TAXSCF): ARRAY AMTBORRO {*} X1714 X1814; MPRINT(TAXSCF): ARRAY JAMTBORRO {*} J1714 J1814; MPRINT(TAXSCF): ARRAY AMTOUTO {*} X1715 X1815; MPRINT(TAXSCF): ARRAY JAMTOUTO {*} J1715 J1815; MPRINT(TAXSCF): ARRAY HAVELNO {*} X1711 X1811; MPRINT(TAXSCF): ARRAY INTRATEO {*} X1726 X1826; MPRINT(TAXSCF): ARRAY ONSCHEDO {*} X7554 X7553; MPRINT(TAXSCF): ARRAY HINCOMEO {*} X1729 X1829; MPRINT(TAXSCF): ARRAY INCOMEO {*} X1730 X1830; MPRINT(TAXSCF): ARRAY PROPTYPE {*} X1703 X1803; MPRINT(TAXSCF): ARRAY PERPROP {*} X1705 X1805; MPRINT(TAXSCF): ARRAY PROPVAL {*} X1706 X1806; MPRINT(TAXSCF): ARRAY TAXINS {*} X1720 X1820; MPRINT(TAXSCF): ARRAY PURCHYRO {*} X1708 X1808; MPRINT(TAXSCF): ARRAY LIMFLAG {*} LIMFL1 LIMFL2; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTHO); MPRINT(TAXSCF): TLMTHO{I}=0; MPRINT(TAXSCF): CMOPAYO{I}=0; MPRINT(TAXSCF): PAYLFTO{I}=0; MPRINT(TAXSCF): AMTOWEO{I}=0; MPRINT(TAXSCF): AMTOWE_1O{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): LNAGEO{I}=0; MPRINT(TAXSCF): CURBALO{I}=0; MPRINT(TAXSCF): CURBAL_1O{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): DCTDIFFO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): AVINTDCTO{I}=0; MPRINT(TAXSCF): QUALPROP{I}=0; MPRINT(TAXSCF): QUALPINV{I}=0; MPRINT(TAXSCF): ADJBORRO{I}=0; MPRINT(TAXSCF): LIMFLAG{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTAMTOUTO=0; MPRINT(TAXSCF): TOTDEDCTO=0; MPRINT(TAXSCF): QUALOTHPROP=0; MPRINT(TAXSCF): QUALINVPROP=0; MPRINT(TAXSCF): TOTINVPDCT=0; MPRINT(TAXSCF): FMVOP=0; MPRINT(TAXSCF): DO I=1 TO DIM(NMPMTO); MPRINT(TERMCON): IF (NMYRO{I}=0 & NMPMTO{I}=0) THEN DO; MPRINT(TERMCON): TLMTHO{I}=0; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRO{I}^=0|NMPMTO{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRO{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRO{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHO{I}=NMYRO{I}; MPRINT(TERMCON): IF (NMPMTO{I}=0) THEN DO; 89 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TERMCON): NMPMTO{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRO{I}>0) THEN DO; MPRINT(TERMCON): TLMTHO{I}=NMYRO{I}*12; MPRINT(TERMCON): IF (NMPMTO{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYFO{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMTO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFO{I}=-7) THEN DO; MPRINT(TERMCON): NMPMTO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFO{I}=8) THEN DO; MPRINT(TERMCON): NMPMTO{I}=1; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFO{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYFO{I}=1) THEN NMPMTO{I}=TLMTHO{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=2) THEN NMPMTO{I}=TLMTHO{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=3) THEN NMPMTO{I}=TLMTHO{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=4) THEN NMPMTO{I}=TLMTHO{I}; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=5) THEN NMPMTO{I}=TLMTHO{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=6) THEN NMPMTO{I}=TLMTHO{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=20) THEN NMPMTO{I}=TLMTHO{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=21) THEN NMPMTO{I}=TLMTHO{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=11) THEN NMPMTO{I}=TLMTHO{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=12) THEN NMPMTO{I}=TLMTHO{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=23) THEN NMPMTO{I}=TLMTHO{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=24) THEN NMPMTO{I}=TLMTHO{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=25) THEN NMPMTO{I}=TLMTHO{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=31) THEN NMPMTO{I}=TLMTHO{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=18) THEN NMPMTO{I}=TLMTHO{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=0) THEN NMPMTO{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}>.Z & REGPAYFO{I}^=-1 & REGPAYFO{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMTO{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTHO{I}= REGPAYFO{I}= NMPMTO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHO{I}>.Z & TLMTHO{I}<-2) THEN DO; MPRINT(MOCONV): NMPMTO{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTHO{I}= REGPAYFO{I}= NMPMTO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHO{I}<=.Z) THEN NMPMTO{I}=TLMTHO{I}; MPRINT(MOCONV): ELSE IF (TLMTHO{I}^=-1 & TLMTHO{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFO{I}= TLMTHO{I}= "SETTING AMT=."; MPRINT(MOCONV): NMPMTO{I}=.; MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTO{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHO{I}=-1; MPRINT(TERMCON): IF (NMYRO{I}=0) THEN DO; MPRINT(TERMCON): NMYRO{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTO{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYFO{I}; 90 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYFO{I}>0) THEN PFREQ=TYPAYFO{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTHO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; MPRINT(TERMCON): TLMTHO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): IF (NMPMTO{I}>0) THEN DO; MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTHO{I}=NMPMTO{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}))); MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12))); MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTHO{I}=NMPMTO{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTHO{I}=NMPMTO{I}*2/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTHO{I}=NMPMTO{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTHO{I}=NMPMTO{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTHO{I}=NMPMTO{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTHO{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): TLMTHO{I}=NMPMTO{I}; MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMTO{I}= PFREQ= TLMTHO{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}>.Z & NMPMTO{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTHO{I}=NMPMTO{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMTO{I}= PFREQ= TLMTHO{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}=0) THEN TLMTHO{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}<=.Z) THEN TLMTHO{I}=NMPMTO{I}; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}^=-1 & NMPMTO{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMTO{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTHO{I}=.; MPRINT(IMOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTHO{I}>0) THEN DO; MPRINT(TERMCON): NMYRO{I}=MAX(1,INT(.5+(TLMTHO{I}/12))); MPRINT(TERMCON): TLMTHO{I}=MAX(1,ROUND(TLMTHO{I})); MPRINT(TERMCON): END; MPRINT(TERMCON): IF (NMYRO{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMTO{I}= NMYRO{I}= TLMTHO{I}= REGPAYFO{I}= REGPAYO{I}= TYPAYFO{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAYO{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYFO{I}=1) THEN CMOPAYO{I}=REGPAYO{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=2) THEN CMOPAYO{I}=REGPAYO{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=3) THEN CMOPAYO{I}=REGPAYO{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=4) THEN CMOPAYO{I}=REGPAYO{I}; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=5) THEN CMOPAYO{I}=REGPAYO{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=6) THEN CMOPAYO{I}=REGPAYO{I}/12; 91 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=20) THEN CMOPAYO{I}=REGPAYO{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=21) THEN CMOPAYO{I}=REGPAYO{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=8) THEN CMOPAYO{I}=REGPAYO{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=11) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=12) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=23) THEN CMOPAYO{I}=REGPAYO{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=24) THEN CMOPAYO{I}=REGPAYO{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=25) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=31) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=18) THEN CMOPAYO{I}=REGPAYO{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=0) THEN CMOPAYO{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}>.Z & REGPAYFO{I}^=-1 & REGPAYFO{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAYO{I}= REGPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYO{I}>.Z & REGPAYO{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAYO{I}= REGPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYO{I}<=.Z) THEN CMOPAYO{I}=REGPAYO{I}; MPRINT(MOCONV): ELSE IF (REGPAYO{I}^=-1 & REGPAYO{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFO{I}= REGPAYO{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(MOCONV): IF (TYPAYFO{I}=1) THEN CMOPAYO{I}=TYPAYO{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=2) THEN CMOPAYO{I}=TYPAYO{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=3) THEN CMOPAYO{I}=TYPAYO{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=4) THEN CMOPAYO{I}=TYPAYO{I}; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=5) THEN CMOPAYO{I}=TYPAYO{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=6) THEN CMOPAYO{I}=TYPAYO{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=20) THEN CMOPAYO{I}=TYPAYO{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=21) THEN CMOPAYO{I}=TYPAYO{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=8) THEN CMOPAYO{I}=TYPAYO{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=11) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=12) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=23) THEN CMOPAYO{I}=TYPAYO{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=24) THEN CMOPAYO{I}=TYPAYO{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=25) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=31) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=18) THEN CMOPAYO{I}=TYPAYO{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=0) THEN CMOPAYO{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}>.Z & TYPAYFO{I}^=-1 & TYPAYFO{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYO{I}= TYPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYO{I}>.Z & TYPAYO{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYO{I}= TYPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYO{I}<=.Z) THEN CMOPAYO{I}=TYPAYO{I}; MPRINT(MOCONV): ELSE IF (TYPAYO{I}^=-1 & TYPAYO{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYFO{I}= TYPAYO{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; 92 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF NMYRO{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFTO{I}=(TLMTHO{I}-((2019-LNSTYRO{I})*12)); MPRINT(TAXSCF): LNAGEO{I}=TLMTHO{I}-PAYLFTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFTO{I}=0; MPRINT(TAXSCF): LNAGEO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNO); MPRINT(TAXSCF): IF ((HAVELNO{I}=1) & (TAXINS{I} IN(1 2 3)) & TLMTHO{I} > 0 & INTRATEO{I} > 0) THEN DO; MPRINT(TAXSCF): IF (HBALLNO{I}=1) THEN DO; MPRINT(MORTPAY): AMOPAYO{I}=ROUND((MORT((AMTBORRO{I}),.,((INTRATEO{I}/10000)/12),(TLMTHO{I}))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (CMOPAYO{I} > AMOPAYO{I}) THEN CMOPAYO{I}=AMOPAYO{I}; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HBALLNO{I}=5) THEN DO; MPRINT(TAXSCF): IF (AMTBORRO{I} > BALLNO{I}) THEN ADJBORRO{I}=(AMTBORRO{I}-BALLNO{I}); MPRINT(TAXSCF): ELSE IF (AMTBORRO{I} < BALLNO{I}) THEN ADJBORRO{I}=AMTBORRO{I}; MPRINT(TAXSCF): IF ADJBORRO{I} > 0 THEN MPRINT(MORTPAY): AMOPAYO{I}=ROUND((MORT((ADJBORRO{I}),.,((INTRATEO{I}/10000)/12),(TLMTHO{I}))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (AMTBORRO{I}=BALLNO{I}) THEN AMOPAYO{I}=((AMTBORRO{I})*(INTRATEO{I}/10000))/12; MPRINT(TAXSCF): IF (CMOPAYO{I} > AMOPAYO{I}) THEN CMOPAYO{I}=AMOPAYO{I}; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * 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); MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNO); MPRINT(TAXSCF): IF (PROPTYPE{I} IN(12 13 14 21 22 25 40 49 999) & (HINCOMEO{I}=5 | INCOMEO{I}=-1)) | (PROPTYPE{I} IN(12 13 14 21 22 25 40 49 999) & HINCOMEO{I}=1 & INCOMEO{I} < (CMOPAYO{I}*12)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified properties; MPRINT(TAXSCF): QUALPROP{I}=(HAVELNO{I}=1); MPRINT(TAXSCF): QUALOTHPROP=QUALOTHPROP+QUALPROP{I}; MPRINT(TAXSCF): FMVOP=FMVOP+PROPVAL{I}*(HAVELNO{I}=1); MPRINT(TAXSCF): 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; 93 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): SINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & HBALLNO{I} IN(1 5) & NMYRO{I} NOT IN(0 -1 -7) & INTRATEO{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAYO{I} < AMTBORRO{I}*.005) THEN CMOPAYO{I}=MAX(REGPAYO{I},TYPAYO{I}); MPRINT(TAXSCF): 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})); MPRINT(TAXSCF): 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))); MPRINT(TAXSCF): IF LNSTYRO{I}^=2019 THEN AINTDCTO{I}=(CMOPAYO{I}*12)-(AMTOWE_1O{I}-AMTOWEO{I}); MPRINT(TAXSCF): ELSE IF LNSTYRO{I}=2019 THEN AINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | CMOPAYO{I} < 0 | PAYLFTO{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEO{I}=0; MPRINT(TAXSCF): AMTOWE_1O{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & AMTBORRO{I} > 0 & LNAGEO{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTDCTO{I}=(CMOPAYO{I}*12)-(CURBAL_1O{I}-CURBALO{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | AMTBORRO{I} < 0 | LNAGEO{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALO{I}=0; MPRINT(TAXSCF): CURBAL_1O{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): ELSE SINTDCTO{I}=0; MPRINT(TAXSCF): * 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 the home was not purchased in the survey year. If the home was purchased in the survey year, set deduction to zero.; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I}=0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=2019 & PURCHYRO{I}=2019) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=2019) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & CURBALO{I} > 0 & CURBAL_1O{I} > 0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; 94 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & (CURBALO{I} <= 0 & CURBAL_1O{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTO{I} > 0 & CINTDCTO{I} > 0) THEN DCTDIFFO{I}=CINTDCTO{I}-SINTDCTO{I}; MPRINT(TAXSCF): ELSE DCTDIFFO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (NMYRO{I} IN(-1 -7) & NMPMTO{I} IN(-1 -7)) & AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (INTRATEO{I}=-1)) THEN DO; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest deduction; MPRINT(TAXSCF): IF ((CINTDCTO{I} + AINTDCTO{I} + SINTDCTO{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=(CINTDCTO{I}+AINTDCTO{I}+SINTDCTO{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTDCTO{I}=0; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & CMOPAYO{I} > 0 & (AVINTDCTO{I} > CMOPAYO{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): SINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & AMTOUTO{I} > 0 & (AVINTDCTO{I} > .25*AMTOUTO{I})) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): * Compute total deduction and total amount outstanding; MPRINT(TAXSCF): TOTDEDCTO=TOTDEDCTO+((AVINTDCTO{I})*PERPROP{I}/10000)*(HAVELNO{I}=1); MPRINT(TAXSCF): TOTAMTOUTO=TOTAMTOUTO+AMTOUTO{I}; MPRINT(TAXSCF): * Create flag for loans after 12/15/17, used in computing limits on mortgage interest deduction for home acquistion debt; MPRINT(TAXSCF): LIMFLAG{I}=(LNSTYRO{I}> 2017 | (LNSTYRO{I}=2017 & LNSTMNO{I}=12)); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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 hhs are rational and report the home/properties with the biggest deductions.; MPRINT(TAXSCF): ADJDEDCTO=0; MPRINT(TAXSCF): ADJAMTOUTO=0; MPRINT(TAXSCF): ADJ17AMTOUTO=0; MPRINT(TAXSCF): FMVOTHPROP=0; 95 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): IF (QUALOTHPROP > 0) THEN DO; MPRINT(TAXSCF): IF (QUALOTHPROP=1 & QPROP1=1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=1 & QPROP2=1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=2) THEN DO; MPRINT(TAXSCF): IF (AVINTDCTO1 >= AVINTDCTO2) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO2 >= AVINTDCTO1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (X701=-7 & X7133=1) THEN DO; MPRINT(TAXSCF): HOUSE=(X7134/10000)*X716; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE HOUSE=SUM(0,X604,X614,X623,X716,(X513+X526)); MPRINT(TAXSCF): IF (TOTEQDBTL > 0 & GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL+TOTEQDBTL > (HOUSE)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) > 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=MIN((HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL)),TOTEQDBTL,100000); MPRINT(TAXSCF): ADJDEDCTL=TOTDEDCTL*(ADJEQDBTL/TOTEQDBTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) <= 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=0; MPRINT(TAXSCF): ADJDEDCTL=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((FILESTAT=3) & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) > 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=MIN((HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL)),TOTEQDBTL,50000); MPRINT(TAXSCF): ADJDEDCTL=TOTDEDCTL*(ADJEQDBTL/TOTEQDBTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((FILESTAT=3) & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) <= 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=0; MPRINT(TAXSCF): ADJDEDCTL=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TOTEQDBTL ^=. & TOTDEDCTL ^=.) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=TOTEQDBTL; MPRINT(TAXSCF): ADJDEDCTL=TOTDEDCTL; 96 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TOTEQDBTL > 0 & GRFAMTOUTM+A17AMTOUTM+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= /; MPRINT(TAXSCF): * 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), worksheet changed in 2018; MPRINT(TAXSCF): ADJDEDCT=0; MPRINT(TAXSCF): * Starting in 2018, only HELOCs for home acquistion are included per the new tax rules; MPRINT(TAXSCF): * case 1 - grandfathered debt, maybe home acquisition debt and no post 12/15/17 home acquistion debt; MPRINT(TAXSCF): IF (GRFAMTOUTM > 0 & (HAAMTOUTM >= 0 | ADJAMTOUTO >= 0 | TOTAQDBTL >= 0) & (A17AMTOUTM=0 & ADJ17AMTOUTO=0)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 1000000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 1000000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX(GRFAMTOUTM,1000000))/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL))*(TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX(GRFAMTOUTM,500000))/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL))*(TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * case 2 - grandfathered debt and both vintages of home acquisition debt; MPRINT(TAXSCF): ELSE IF (GRFAMTOUTM > 0 & (HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | A17AMTOUTM > 0 | ADJ17AMTOUTO > 0)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 750000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): IF GRFAMTOUTM > 1000000 THEN ADJDECT=((GRFAMTOUTM)/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL)) *(TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL); MPRINT(TAXSCF): ELSE IF GRFAMTOUTM <=1000000 THEN ADJDEDCT=((MIN(1000000,(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL)))/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL)) *(TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+A17AMTOUTM+ADJ17AMTOUTO > 750000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((750000)/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+A17AMTOUTM+ADJ17AMTOUTO)) *(TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+A17AMTOUTM+ADJ17AMTOUTO <= 750000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 375000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): IF GRFAMTOUTM > 500000 THEN ADJDECT=((GRFAMTOUTM)/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL)) *(TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL); MPRINT(TAXSCF): ELSE IF GRFAMTOUTM <=500000 THEN ADJDEDCT=((MIN(500000,(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL)))/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL)) 97 The SAS System 13:32 Friday, January 29, 2021 *(TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+A17AMTOUTM+ADJ17AMTOUTO > 375000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((375000)/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+A17AMTOUTM+ADJ17AMTOUTO)) *(TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+A17AMTOUTM+ADJ17AMTOUTO <= 375000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * case 3 - no grandfathered debt and either or both types of home acquisition debt; MPRINT(TAXSCF): ELSE IF (GRFAMTOUTM=0 & (HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | A17AMTOUTM > 0 | ADJ17AMTOUTO > 0)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 750000 & (A17AMTOUTM+ADJ17AMTOUTO=0)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MIN(1000000,(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL)))/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL)) *(TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+A17AMTOUTM+ADJ17AMTOUTO > 750000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((750000)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+A17AMTOUTM+ADJ17AMTOUTO)) *(TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+A17AMTOUTM+ADJ17AMTOUTO <= 750000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 375000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MIN(500000,(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL)))/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL)) *(TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+A17AMTOUTM+ADJ17AMTOUTO > 375000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((375000)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+A17AMTOUTM+ADJ17AMTOUTO)) *(TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+A17AMTOUTM+ADJ17AMTOUTO <= 375000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+TOTAQDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * case 4 - only home equity debt, not deductible; MPRINT(TAXSCF): ELSE IF ADJEQDBTL > 0 THEN OVERLIM=0; MPRINT(TAXSCF): * a few obs will come out here, but they either have -1 as the interest rate or are land contracts; MPRINT(TAXSCF): IF ((GRFAMTOUTM > 0 | HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | (ADJEQDBTL*(2019 LE 2016)) > 0 | A17AMTOUTM > 0 & ADJ17AMTOUTO > 0) & ADJDEDCT=0 & X5744 IN(1 5 6) & Y1=YY1*10+1 & X720^=2019) THEN PUT "MORTGAGE DEDUCTION SHOULD NOT BE ZERO " Y1= X5744= X5746= GRFAMTOUTM= HAAMTOUTM= ADJAMTOUTO= TOTAQDBTL= ADJEQDBTL= A17AMTOUTM= ADJ17AMTOUTO= TOTDEDCTM= ADJDEDCTO= ADJDEDCTL= OVERLIM= QUALOTHPROP= CINTDCTM1= CINTDCTM2= CINTDCTM3= CINTDCTO1= CINTDCTO2= X702= X714= X7135= X723=/; MPRINT(TAXSCF): IF ((GRFAMTOUTM > 0 | HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | ADJEQDBTL > 0 | A17AMTOUTM > 0 & ADJ17AMTOUTO > 0) & OVERLIM=. & Y1=YY1*10+1) THEN PUT "OVER LIMIT INDICATOR MISSING " Y1= X5744= X5746= GRFAMTOUTM= HAAMTOUTM= ADJAMTOUTO= TOTAQDBTL= ADJEQDBTL= A17AMTOUTM= ADJ17AMTOUTO= TOTDEDCTM= ADJDEDCTO= ADJDEDCTL= OVERLIM= ADJDEDCT=/; 98 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): IF ADJDEDCT >= 100000 & Y1=YY1*10+1 THEN PUT "HUGE MORTGAGE INTEREST DEDUCTION " Y1= TOTDEDCTM= GRFAMTOUTM= HAAMTOUTM= TOTAQDBTL= ADJDEDCTL= ADJEQDBTL= ADJDEDCTO= ADJAMTOUTO= A17AMTOUTM= ADJ17AMTOUTO= HOUSE= QUALOTHPROP= FMVOTHPROP= X5744= X5746= ADJDEDCT= /; MPRINT(TAXSCF): ************Real estate taxes; MPRINT(TAXSCF): * TAXSIM doesnt want local property taxes in amount of itemized deductions, listed as a separate variable; MPRINT(TAXSCF): * 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; MPRINT(TAXSCF): PROPTXRATE=0; MPRINT(TAXSCF): IF (HOUSE > 0 & RESTAXM1 > 0) THEN PROPTXRATE=(RESTAXM1/HOUSE)*100; MPRINT(TAXSCF): IF (PROPTXRATE > 10 & Y1=YY1*10+1) THEN PUT "HIGH PROPERTY TAX RATE " Y1= HOUSE= RESTAXM1= X721= J721= X722= J722= X501= X601= X701= PROPTXRATE=/; MPRINT(TAXSCF): IF (PROPTXRATE > 10 & X722=4) THEN RESTAXM1=X721; MPRINT(TAXSCF): ************Investment interest expense; MPRINT(TAXSCF): * 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 need to add up dividend/interest income. Capital gains 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.; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * LOCs - only counting loans not secured by the residence and with asset or real estate investment as loan purpose.; MPRINT(TAXSCF): IF (X1101=1) THEN DO; MPRINT(TAXSCF): DO I=1 TO DIM(SBYHOME); MPRINT(TAXSCF): IF (SBYHOME{I}=5 & DOOWE{I}=1 & LNPURP{I} IN(76 78 79)) THEN DO; MPRINT(TAXSCF): IF (TYPAYL{I} > 0) THEN DO; MPRINT(MOCONV): IF (TYPAYLF{I}=1) THEN CMOPAYL{I}=TYPAYL{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=2) THEN CMOPAYL{I}=TYPAYL{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=3) THEN CMOPAYL{I}=TYPAYL{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=4) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=5) THEN CMOPAYL{I}=TYPAYL{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=6) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=20) THEN CMOPAYL{I}=TYPAYL{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=21) THEN CMOPAYL{I}=TYPAYL{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=8) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=11) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=12) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=23) THEN CMOPAYL{I}=TYPAYL{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=24) THEN CMOPAYL{I}=TYPAYL{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=25) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=31) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=18) THEN CMOPAYL{I}=TYPAYL{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=0) THEN CMOPAYL{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}>.Z & TYPAYLF{I}^=-1 & TYPAYLF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}>.Z & TYPAYL{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}<=.Z) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYL{I}^=-1 & TYPAYL{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYLF{I}= TYPAYL{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; 99 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TYPAYL{I} IN(0 -1 -2)) THEN DO; MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (INTRATEL{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=((INTRATEL{I}/10000)*AMTOUTL{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEL{I} IN(0 -1)) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTL{I} > 0 & CMOPAYL{I} > 0 & SINTDCTL{I} > CMOPAYL{I}*12) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=CMOPAYL{I}*12; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTLOCINVEX=TOTLOCINVEX+SINTDCTL{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Other properties - only counting properties held for investment purposes, and hh must receive income from the property.; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNO); MPRINT(TAXSCF): IF (PROPTYPE{I} IN(41 42 43 44 45 46 47 48) & (INCOMEO{I} > 0)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified properties; MPRINT(TAXSCF): QUALPINV{I}=(HAVELNO{I}=1); MPRINT(TAXSCF): QUALINVPROP=QUALINVPROP+QUALPINV{I}; MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & HBALLNO{I} IN(1 5) & NMYRO{I} NOT IN(0 -1 -7) & INTRATEO{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAYO{I} < AMTBORRO{I}*.005) THEN CMOPAYO{I}=MAX(REGPAYO{I},TYPAYO{I}); MPRINT(TAXSCF): 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})); MPRINT(TAXSCF): 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))); MPRINT(TAXSCF): IF LNSTYRO{I}^=2019 THEN AINTDCTO{I}=(CMOPAYO{I}*12)-(AMTOWE_1O{I}-AMTOWEO{I}); MPRINT(TAXSCF): ELSE IF LNSTYRO{I}=2019 THEN AINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | CMOPAYO{I} < 0 | PAYLFTO{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEO{I}=0; MPRINT(TAXSCF): AMTOWE_1O{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & AMTBORRO{I} > 0 & LNAGEO{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTDCTO{I}=(CMOPAYO{I}*12)-(CURBAL_1O{I}-CURBALO{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | AMTBORRO{I} < 0 | LNAGEO{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALO{I}=0; MPRINT(TAXSCF): CURBAL_1O{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): END; 100 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): IF (AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): ELSE SINTDCTO{I}=0; MPRINT(TAXSCF): * 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 the home was not purchased in the survey year. If the home was purchased in the survey year, set deduction to zero.; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I}=0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=2019 & PURCHYRO{I}=2019) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=2019) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & CURBALO{I} > 0 & CURBAL_1O{I} > 0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & (CURBALO{I} <= 0 & CURBAL_1O{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTO{I} > 0 & CINTDCTO{I} > 0) THEN DCTDIFFO{I}=CINTDCTO{I}-SINTDCTO{I}; MPRINT(TAXSCF): ELSE DCTDIFFO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (NMYRO{I} IN(-1 -7) & NMPMTO{I} IN(-1 -7)) & AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (INTRATEO{I}=-1)) THEN DO; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest deduction; MPRINT(TAXSCF): IF ((CINTDCTO{I} + AINTDCTO{I} + SINTDCTO{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=(CINTDCTO{I}+AINTDCTO{I}+SINTDCTO{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTDCTO{I}=0; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & CMOPAYO{I} > 0 & (AVINTDCTO{I} > CMOPAYO{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): SINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; 101 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & AMTOUTO{I} > 0 & (AVINTDCTO{I} > .25*AMTOUTO{I})) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): * Compute total investment interest expense; MPRINT(TAXSCF): TOTINVPDCT=TOTINVPDCT+((AVINTDCTO{I})*PERPROP{I}/10000)*(HAVELNO{I}=1); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Other loans - only counting loans for (non-business) investment purposes; MPRINT(TAXSCF): ARRAY TLMTHI {*} TLMTHI1 TLMTHI2 TLMTHI3 TLMTHI4 TLMTHI5 TLMTHI6; MPRINT(TAXSCF): ARRAY CMOPAYI {*} CMOPAYI1 CMOPAYI2 CMOPAYI3 CMOPAYI4 CMOPAYI5 CMOPAYI6; MPRINT(TAXSCF): ARRAY PAYLFTI {*} PAYLFTI1 PAYLFTI2 PAYLFTI3 PAYLFTI4 PAYLFTI5 PAYLFTI6; MPRINT(TAXSCF): ARRAY AMTOWEI {*} AMTOWEI1 AMTOWEI2 AMTOWEI3 AMTOWEI4 AMTOWEI5 AMTOWEI6; MPRINT(TAXSCF): ARRAY AMTOWE_1I {*} AMTOWE_1I1 AMTOWE_1I2 AMTOWE_1I3 AMTOWE_1I4 AMTOWE_1I5 AMTOWE_1I6; MPRINT(TAXSCF): ARRAY AINTEXPI {*} AINTEXPI1 AINTEXPI2 AINTEXPI3 AINTEXPI4 AINTEXPI5 AINTEXPI6; MPRINT(TAXSCF): ARRAY LNAGEI {*} LNAGEI1 LNAGEI2 LNAGEI3 LNAGEI4 LNAGEI5 LNAGEI6; MPRINT(TAXSCF): ARRAY CURBALI {*} CURBALI1 CURBALI2 CURBALI3 URBALI4 CURBALI5 CURBALI6; MPRINT(TAXSCF): ARRAY CURBAL_1I {*} CURBAL_1I1 CURBAL_1I2 CURBAL_1I3 CURBAL_1I4 CURBAL_1I5 CURBAL_1I6; MPRINT(TAXSCF): ARRAY CINTEXPI {*} CINTEXPI1 CINTEXPI2 CINTEXPI3 CINTEXPI4 CINTEXPI5 CINTEXPI6; MPRINT(TAXSCF): ARRAY DCTDIFFI {*} DCTDIFFI1 DCTDIFFI2 DCTDIFFI3 DCTDIFFI4 DCTDIFFI5 DCTDIFFI6; MPRINT(TAXSCF): ARRAY SINTEXPI {*} SINTEXPI1 SINTEXPI2 SINTEXPI3 SINTEXPI4 SINTEXPI5 SINTEXPI6; MPRINT(TAXSCF): ARRAY AVINTEXPI {*} AVINTEXPI1 AVINTEXPI2 AVINTEXPI3 AVINTEXPI4 AVINTEXPI5 AVINTEXPI6; MPRINT(TAXSCF): ARRAY QUALN {*} QLN1 QLN2 QLN3 QLN4 QLN5 QLN6; MPRINT(TAXSCF): ARRAY NMPMTI {*} X2716 X2733 X2816 X2833 X2916 X2933; MPRINT(TAXSCF): ARRAY NMYRI {*} X2717 X2734 X2817 X2834 X2917 X2934; MPRINT(TAXSCF): ARRAY REGPAYFI {*} X7527 X7526 X7525 X7524 X7523 X7522; MPRINT(TAXSCF): ARRAY REGPAYI {*} X2718 X2735 X2818 X2835 X2918 X2935; MPRINT(TAXSCF): ARRAY TYPAYFI {*} X2720 X2737 X2820 X2837 X2920 X2937; MPRINT(TAXSCF): ARRAY TYPAYI {*} X2719 X2736 X2819 X2836 X2919 X2936; MPRINT(TAXSCF): ARRAY LNSTYRI {*} X2713 X2730 X2813 X2830 X2913 X2930; MPRINT(TAXSCF): ARRAY AMTBORRI {*} X2714 X2731 X2814 X2831 X2914 X2931; MPRINT(TAXSCF): ARRAY JAMTBORRI {*} J2714 J2731 J2814 J2831 J2914 J2931; MPRINT(TAXSCF): ARRAY AMTOUTI {*} X2723 X2740 X2823 X2840 X2923 X2940; MPRINT(TAXSCF): ARRAY JAMTOUTI {*} J2723 J2740 J2823 J2840 J2923 J2940; MPRINT(TAXSCF): ARRAY INTRATEI {*} X2724 X2741 X2824 X2841 X2924 X2941; MPRINT(TAXSCF): ARRAY ONSCHEDI {*} X7521 X7520 X7519 X7518 X7517 X7516; MPRINT(TAXSCF): ; MPRINT(TAXSCF): ARRAY LNTYPE {*} X2710 X2727 X2810 X2827 X2910 X2927; MPRINT(TAXSCF): ARRAY BUSLN {*} X6842 X6843 X6844 X6845 X6846 X6847; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTHI); MPRINT(TAXSCF): TLMTHI{I}=0; MPRINT(TAXSCF): CMOPAYI{I}=0; MPRINT(TAXSCF): PAYLFTI{I}=0; MPRINT(TAXSCF): AMTOWEI{I}=0; MPRINT(TAXSCF): AMTOWE_1I{I}=0; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): LNAGEI{I}=0; MPRINT(TAXSCF): CURBALI{I}=0; MPRINT(TAXSCF): CURBAL_1I{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): DCTDIFFI{I}=0; 102 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): SINTEXPI{I}=0; MPRINT(TAXSCF): AVINTEXPI{I}=0; MPRINT(TAXSCF): QUALN{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTLNINVEX=0; MPRINT(TAXSCF): QUALOANINV=0; MPRINT(TAXSCF): DO I=1 TO DIM(NMPMTI); MPRINT(TERMCON): IF (NMYRI{I}=0 & NMPMTI{I}=0) THEN DO; MPRINT(TERMCON): TLMTHI{I}=0; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRI{I}^=0|NMPMTI{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRI{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRI{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHI{I}=NMYRI{I}; MPRINT(TERMCON): IF (NMPMTI{I}=0) THEN DO; MPRINT(TERMCON): NMPMTI{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRI{I}>0) THEN DO; MPRINT(TERMCON): TLMTHI{I}=NMYRI{I}*12; MPRINT(TERMCON): IF (NMPMTI{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYFI{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMTI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFI{I}=-7) THEN DO; MPRINT(TERMCON): NMPMTI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFI{I}=8) THEN DO; MPRINT(TERMCON): NMPMTI{I}=1; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFI{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYFI{I}=1) THEN NMPMTI{I}=TLMTHI{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=2) THEN NMPMTI{I}=TLMTHI{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=3) THEN NMPMTI{I}=TLMTHI{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=4) THEN NMPMTI{I}=TLMTHI{I}; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=5) THEN NMPMTI{I}=TLMTHI{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=6) THEN NMPMTI{I}=TLMTHI{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=20) THEN NMPMTI{I}=TLMTHI{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=21) THEN NMPMTI{I}=TLMTHI{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=11) THEN NMPMTI{I}=TLMTHI{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=12) THEN NMPMTI{I}=TLMTHI{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=23) THEN NMPMTI{I}=TLMTHI{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=24) THEN NMPMTI{I}=TLMTHI{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=25) THEN NMPMTI{I}=TLMTHI{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=31) THEN NMPMTI{I}=TLMTHI{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=18) THEN NMPMTI{I}=TLMTHI{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=0) THEN NMPMTI{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}>.Z & REGPAYFI{I}^=-1 & REGPAYFI{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMTI{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTHI{I}= REGPAYFI{I}= NMPMTI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHI{I}>.Z & TLMTHI{I}<-2) THEN DO; MPRINT(MOCONV): NMPMTI{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTHI{I}= REGPAYFI{I}= NMPMTI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHI{I}<=.Z) THEN NMPMTI{I}=TLMTHI{I}; MPRINT(MOCONV): ELSE IF (TLMTHI{I}^=-1 & TLMTHI{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFI{I}= TLMTHI{I}= "SETTING AMT=."; 103 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): NMPMTI{I}=.; MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTI{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHI{I}=-1; MPRINT(TERMCON): IF (NMYRI{I}=0) THEN DO; MPRINT(TERMCON): NMYRI{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTI{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYFI{I}; MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYFI{I}>0) THEN PFREQ=TYPAYFI{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTHI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; MPRINT(TERMCON): TLMTHI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): IF (NMPMTI{I}>0) THEN DO; MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTHI{I}=NMPMTI{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}))); MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12))); MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTHI{I}=NMPMTI{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTHI{I}=NMPMTI{I}*2/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTHI{I}=NMPMTI{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTHI{I}=NMPMTI{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTHI{I}=NMPMTI{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTHI{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): TLMTHI{I}=NMPMTI{I}; MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMTI{I}= PFREQ= TLMTHI{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}>.Z & NMPMTI{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTHI{I}=NMPMTI{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMTI{I}= PFREQ= TLMTHI{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}=0) THEN TLMTHI{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}<=.Z) THEN TLMTHI{I}=NMPMTI{I}; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}^=-1 & NMPMTI{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMTI{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTHI{I}=.; MPRINT(IMOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTHI{I}>0) THEN DO; MPRINT(TERMCON): NMYRI{I}=MAX(1,INT(.5+(TLMTHI{I}/12))); MPRINT(TERMCON): TLMTHI{I}=MAX(1,ROUND(TLMTHI{I})); 104 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TERMCON): END; MPRINT(TERMCON): IF (NMYRI{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMTI{I}= NMYRI{I}= TLMTHI{I}= REGPAYFI{I}= REGPAYI{I}= TYPAYFI{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAYI{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYFI{I}=1) THEN CMOPAYI{I}=REGPAYI{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=2) THEN CMOPAYI{I}=REGPAYI{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=3) THEN CMOPAYI{I}=REGPAYI{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=4) THEN CMOPAYI{I}=REGPAYI{I}; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=5) THEN CMOPAYI{I}=REGPAYI{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=6) THEN CMOPAYI{I}=REGPAYI{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=20) THEN CMOPAYI{I}=REGPAYI{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=21) THEN CMOPAYI{I}=REGPAYI{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=8) THEN CMOPAYI{I}=REGPAYI{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=11) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=12) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=23) THEN CMOPAYI{I}=REGPAYI{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=24) THEN CMOPAYI{I}=REGPAYI{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=25) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=31) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=18) THEN CMOPAYI{I}=REGPAYI{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=0) THEN CMOPAYI{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}>.Z & REGPAYFI{I}^=-1 & REGPAYFI{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAYI{I}= REGPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYI{I}>.Z & REGPAYI{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAYI{I}= REGPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYI{I}<=.Z) THEN CMOPAYI{I}=REGPAYI{I}; MPRINT(MOCONV): ELSE IF (REGPAYI{I}^=-1 & REGPAYI{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFI{I}= REGPAYI{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(MOCONV): IF (TYPAYFI{I}=1) THEN CMOPAYI{I}=TYPAYI{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=2) THEN CMOPAYI{I}=TYPAYI{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=3) THEN CMOPAYI{I}=TYPAYI{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=4) THEN CMOPAYI{I}=TYPAYI{I}; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=5) THEN CMOPAYI{I}=TYPAYI{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=6) THEN CMOPAYI{I}=TYPAYI{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=20) THEN CMOPAYI{I}=TYPAYI{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=21) THEN CMOPAYI{I}=TYPAYI{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=8) THEN CMOPAYI{I}=TYPAYI{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=11) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=12) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=23) THEN CMOPAYI{I}=TYPAYI{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=24) THEN CMOPAYI{I}=TYPAYI{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=25) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=31) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=18) THEN CMOPAYI{I}=TYPAYI{I}*40*52/12; 105 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=0) THEN CMOPAYI{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}>.Z & TYPAYFI{I}^=-1 & TYPAYFI{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYI{I}= TYPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYI{I}>.Z & TYPAYI{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYI{I}= TYPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYI{I}<=.Z) THEN CMOPAYI{I}=TYPAYI{I}; MPRINT(MOCONV): ELSE IF (TYPAYI{I}^=-1 & TYPAYI{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYFI{I}= TYPAYI{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF NMYRI{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFTI{I}=(TLMTHI{I}-((2019-LNSTYRI{I})*12)); MPRINT(TAXSCF): LNAGEI{I}=TLMTHI{I}-PAYLFTI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFTI{I}=0; MPRINT(TAXSCF): LNAGEI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): DO I=1 TO MIN(6,X2709); MPRINT(TAXSCF): IF (LNTYPE{I} IN(76 78 79) & BUSLN{I} IN(0 5 8)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified loans; MPRINT(TAXSCF): QUALN{I}=1; MPRINT(TAXSCF): QUALOANINV=QUALOANINV+QUALN{I}; MPRINT(TAXSCF): IF (NMYRI{I} NOT IN(0 -1 -7) & INTRATEI{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & PAYLFTI{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAYI{I} < AMTBORRI{I}*.005) THEN CMOPAYI{I}=MAX(REGPAYI{I},TYPAYI{I}); MPRINT(TAXSCF): AMTOWEI{I}=CMOPAYI{I}*((1-1/(1+(INTRATEI{I}/10000)/12)**PAYLFTI{I})/ ((INTRATEI{I}/10000)/12)); MPRINT(TAXSCF): AMTOWE_1I{I}=CMOPAYI{I}*((1-1/(1+(INTRATEI{I}/10000)/12)**(PAYLFTI{I}+12))/ ((INTRATEI{I}/10000)/12)); MPRINT(TAXSCF): IF LNSTYRI{I}^=2019 THEN AINTEXPI{I}=(CMOPAYI{I}*12)-(AMTOWE_1I{I}-AMTOWEI{I}); MPRINT(TAXSCF): ELSE IF LNSTYRI{I}=2019 THEN AINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHI{I} < 0 | CMOPAYI{I} < 0 | PAYLFTI{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEI{I}=0; MPRINT(TAXSCF): AMTOWE_1I{I}=0; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & AMTBORRI{I} > 0 & LNAGEI{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTEXPI{I}=(CMOPAYI{I}*12)-(CURBAL_1I{I}-CURBALI{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHI{I} < 0 | AMTBORRI{I} < 0 | LNAGEI{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALI{I}=0; MPRINT(TAXSCF): CURBAL_1I{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUTI{I} > 0 & INTRATEI{I} > 0) THEN SINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): ELSE SINTEXPI{I}=0; 106 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): * 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, set the interest expense to zero.; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & PAYLFTI{I}=0) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=CURBAL_1I{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=CINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & LNSTYRI{I}=2019) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTEXPI{I} < 0 | CINTEXPI{I} < 0) & CURBALI{I} > 0 & CURBAL_1I{I} > 0) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=CURBAL_1I{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=CINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTEXPI{I} < 0 | CINTEXPI{I} < 0) & (CURBALI{I} <= 0 & CURBAL_1I{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTEXPI{I} > 0 & CINTEXPI{I} > 0) THEN DCTDIFFI{I}=CINTEXPI{I}-SINTEXPI{I}; MPRINT(TAXSCF): ELSE DCTDIFFI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): CINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEI{I}=-1) THEN DO; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest expense; MPRINT(TAXSCF): IF ((CINTEXPI{I} + AINTEXPI{I} + SINTEXPI{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=(CINTEXPI{I}+AINTEXPI{I}+SINTEXPI{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTEXPI{I}=0; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (AVINTEXPI{I} > 0 & CMOPAYI{I} > 0 & (AVINTEXPI{I} > CMOPAYI{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=CMOPAYI{I}*12; MPRINT(TAXSCF): CINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): SINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AVINTEXPI{I} > 0 & AMTOUTI{I} > 0 & (AVINTEXPI{I} > .25*AMTOUTI{I})) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): CINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): END; 107 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): * Compute loan investment interest expense; MPRINT(TAXSCF): TOTLNINVEX=TOTLNINVEX+AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Total investment interest expense, if investment interest expense is greater than interest/dividend income, then expense is limited to income amount; MPRINT(TAXSCF): TOTINTINC=X5708+X5710; MPRINT(TAXSCF): TOTINVEX=0; MPRINT(TAXSCF): TOTINVEX=TOTLOCINVEX+TOTINVPDCT+TOTLNINVEX; MPRINT(TAXSCF): IF TOTINVEX > 0 THEN HINVEX=1; MPRINT(TAXSCF): ELSE HINVEX=0; MPRINT(TAXSCF): IF TOTINVEX > TOTINTINC & Y1=YY1*10+1 THEN PUT "TOO MUCH INVESTMENT INTEREST EXPENSES " Y1= TOTINVEX= TOTLOCINVEX= TOTINVPDCT= TOTLNINVEX= TOTINTINC=/; MPRINT(TAXSCF): IF (TOTINVEX > TOTINTINC) THEN TOTINVEX=TOTINTINC; MPRINT(TAXSCF): * In 1988, 40% of personal interest is deductible, this includes credit cards, car/other vehicle loans, other consumer loans, loans against life insurance policies, home improvement loans, and non-HELOC LOCs.; MPRINT(TAXSCF): TOTPINEX=0; MPRINT(TAXSCF): **************Charitable Contributions; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): GCHARITY=(X5822=1); MPRINT(TAXSCF): CHARITYAMT=0; MPRINT(TAXSCF): IF (X5822=1 & X5823 > 0) THEN DO; MPRINT(TAXSCF): IF (X5823 > .5*AGI) & (AGI>0) THEN CHARITYAMT=.5*AGI; MPRINT(TAXSCF): ELSE CHARITYAMT=X5823; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF X5822=1 & X5823 > 0 & AGI < 0 & Y1=YY1*10+1 THEN PUT "NEGATIVE AGI BUT CHARITYAMT > 0 " Y1= X5823= CHARITYAMT= X5744= X5746= AGI=; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ITEMDEDCT_FLAG=0 THEN DO; MPRINT(TAXSCF): ADJDEDCT=0; MPRINT(TAXSCF): RESTAXM1=0; MPRINT(TAXSCF): TOTINVEX=0; MPRINT(TAXSCF): CHARITYAMT=0; MPRINT(TAXSCF): TOTPINEX=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): **********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.; MPRINT(TAXSCF): TOTITEMDCT=0; MPRINT(TAXSCF): * no limits on itemized deductions in 1988, 2012 and 2018; MPRINT(TAXSCF): * starting in 2015, itemized deduction phaseout limit for AGI are the same as for personal exemptions, so using EXLIM1-4 in this code; MPRINT(TAXSCF): TOTITEMDCT=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); MPRINT(TAXSCF): DEDCTLIM=0; MPRINT(TAXSCF): * NOTE: Change in worksheet for 2006; MPRINT(TAXSCF): * no limits on exemptions in 1988 and 2012, no exemptions in 2018; MPRINT(TAXSCF): TOTEXPTAMT=0; MPRINT(TAXSCF): EXPTLIM=0; MPRINT(TAXSCF): TOTEXPTAMT=0; MPRINT(TAXSCF): * Standard deduction by filing status, including addition deduction amount for over 65, dont have any 108 The SAS System 13:32 Friday, January 29, 2021 info on blindness. Also compute number of age exemptions and flag nonfilers based on IRS filing thresholds and a few other assumptions. Nonfilers also cannot have negative AGI, losses from business or capital gains or more than 1/3 of the lowest filing threshold, which is married, filing separately; MPRINT(TAXSCF): BUSRENTCAPLOSS=(TBUSINC < 0 | RENTINC < 0 | CAPGLINC < 0); MPRINT(TAXSCF): HWSINCSE=(WSINCOME >= (.33*5) | WSINCSP >= (.33*5) | TBUSINC >= (.33*5)); MPRINT(TAXSCF): STDDCT=0; MPRINT(TAXSCF): IF (FILESTAT=1 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=12000; MPRINT(TAXSCF): NONFILER=(0 < AGI < 12000)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=1 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=13600; MPRINT(TAXSCF): NONFILER=(0 < AGI < 13600)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=2 & TUAGE < 65 & SPAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=24000; MPRINT(TAXSCF): NONFILER=(0 < AGI < 24000)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=2 & TUAGE >= 65 & SPAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=26600; MPRINT(TAXSCF): NONFILER=(0 < AGI < 26600)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=2 & (TUAGE >= 65 | SPAGE >= 65)) THEN DO; MPRINT(TAXSCF): STDDCT=25300; MPRINT(TAXSCF): NONFILER=(0 < AGI < 25300)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=12000; MPRINT(TAXSCF): NONFILER=(AGI < 5)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=13600; MPRINT(TAXSCF): NONFILER=(AGI < 5)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=4 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=18000; MPRINT(TAXSCF): NONFILER=(0 < AGI < 18000)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=4 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=19600; MPRINT(TAXSCF): NONFILER=(0 < AGI < 19600)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=5 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=24000; MPRINT(TAXSCF): NONFILER=(AGI < 24000)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=5 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=25300; MPRINT(TAXSCF): NONFILER=(0 < AGI < 25300)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): AGEXMP=(TUAGE > 65) + (SPAGE > 65)*(FILESTAT=2); MPRINT(TAXSCF): * Did the hh itemize; MPRINT(TAXSCF): * No itemization question in 1989 or 1992, so itemize will be zero; MPRINT(TAXSCF): ITEMIZE=(TAXUNIT=0)*(X7367=1 | X7368=1 | X7369=1)+(TAXUNIT=1)*(X7368=1)+(TAXUNIT=2)*(X7369=1); MPRINT(TAXSCF): CITEMIZE=(TOTITEMDCT => STDDCT); MPRINT(TAXSCF): * Construct other variables needed for TAXSIM; MPRINT(TAXSCF): TAXUNITID=Y1*100+TAXUNIT; MPRINT(TAXSCF): YEAR=2018; 109 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): AGECL=1*(TUAGE < 26)+2*(26<=TUAGE<35)+3*(35<=TUAGE<45) +4*(45<=TUAGE<55)+5*(55<=TUAGE<65)+6*(TUAGE>=65); MPRINT(TAXSCF): * 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).; MPRINT(TAXSCF): STCAPINC=0; MPRINT(TAXSCF): LTCAPINC=0; MPRINT(TAXSCF): IF (AGICL IN(1)) THEN DO; MPRINT(TAXSCF): IF (CAPGLINC > 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.87; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.87); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (CAPGLINC < 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.62; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.62); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AGICL IN(2)) THEN DO; MPRINT(TAXSCF): IF (CAPGLINC > 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.86; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.86); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (CAPGLINC < 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.66; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.66); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AGICL IN(3)) THEN DO; MPRINT(TAXSCF): IF (CAPGLINC > 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.94; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.94); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (CAPGLINC < 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.87; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.87); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ARRAY NEG_1 {*} TBUSINC OTHINC RENTINC OTHPINC; MPRINT(TAXSCF): DO I=1 TO DIM(NEG_1); MPRINT(TAXSCF): IF NEG_1{I}=-1 THEN NEG_1{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): UNADJTOTDEDCT=MAX(0,(ADJDEDCT+TOTINVEX+CHARITYAMT)); MPRINT(TAXSCF): CHCAREXP=0; MPRINT(TAXSCF): TINCOME=WSINCOME+WSINCSP+TBUSINC+INTINC+NTAXINC+DIVINC+CAPGLINC+RENTINC +UNEMPINC+GSSINC+PENINC+AFDCINC+OTHINC; MPRINT(TAXSCF): TOTXINC=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC +UNEMPINC+GSSINC+PENINC+OTHINC; MPRINT(TAXSCF): *set 3000 max loss for capital gains for comparison with IRS estimates; MPRINT(TAXSCF): IF CAPGLINC < -3000 THEN CAPGL3K=-3000; MPRINT(TAXSCF): ELSE CAPGL3K=CAPGLINC; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (TOTXINC=0 & TINCOME > 0 & AFDCINC=0 & NTAXINC=0 & TAXUNIT < 3 & Y1=YY1*10+1) THEN PUT "TOTXINC IS ZERO BUT TINCOME > 0 " YY1= Y1= TOTXINC= TINCOME= WSINCOME= WSINCSP= TBUSINC= INTINC= NTAXINC= DIVINC= RENTINC= UNEMPINC= AFDCINC= GSSINC= PENINC= OTHINC= CAPGLINC= RAGE= SPAGE= FILESTAT= TAXUNIT= X4100= X4700=/; MPRINT(TAXSCF): * Adding in payroll tax liability and mtr, assuming employee pays both employee and employer share, and 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 110 The SAS System 13:32 Friday, January 29, 2021 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 earning 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 tax year, 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 caculate the payroll liability and mtr. Computing the payroll atr in a similar fashion. NOTE: Need to adjust for different amounts used to compute the mtr, initially computing payroll mtr for adding $1 to earnings.; MPRINT(TAXSCF): * Need to adjust for 1988, 2% credit for SE, in 1991, limit on medicare tax; MPRINT(TAXSCF): ** earnings from wages and businesses for head and spouse/parnter; MPRINT(TAXSCF): REARN=R_LABORINC+R_BUSINC; MPRINT(TAXSCF): SPEARN=SP_LABORINC+SP_BUSINC; MPRINT(TAXSCF): HHEARN=REARN+SPEARN; MPRINT(TAXSCF): TWSINC=WSINCOME+WSINCSP; MPRINT(TAXSCF): PAYROLLIAB=0; MPRINT(TAXSCF): PAYROLLMTR=0; MPRINT(TAXSCF): PAYROLLATR=0; MPRINT(TAXSCF): IF TAXUNIT=0 THEN DO; MPRINT(TAXSCF): IF (X4106 IN(1 2 3 4 -7) & X4706=0) | (X4106=0 & X4706 IN(1 2 3 4 -7)) | (X4106=0 & X4706=0 & X102=0 & (TWSINC > 0 | TBUSINC > 0)) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(128400,(TWSINC+TBUSINC*(TBUSINC >0)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*.029)*(2019 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*.029)*(2019 EQ 1992); MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 128400)*(100*.124))+ (100*.029)*(2019 GE 1995)+ (100*.029)*(2019 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB >0) THEN PAYROLLATR=100*(PAYROLLIAB/(TWSINC+TBUSINC*(TBUSINC > 0))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X4106 IN(1 2 3 4 -7) & X4706 IN(1 2 3 4 -7)) THEN DO; MPRINT(TAXSCF): IF (X4115 >=1 & X4715 >=1 & HHEARN > 0) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(128400,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(REARN/HHEARN))*.029*(2019 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*(REARN/HHEARN))*.029*(2019 EQ 1992)+ MIN(128400,((TWSINC+TBUSINC*(TBUSINC >0))*(SPEARN/HHEARN)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(SPEARN/HHEARN))*.029*(2019 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*(SPEARN/HHEARN))*.029*(2019 EQ 1992); MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(REARN/HHEARN) <= 128400)*(100*.124))+(100*.029)*(2019 GE 1995)+ (100*.029)*(2019 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1)*(REARN/HHEARN) <= 125000); MPRINT(TAXSCF): IF ((MIN(128400,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(REARN/HHEARN))*.029) > 0) THEN PAYROLLATR=100*((MIN(128400,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*.124 + ((2019 GE 1995)*((TWSINC+TBUSINC*(TBUSINC >0))*(REARN/HHEARN))*.029)+ ((2019 EQ 1992)*(MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*(REARN/HHEARN))*.029))/ ((TWSINC+TBUSINC*(TBUSINC > 0))*(REARN/HHEARN))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X4115 =-1 & X4715=-1) | (X4115 >=1 & X4715=-1) | (X4115=-1 & X4715 >=1) | (HHEARN=0) THEN DO; MPRINT(TAXSCF): IF ((TWSINC+TBUSINC*(TBUSINC >0)) <= 128400) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=(TWSINC+TBUSINC*(TBUSINC >0))*.124+ (TWSINC+TBUSINC*(TBUSINC >0))*.029; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((TWSINC+TBUSINC*(TBUSINC >0)) > 128400) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(2*128400,((TWSINC+TBUSINC*(TBUSINC >0))))*.124+ (TWSINC+TBUSINC*(TBUSINC >0))*.029*(2019 GE 1995)+ MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*.029*(2019 EQ 1992); MPRINT(TAXSCF): END; MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(.5) <= 128400)*(100*.124))+(100*.029)*(2019 GE 1995)+ (100*.029)*(2019 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB*.5 > 0) THEN PAYROLLATR=100*((PAYROLLIAB*.5)/((TWSINC+TBUSINC*(TBUSINC >0))*(.5))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X4106=0 & X4706=0 & X102^=0 & (TWSINC > 0 | TBUSINC > 0)) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=2*(MIN(128400,((TWSINC+TBUSINC*(TBUSINC >0))*(.5)))*.124 + ((TWSINC+TBUSINC*(TBUSINC 111 The SAS System 13:32 Friday, January 29, 2021 >0))*(.5))*.029*(2019 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)*(.5)))*.029)*(2019 EQ 1992)); MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(.5) <= 128400)*(100*.124))+(100*.029)*(2019 GE 1995)+ (100*.029)*(2019 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB*.5 > 0) THEN PAYROLLATR=100*((PAYROLLIAB*.5)/((TWSINC+TBUSINC*(TBUSINC >0))*(.5))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TAXUNIT >= 1 THEN DO; MPRINT(TAXSCF): IF (WSINCOME > 0 | TBUSINC > 0) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(128400,(WSINCOME+TBUSINC*(TBUSINC >0)))*.124 + ((WSINCOME+TBUSINC*(TBUSINC >0))*.029)*(2019 GE 1995)+ (MIN(125000,(WSINCOME+TBUSINC*(TBUSINC >0)))*.029)*(2019 EQ 1992); MPRINT(TAXSCF): PAYROLLMTR=(((WSINCOME+TBUSINC*(TBUSINC > 0)+1)<=128400)*(100*.124))+ (100*.029)*(2019 GE 1995)+ (100*.029)*(2019 EQ 1992)*((WSINCOME+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB >0) THEN PAYROLLATR=100*(PAYROLLIAB/(WSINCOME+TBUSINC*(TBUSINC > 0))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF PAYROLLIAB=0 & PAYROLLMTR=0 & PAYROLLATR=0 & (TWSINC > 0 | TBUSINC > 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= TWSINC= TBUSINC= R_LABORINC= R_BUSINC= R_SOLEPROP= SP_LABORINC= SP_BUSINC= SP_SOLEPROP= REARN= SPEARN= HHEARN= TAXUNIT=/; MPRINT(TAXSCF): * Check for missing variables; MPRINT(TAXSCF): ARRAY CHVARS {*} YY1 Y1 CHARITYAMT X5823 TOTITEMDCT STDDCT AGI AGICL AGIGE50K DEDCTLIM X7372 X7018 X8023 X105 PERSEXP KIDS TOTEXPT FILESTAT TOTEXPTAMT EXPTLIM RAGE SPAGE TUAGE YEAR STATE TAXUNIT WSINCOME WSINCSP TBUSINC NTAXINC INTINC DIVINC CAPGLINC RENTINC UNEMPINC CHSPALINC AFDCINC PENINC OTHINC GSSINC OTHPINC NONTAX RENT UNADJTOTDEDCT CHCAREXP TINCOME TOTXINC STCAPINC LTCAPINC PAYROLLIAB PAYROLLMTR PAYROLLATR LWP KIDSU17 KIDSU18 KIDSU13; MPRINT(TAXSCF): DO I=1 TO DIM(CHVARS); MPRINT(TAXSCF): IF CHVARS{I}=. THEN PUT "MISSING VALUE FOR " Y1= CHVARS{I}=; MPRINT(TAXSCF): END; MPRINT(TAXSCF): RUN; NOTE: The file "null.txt" is: Filename=/disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code/null.txt, Owner Name=taxsim,Group Name=taxsim, Access Permission=-rw-r--r--, Last Modified=29Jan2021:13:32:12 NOTE: 612 records were written to the file "null.txt". The minimum record length was 0. The maximum record length was 372. NOTE: There were 36295 observations read from the data set WORK.SCF. NOTE: The data set WORK.SCF has 36295 observations and 5643 variables. NOTE: DATA statement used (Total process time): real time 0.99 seconds cpu time 0.99 seconds MPRINT(TAXSCF): * Create a dataset for full TAXSIM. Breaking out total itemized deductions into its parts - have applied the limits for the mortgage interest deduction and investment interest expense, but not for charitable contributions.; MPRINT(TAXSCF): PROC SORT DATA=SCF; MPRINT(TAXSCF): BY TAXUNITID; MPRINT(TAXSCF): RUN; NOTE: There were 36295 observations read from the data set WORK.SCF. NOTE: The data set WORK.SCF has 36295 observations and 5643 variables. NOTE: PROCEDURE SORT used (Total process time): real time 0.66 seconds cpu time 0.67 seconds 112 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): proc means; MPRINT(TAXSCF): var y1 yy1 year year; MPRINT(TAXSCF): run; NOTE: There were 36295 observations read from the data set WORK.SCF. NOTE: The PROCEDURE MEANS printed page 1. NOTE: PROCEDURE MEANS used (Total process time): real time 0.18 seconds cpu time 0.12 seconds MPRINT(TAXSCF): * Rename variables to TAXSIM names, use lowercase for TAXSIM file names; MPRINT(TAXSCF): libname swt "../swt/sas"; NOTE: Libref SWT was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/swt/sas MPRINT(TAXSCF): DATA swt.swt19; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): rep=mod(y1,10); MPRINT(TAXSCF): * IF FILESTAT > 0; MPRINT(TAXSCF): mstat=1*(FILESTAT IN(1 4))+2*(FILESTAT IN(2 5))+6*(FILESTAT IN(3)); MPRINT(TAXSCF): otherprop=RENTINC+TBUSINC; MPRINT(TAXSCF): nonprop=CHSPALINC+OTHINC; MPRINT(TAXSCF): otheritem=TOTINVEX+TOTPINEX; MPRINT(TAXSCF): mortgage=ADJDEDCT+X5823; MPRINT(TAXSCF): scorp=0; MPRINT(TAXSCF): pbusinc=0; MPRINT(TAXSCF): pprofinc=0; MPRINT(TAXSCF): sbusinc=0; MPRINT(TAXSCF): sprofinc=0; MPRINT(TAXSCF): tyear=YEAR; MPRINT(TAXSCF): tstate=STATE; MPRINT(TAXSCF): * set idtl=2 to get detailed output from TAXSIM; MPRINT(TAXSCF): idtl=2; MPRINT(TAXSCF): DROP STATE; MPRINT(TAXSCF): RENAME TAXUNITID=taxsimid TUAGE=page SPAGE=sage KIDS=depx KIDSU13=dep13 KIDSU17=dep17 KIDSU18=dep18 WSINCOME=pwages WSINCSP=swages DIVINC=dividends INTINC=intrec STCAPINC=stcg LTCAPINC=ltcg PENINC=pensions GSSINC=gssi UNEMPINC=ui AFDCINC=transfers RENT=rentpaid RESTAXM1=proptax CHCAREXP=childcare tyear=year; MPRINT(TAXSCF): RUN; WARNING: Variable tyear cannot be renamed to year because year already exists. NOTE: There were 36295 observations read from the data set WORK.SCF. NOTE: The data set SWT.SWT19 has 36295 observations and 5656 variables. NOTE: DATA statement used (Total process time): real time 10.55 seconds cpu time 1.21 seconds MPRINT(TAXSCF): proc means; MPRINT(TAXSCF): var y1 yy1 year; MPRINT(TAXSCF): run; NOTE: There were 36295 observations read from the data set SWT.SWT19. NOTE: The PROCEDURE MEANS printed page 2. NOTE: PROCEDURE MEANS used (Total process time): real time 9.06 seconds cpu time 0.57 seconds 113 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): libname taxsim "../txpydata/sas"; NOTE: Libref TAXSIM was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/txpydata/sas MPRINT(TAXSCF): proc contents data=swt.swt19; MPRINT(TAXSCF): run; NOTE: PROCEDURE CONTENTS used (Total process time): real time 0.02 seconds cpu time 0.02 seconds NOTE: The PROCEDURE CONTENTS printed pages 3-112. MPRINT(TAXSCF): DATA taxsim.txpydata19; MPRINT(TAXSCF): SET swt.swt19(KEEP=taxsimid year mstat page sage depx dep13 dep17 dep18 pwages swages dividends intrec stcg ltcg otherprop nonprop pensions gssi ui transfers rentpaid proptax otheritem childcare mortgage scorp pbusinc pprofinc sbusinc sprofinc Y1 YY1 taxunit rep); MPRINT(TAXSCF): y1=Y1; MPRINT(TAXSCF): yy1=YY1; MPRINT(TAXSCF): RUN; NOTE: There were 36295 observations read from the data set SWT.SWT19. NOTE: The data set TAXSIM.TXPYDATA19 has 36295 observations and 35 variables. NOTE: DATA statement used (Total process time): real time 0.29 seconds cpu time 0.12 seconds MPRINT(TAXSCF): proc contents data=taxsim.txpydata19; MPRINT(TAXSCF): run; NOTE: PROCEDURE CONTENTS used (Total process time): real time 0.04 seconds cpu time 0.01 seconds NOTE: The PROCEDURE CONTENTS printed pages 113-114. 3850 3851 %TAXSCF(SYEAR=2016,TYEAR=2015,WYEAR=2013,ITDLIM1=0,ITDLIM2=0,ITDL10=0,EXPAMT=4000, 3852 EXPAMT2=0,EXDL9=0,EXPAGIT1=122500,EXPAGIT2=61250,EXLIM1=258250,EXLIM2=309900, 3853 EXLIM3=154950,EXLIM4=284050,STDAMT1=6300,STDAMT2=7850,STDAMT3=12600,STDAMT4=13850, 3854 STDAMT5=15100,STDAMT6=9250,STDAMT7=10800,FILELIM1=10300,FILELIM2=11850,FILELIM3=20600,FILELIM4=21850, 3855 FILELIM5=23100,FILELIM6=4000,FILELIM7=13250,FILELIM8=14800,FILELIM9=16600,FILELIM10=17850,LCGAGI1=.87, 3856 3857 LCLAGI1=.62,LCGAGI2=.86,LCLAGI2=.66,LCGAGI3=.94,LCLAGI3=.87, MPRINT(TAXSCF): * define libraries for SCF public datasets; 3858 PAYTAX=.124,MEDHI=.029,PTLIM=118500,HTAXFILE=&SYSPARM); MPRINT(TAXSCF): LIBNAME SCF16 "../orig/sas7bdat" ACCESS=READONLY; NOTE: Libref SCF16 refers to the same physical library as SCF19. NOTE: Libref SCF16 was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/orig/sas7bdat MPRINT(TAXSCF): * directory for datasets created by the program; MPRINT(TAXSCF): LIBNAME OUT "."; NOTE: Libref OUT was successfully assigned as follows: Engine: V9 114 The SAS System 13:32 Friday, January 29, 2021 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code MPRINT(TAXSCF): * csv file for TAXSIM v32; MPRINT(TAXSCF): FILENAME SCFTAX "txpydata16.csv"; MPRINT(TAXSCF): * csv from TAXSIM v32; MPRINT(TAXSCF): FILENAME TAXSIM "results16.csv"; MPRINT(TAXSCF): * read in public SCF data, assumes dataset name is pXXiY.sas7bdat; MPRINT(TAXSCF): * NOTE: Any changes to the libname or data set name must also be made in this data step; MPRINT(TAXSCF): DATA MAIN; MPRINT(TAXSCF): SET SCF16.P16I6; NOTE: Data file SCF16.P16I6.DATA is in a format that is native to another host, or the file encoding does not match the session encoding. Cross Environment Data Access will be used, which might require additional CPU resources and might reduce performance. MPRINT(TAXSCF): RUN; NOTE: There were 31240 observations read from the data set SCF16.P16I6. NOTE: The data set WORK.MAIN has 31240 observations and 5320 variables. NOTE: DATA statement used (Total process time): real time 7.79 seconds cpu time 7.80 seconds MPRINT(TAXSCF): PROC SORT DATA=MAIN; MPRINT(TAXSCF): BY Y1; MPRINT(TAXSCF): RUN; NOTE: There were 31240 observations read from the data set WORK.MAIN. NOTE: The data set WORK.MAIN has 31240 observations and 5320 variables. NOTE: PROCEDURE SORT used (Total process time): real time 0.52 seconds cpu time 0.52 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET MAIN; MPRINT(TAXSCF): file "null.txt"; MPRINT(TAXSCF): WGT=(X42001/5); MPRINT(TAXSCF): POP=1; MPRINT(TAXSCF): * setting STATE variable to zero, set to -1 if you want TAXSIM to compute state tax for all 51 states; MPRINT(TAXSCF): STATE=0; MPRINT(TAXSCF): * Small data fix for one case in 1992; MPRINT(TAXSCF): * Small data fix for one case in 1998; MPRINT(TAXSCF): * Small data fix for one case in 2007; MPRINT(TAXSCF): * Small data fix for one case in 2013; MPRINT(TAXSCF): * Payment frequency on other loans not asked in 1989, assumed to be monthly; MPRINT(TAXSCF): * Only one other income variable after 1992, set to zero for 1992 forward; MPRINT(TAXSCF): X5726=0; MPRINT(TAXSCF): X5727=0; MPRINT(TAXSCF): * Spouse/partner in PEU, need to create X7020 for 1989 to 1998; MPRINT(TAXSCF): * A few other recodes to construct variables not asked in 1989 and 1992; MPRINT(TAXSCF): * Number of years with spouse/partner; MPRINT(TAXSCF): IF 2016=X8005 THEN X7370=-1; MPRINT(TAXSCF): ELSE X7370=2016-X8005; MPRINT(TAXSCF): * Number of people in NPEU, need to compute for 1989 to 2004, variable exists for 2007 forward; MPRINT(TAXSCF): * Absent spouse/partner indicator; MPRINT(TAXSCF): IF (X100=5) | (X106=5 & X107 IN(2 5 12)) THEN ABSP_P=1; MPRINT(TAXSCF): ELSE ABSP_P=0; MPRINT(TAXSCF): PERSEXP=1+(X105 IN(1 2))*(ABSP_P=0); MPRINT(TAXSCF): * Including children living elsewhere that are under 18, max of one extra as there is uncertainty 115 The SAS System 13:32 Friday, January 29, 2021 about dependent status; MPRINT(TAXSCF): 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) + (X226 IN(4 13))*(X228 < 19) + (X5912 > 0 | X5912=-2); MPRINT(TAXSCF): * For the child tax credit - must be under 17; MPRINT(TAXSCF): 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) + (X226 IN(4 13))*(X228 < 17); MPRINT(TAXSCF): KIDSU18=(X108 IN(4 13))*(X110 < 18) + (X114 IN(4 13))*(X116 < 18) + (X120 IN(4 13))*(X122 < 18) + (X126 IN(4 13))*(X128 < 18) + (X132 IN(4 13))*(X134 < 18) + (X202 IN(4 13))*(X204 < 18) + (X208 IN(4 13))*(X210 < 18) + (X214 IN(4 13))*(X216 < 18) + (X220 IN(4 13))*(X222 < 18) + (X226 IN(4 13))*(X228 < 18); MPRINT(TAXSCF): KIDSU13=(X108 IN(4 13))*(X110 < 13) + (X114 IN(4 13))*(X116 < 13) + (X120 IN(4 13))*(X122 < 13) + (X126 IN(4 13))*(X128 < 13) + (X132 IN(4 13))*(X134 < 13) + (X202 IN(4 13))*(X204 < 13) + (X208 IN(4 13))*(X210 < 13) + (X214 IN(4 13))*(X216 < 13) + (X220 IN(4 13))*(X222 < 13) + (X226 IN(4 13))*(X228 < 13); MPRINT(TAXSCF): * Indicator for R living with a partner; MPRINT(TAXSCF): LWP=(X8023=2); MPRINT(TAXSCF): RAGE=X14; MPRINT(TAXSCF): * Set spouse/parnter age to zero if absent spouse/partner; MPRINT(TAXSCF): SPAGE=X19*(X7020=2); MPRINT(TAXSCF): * Possible scenarios, not considering NPEU right now, will create those tax units last 1. Married filing jointly households = tax unit 2. Single person households = tax unit 3. Filing separately households = split into two tax units, need to determine if single or married filing separately filing status 4. LWP households = split into two tax units even if one person is a nonfiler For 3. and 4., one of the tax units may have head of household status depending on presence of children For each new tax unit, start with replicate of household data and parse out income, deductions, exemptions; MPRINT(TAXSCF): * Create new observations from married filing separately households or LWP households. 0. Tax unit = household 1. Created tax unit for household head 2. Created tax unit for spouse/parnter 3-8. Created tax unit for NPEU member Note: If R and Sp are legally married for more than one year, treat as married filing joint even if x5746=3,4. If R and Sp LWP and report filing jointly treat as two tax units. If R and Sp married and report filing separately, treat as filing jointly unless either R or Sp has a past marriage. Inspection of the data reveals that too many married couples report filing separately when compared to the IRS data. The past marriage condition put the number closer to the IRS data.; MPRINT(TAXSCF): MARRIED=(X8023=1 & X105=1 & X7370 >= 1 & X7020=2); MPRINT(TAXSCF): IF (X5744 IN(1 6) & X5746=1 & MARRIED=1) | (MARRIED=1 & ((X5744=5 | X5746 IN(3 4)) | (X5746=2 & X7377^=2 & X7392^=2))) | (X8023 > 0 & X105=0 & (X5744=5 | (X5744 IN(1 6) & X5746=0))) | (X8023 > 0 & X105 > 0 & X5744 IN(1 5 6) & X5746=0 & X7020=1) | (X8023=8 & X105=0 & X5744=1 & X5746=1) THEN TAXUNIT=0; MPRINT(TAXSCF): ELSE IF (X5744 IN(1 6) & X5746 IN(2 3 4)) | (X8023 > 0 & X105 > 0 & (X5744=5 | (X5744 IN(1 6) & X5746 IN(0 1)))) | (X8023=1 & X105=1 & X7370=-1 & X5744=1) THEN TAXUNIT=1; MPRINT(TAXSCF): ELSE PUT "MISSING TAXUNIT STATUS " YY1= X5744= X5746= X8023= X105= X7020= MARRIED= X7372= X7018= X7370=; MPRINT(TAXSCF): TUAGE=RAGE; MPRINT(TAXSCF): RUN; NOTE: The file "null.txt" is: Filename=/disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code/null.txt, Owner Name=taxsim,Group Name=taxsim, Access Permission=-rw-r--r--, Last Modified=29Jan2021:13:32:42 NOTE: 0 records were written to the file "null.txt". NOTE: There were 31240 observations read from the data set WORK.MAIN. NOTE: The data set WORK.SCF has 31240 observations and 5338 variables. NOTE: DATA statement used (Total process time): real time 0.68 seconds cpu time 0.68 seconds MPRINT(TAXSCF): DATA NEWUNITS; 116 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): IF TAXUNIT=1; MPRINT(TAXSCF): TAXUNIT=2; MPRINT(TAXSCF): TUAGE=SPAGE; MPRINT(TAXSCF): SPAGE=0; MPRINT(TAXSCF): RUN; NOTE: There were 31240 observations read from the data set WORK.SCF. NOTE: The data set WORK.NEWUNITS has 3137 observations and 5338 variables. NOTE: DATA statement used (Total process time): real time 0.30 seconds cpu time 0.30 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF NEWUNITS; MPRINT(TAXSCF): RUN; NOTE: There were 31240 observations read from the data set WORK.SCF. NOTE: There were 3137 observations read from the data set WORK.NEWUNITS. NOTE: The data set WORK.SCF has 34377 observations and 5338 variables. NOTE: DATA statement used (Total process time): real time 0.68 seconds cpu time 0.68 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): * Codes for filestat, assigning status even if did not file, will determine non-filer status later, filing status for split tax units done after splitting up income 1= Single 2= Married filing jointly 3= Married filing separately 4= Head of HH 5= Qualified widower; MPRINT(TAXSCF): FILESTAT=0; MPRINT(TAXSCF): IF TAXUNIT=0 THEN DO; MPRINT(TAXSCF): IF (MARRIED=1) THEN FILESTAT=2; MPRINT(TAXSCF): ELSE IF MARRIED=0 THEN DO; MPRINT(TAXSCF): IF PERSEXP=1 & KIDS=0 THEN FILESTAT=1; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS > 0 & X8023=5 & X7372=5 & X8007>=2013 THEN FILESTAT=5; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS > 0 THEN FILESTAT=4; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTEXPT=PERSEXP+KIDS; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * No AGI variables starting in 2010; MPRINT(TAXSCF): * Coding income variables with -1 and -2 to zero; MPRINT(TAXSCF): ARRAY NEG {*} X5704 X5714 X5724 X5726 X5729; MPRINT(TAXSCF): DO I=1 TO DIM(NEG); MPRINT(TAXSCF): IF NEG{I} IN(-2 -1) THEN NEG{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Income from wages and business; MPRINT(TAXSCF): R_LABORINC=MAX(0,X4112) MPRINT(ACONV): *((X4113=2)*52.18+(X4113=3)*26.09+(X4113=4)*12+(X4113=5)*4+(X4113=6)+(X4113=8)+ (X4113=11)*2+(X4113=12)*6+(X4113=31)*24+(X4113=14)+(X4113=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): SP_LABORINC=MAX(0,X4712) MPRINT(ACONV): *((X4713=2)*52.18+(X4713=3)*26.09+(X4713=4)*12+(X4713=5)*4+(X4713=6)+(X4713=8)+ (X4713=11)*2+(X4713=12)*6+(X4713=31)*24+(X4713=14)+(X4713=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): R_BUSINC=MAX(0,X4131) MPRINT(ACONV): *((X4132=2)*52.18+(X4132=3)*26.09+(X4132=4)*12+(X4132=5)*4+(X4132=6)+(X4132=8)+ 117 The SAS System 13:32 Friday, January 29, 2021 (X4132=11)*2+(X4132=12)*6+(X4132=31)*24+(X4132=14)+(X4132=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): SP_BUSINC=MAX(0,X4731) MPRINT(ACONV): *((X4732=2)*52.18+(X4732=3)*26.09+(X4732=4)*12+(X4732=5)*4+(X4732=6)+(X4732=8)+ (X4732=11)*2+(X4732=12)*6+(X4732=31)*24+(X4732=14)+(X4732=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): * Income from pensions and tax-deferred account withdrawals. No withdrawal information for IRAs or future pensions prior to 2004. No withdrawal information for any tax-deferred accounts, aside from other income, prior to 2001; MPRINT(TAXSCF): R_REGPEN=MAX(0,(X5318 MPRINT(ACONV): *((X5319=2)*52.18+(X5319=3)*26.09+(X5319=4)*12+(X5319=5)*4+(X5319=6)+(X5319=8)+ (X5319=11)*2+(X5319=12)*6+(X5319=31)*24+(X5319=14)+(X5319=22)) MPRINT(TAXSCF): *(X5315=1)*(X5317>=1))) +MAX(0,(X5326 MPRINT(ACONV): *((X5327=2)*52.18+(X5327=3)*26.09+(X5327=4)*12+(X5327=5)*4+(X5327=6)+(X5327=8)+ (X5327=11)*2+(X5327=12)*6+(X5327=31)*24+(X5327=14)+(X5327=22)) MPRINT(TAXSCF): *(X5323=1)*(X5325>=1))) +MAX(0,(X5334 MPRINT(ACONV): *((X5335=2)*52.18+(X5335=3)*26.09+(X5335=4)*12+(X5335=5)*4+(X5335=6)+(X5335=8)+ (X5335=11)*2+(X5335=12)*6+(X5335=31)*24+(X5335=14)+(X5335=22)) MPRINT(TAXSCF): *(X5331=1)*(X5333>=1))) +MAX(0,(X5418 MPRINT(ACONV): *((X5419=2)*52.18+(X5419=3)*26.09+(X5419=4)*12+(X5419=5)*4+(X5419=6)+(X5419=8)+ (X5419=11)*2+(X5419=12)*6+(X5419=31)*24+(X5419=14)+(X5419=22)) MPRINT(TAXSCF): *(X5415=1)*(X5417>=1))); MPRINT(TAXSCF): R_WITHDRAW=X6558+(X6574*.5)+MAX(0,(X6464 MPRINT(ACONV): *((X6465=2)*52.18+(X6465=3)*26.09+(X6465=4)*12+(X6465=5)*4+(X6465=6)+(X6465=8)+ (X6465=11)*2+(X6465=12)*6+(X6465=31)*24+(X6465=14)+(X6465=22)) MPRINT(TAXSCF): *(X5315=1))) +MAX(0,(X6469 MPRINT(ACONV): *((X6470=2)*52.18+(X6470=3)*26.09+(X6470=4)*12+(X6470=5)*4+(X6470=6)+(X6470=8)+ (X6470=11)*2+(X6470=12)*6+(X6470=31)*24+(X6470=14)+(X6470=22)) MPRINT(TAXSCF): *(X5323=1)))+MAX(0,(X6474 MPRINT(ACONV): *((X6475=2)*52.18+(X6475=3)*26.09+(X6475=4)*12+(X6475=5)*4+(X6475=6)+(X6475=8)+ (X6475=11)*2+(X6475=12)*6+(X6475=31)*24+(X6475=14)+(X6475=22)) MPRINT(TAXSCF): *(X5331=1))) +MAX(0,(X6479 MPRINT(ACONV): *((X6480=2)*52.18+(X6480=3)*26.09+(X6480=4)*12+(X6480=5)*4+(X6480=6)+(X6480=8)+ (X6480=11)*2+(X6480=12)*6+(X6480=31)*24+(X6480=14)+(X6480=22)) MPRINT(TAXSCF): *(X5415=1)))+MAX(0,(X6965 MPRINT(ACONV): *((X6966=2)*52.18+(X6966=3)*26.09+(X6966=4)*12+(X6966=5)*4+(X6966=6)+(X6966=8)+ (X6966=11)*2+(X6966=12)*6+(X6966=31)*24+(X6966=14)+(X6966=22)) MPRINT(TAXSCF): *(X5606=1))) +MAX(0,(X6971 MPRINT(ACONV): *((X6972=2)*52.18+(X6972=3)*26.09+(X6972=4)*12+(X6972=5)*4+(X6972=6)+(X6972=8)+ (X6972=11)*2+(X6972=12)*6+(X6972=31)*24+(X6972=14)+(X6972=22)) MPRINT(TAXSCF): *(X5614=1)))+MAX(0,(X6977 MPRINT(ACONV): *((X6978=2)*52.18+(X6978=3)*26.09+(X6978=4)*12+(X6978=5)*4+(X6978=6)+(X6978=8)+ (X6978=11)*2+(X6978=12)*6+(X6978=31)*24+(X6978=14)+(X6978=22)) MPRINT(TAXSCF): *(X5622=1))) +MAX(0,(X6983 MPRINT(ACONV): *((X6984=2)*52.18+(X6984=3)*26.09+(X6984=4)*12+(X6984=5)*4+(X6984=6)+(X6984=8)+ (X6984=11)*2+(X6984=12)*6+(X6984=31)*24+(X6984=14)+(X6984=22)) MPRINT(TAXSCF): *(X5630=1)))+(X5724)*(X5725=11)*.5; MPRINT(TAXSCF): SP_REGPEN=MAX(0,(X5318 MPRINT(ACONV): *((X5319=2)*52.18+(X5319=3)*26.09+(X5319=4)*12+(X5319=5)*4+(X5319=6)+(X5319=8)+ (X5319=11)*2+(X5319=12)*6+(X5319=31)*24+(X5319=14)+(X5319=22)) MPRINT(TAXSCF): *(X5315=2)*(X5317>=1))) +MAX(0,(X5326 MPRINT(ACONV): *((X5327=2)*52.18+(X5327=3)*26.09+(X5327=4)*12+(X5327=5)*4+(X5327=6)+(X5327=8)+ (X5327=11)*2+(X5327=12)*6+(X5327=31)*24+(X5327=14)+(X5327=22)) MPRINT(TAXSCF): *(X5323=2)*(X5325>=1))) +MAX(0,(X5334 MPRINT(ACONV): *((X5335=2)*52.18+(X5335=3)*26.09+(X5335=4)*12+(X5335=5)*4+(X5335=6)+(X5335=8)+ (X5335=11)*2+(X5335=12)*6+(X5335=31)*24+(X5335=14)+(X5335=22)) MPRINT(TAXSCF): *(X5331=2)*(X5333>=1))) +MAX(0,(X5418 MPRINT(ACONV): *((X5419=2)*52.18+(X5419=3)*26.09+(X5419=4)*12+(X5419=5)*4+(X5419=6)+(X5419=8)+ 118 The SAS System 13:32 Friday, January 29, 2021 (X5419=11)*2+(X5419=12)*6+(X5419=31)*24+(X5419=14)+(X5419=22)) MPRINT(TAXSCF): *(X5415=2)*(X5417>=1))); MPRINT(TAXSCF): SP_WITHDRAW=X6566+(X6574*.5)+MAX(0,(X6464 MPRINT(ACONV): *((X6465=2)*52.18+(X6465=3)*26.09+(X6465=4)*12+(X6465=5)*4+(X6465=6)+(X6465=8)+ (X6465=11)*2+(X6465=12)*6+(X6465=31)*24+(X6465=14)+(X6465=22)) MPRINT(TAXSCF): *(X5315=2))) +MAX(0,(X6469 MPRINT(ACONV): *((X6470=2)*52.18+(X6470=3)*26.09+(X6470=4)*12+(X6470=5)*4+(X6470=6)+(X6470=8)+ (X6470=11)*2+(X6470=12)*6+(X6470=31)*24+(X6470=14)+(X6470=22)) MPRINT(TAXSCF): *(X5323=2)))+MAX(0,(X6474 MPRINT(ACONV): *((X6475=2)*52.18+(X6475=3)*26.09+(X6475=4)*12+(X6475=5)*4+(X6475=6)+(X6475=8)+ (X6475=11)*2+(X6475=12)*6+(X6475=31)*24+(X6475=14)+(X6475=22)) MPRINT(TAXSCF): *(X5331=2))) +MAX(0,(X6479 MPRINT(ACONV): *((X6480=2)*52.18+(X6480=3)*26.09+(X6480=4)*12+(X6480=5)*4+(X6480=6)+(X6480=8)+ (X6480=11)*2+(X6480=12)*6+(X6480=31)*24+(X6480=14)+(X6480=22)) MPRINT(TAXSCF): *(X5415=2)))+MAX(0,(X6965 MPRINT(ACONV): *((X6966=2)*52.18+(X6966=3)*26.09+(X6966=4)*12+(X6966=5)*4+(X6966=6)+(X6966=8)+ (X6966=11)*2+(X6966=12)*6+(X6966=31)*24+(X6966=14)+(X6966=22)) MPRINT(TAXSCF): *(X5606=2))) +MAX(0,(X6971 MPRINT(ACONV): *((X6972=2)*52.18+(X6972=3)*26.09+(X6972=4)*12+(X6972=5)*4+(X6972=6)+(X6972=8)+ (X6972=11)*2+(X6972=12)*6+(X6972=31)*24+(X6972=14)+(X6972=22)) MPRINT(TAXSCF): *(X5614=2)))+MAX(0,(X6977 MPRINT(ACONV): *((X6978=2)*52.18+(X6978=3)*26.09+(X6978=4)*12+(X6978=5)*4+(X6978=6)+(X6978=8)+ (X6978=11)*2+(X6978=12)*6+(X6978=31)*24+(X6978=14)+(X6978=22)) MPRINT(TAXSCF): *(X5622=2))) +MAX(0,(X6983 MPRINT(ACONV): *((X6984=2)*52.18+(X6984=3)*26.09+(X6984=4)*12+(X6984=5)*4+(X6984=6)+(X6984=8)+ (X6984=11)*2+(X6984=12)*6+(X6984=31)*24+(X6984=14)+(X6984=22)) MPRINT(TAXSCF): *(X5630=2)))+(X5724)*(X5725=11)*.5; MPRINT(TAXSCF): * For new tax units need to split up income and determine which new tax unit is assigned which deductions and exemptions. Also need to zero out any variables not relevant to the new tax unit (ex. spouses wages); MPRINT(TAXSCF): IF TAXUNIT IN(1 2) THEN DO; MPRINT(TAXSCF): * age; MPRINT(TAXSCF): IF (TAXUNIT=1) THEN SPAGE=0; MPRINT(TAXSCF): * wages; MPRINT(TAXSCF): IF (TAXUNIT=1 & (R_LABORINC+SP_LABORINC>0)) THEN WSINCOME=MAX(0,X5702)*(R_LABORINC/(R_LABORINC+SP_LABORINC))*(R_LABORINC>0); MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & (R_LABORINC+SP_LABORINC>0)) THEN WSINCOME=MAX(0,X5702)*(SP_LABORINC/(R_LABORINC+SP_LABORINC))*(SP_LABORINC>0); MPRINT(TAXSCF): ELSE WSINCOME=MAX(0,X5702)*.5; MPRINT(TAXSCF): WSINCSP=0; MPRINT(TAXSCF): * business income; MPRINT(TAXSCF): R_SOLEPROP=(X4106 IN(2 3 4) | (X3113=1 & X3119=2) | (X3213=1 & X3219=2)); MPRINT(TAXSCF): SP_SOLEPROP=(X4706 IN(2 3 4) | (X3114=1 & X3119=2) | (X3214=1 & X3219=2)); MPRINT(TAXSCF): IF (TAXUNIT=1 & (R_BUSINC+SP_BUSINC>0) & (R_SOLEPROP=1 | SP_SOLEPROP=1)) THEN DO; MPRINT(TAXSCF): IF (R_SOLEPROP=1 & SP_SOLEPROP=1) THEN TBUSINC=X5704*(R_BUSINC/(R_BUSINC+SP_BUSINC))*(R_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=1 & SP_SOLEPROP=0) THEN TBUSINC=X5704; MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=0 & SP_SOLEPROP=1) THEN TBUSINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & (R_BUSINC+SP_BUSINC>0) & (R_SOLEPROP=1 | SP_SOLEPROP=1)) THEN DO; MPRINT(TAXSCF): IF (R_SOLEPROP=1 & SP_SOLEPROP=1) THEN TBUSINC=X5704*(SP_BUSINC/(R_BUSINC+SP_BUSINC))*(SP_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=0 & SP_SOLEPROP=1) THEN TBUSINC=X5704; MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=1 & SP_SOLEPROP=0) THEN TBUSINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE TBUSINC=X5704*.5; MPRINT(TAXSCF): * interest, dividends, and capital gains - just split 50-50; MPRINT(TAXSCF): NTAXINC= MAX(0,X5706)*.5; MPRINT(TAXSCF): INTINC= MAX(0,X5708)*.5; MPRINT(TAXSCF): DIVINC= MAX(0,X5710)*.5; MPRINT(TAXSCF): IF X5712=-1 THEN CAPGLINC=0; 119 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE CAPGLINC=X5712*.5; MPRINT(TAXSCF): * rent, royalties, partnership and scorp income; MPRINT(TAXSCF): R_PARTNER_SCORP=(X4106 IN(2 3 4) | (X3113=1 & X3119 IN(1 3 6 11 12 15)) | (X3213=1 & X3219 IN(1 3 6 11 12 15))); MPRINT(TAXSCF): SP_PARTNER_SCORP=(X4106 IN(2 3 4) | (X3114=1 & X3119 IN(1 3 6 11 12 15)) | (X3214=1 & X3219 IN(1 3 6 11 12 15))); MPRINT(TAXSCF): IF (TAXUNIT=1 & (R_BUSINC+SP_BUSINC>0) & (R_PARTNER_SCORP=1 | SP_PARTNER_SCORP=1)) THEN DO; MPRINT(TAXSCF): IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=1) THEN RENTINC=X5714*(R_BUSINC/(R_BUSINC+SP_BUSINC))*(R_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=0) THEN RENTINC=X5714; MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=0 & SP_PARTNER_SCORP=1) THEN RENTINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & (R_BUSINC+SP_BUSINC>0) & (R_PARTNER_SCORP=1 | SP_PARTNER_SCORP=1)) THEN DO; MPRINT(TAXSCF): IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=1) THEN RENTINC=X5714*(SP_BUSINC/(R_BUSINC+SP_BUSINC))*(SP_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=0 & SP_PARTNER_SCORP=1) THEN RENTINC=X5714; MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=0) THEN RENTINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE RENTINC=X5714*.5; MPRINT(TAXSCF): * unemployment income, no questions about unemployed in past 12 months prior to 1998; MPRINT(TAXSCF): IF (TAXUNIT=1) THEN DO; MPRINT(TAXSCF): IF (X6780=1) THEN UNEMPINC=MAX(0,X5716)*(X6784 IN(0 5))+MAX(0,X5716)*(X6784=1)*.5; MPRINT(TAXSCF): ELSE IF (X6780=5 & X6784=1) THEN UNEMPINC=0; MPRINT(TAXSCF): ELSE UNEMPINC=MAX(0,X5716)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2) THEN DO; MPRINT(TAXSCF): IF (X6784=1) THEN UNEMPINC=MAX(0,X5716)*(X6780 IN(0 5))+MAX(0,X5716)*(X6780=1)*.5; MPRINT(TAXSCF): ELSE IF (X6784=5 & X6780=1) THEN UNEMPINC=0; MPRINT(TAXSCF): ELSE UNEMPINC=MAX(0,X5716)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * child support and alimony income; MPRINT(TAXSCF): IF (TAXUNIT=1 & X7377=2) THEN DO; MPRINT(TAXSCF): CHSPALINC=MAX(0,X5718)*(X7392^=2)+MAX(0,X5718)*(X7392=2)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & X7392=2) THEN DO; MPRINT(TAXSCF): CHSPALINC=MAX(0,X5718)*(X7377^=2)+MAX(0,X5718)*(X7377=2)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE CHSPALINC=MAX(0,X5718)*.5; MPRINT(TAXSCF): * government transfers, split 50/50; MPRINT(TAXSCF): AFDCINC=MAX(0,X5720)*.5; MPRINT(TAXSCF): * other income, split 50/50 - remove other income that is non-taxable, such as scholarships/grants, inheritances/gifts/, support from family or others, also remove IRA/Keogh income; MPRINT(TAXSCF): * special fix for 1992, removing other income coded 14, repayment of debts, it appears the total amount of the debt was reported, not just the interest on the debt; MPRINT(TAXSCF): OTHINC= (X5724)*(X5725 NOT IN(3 11 12 13 28))*.5+(X5726)*(X5727 NOT IN(3 11 12 13 28))*.5; MPRINT(TAXSCF): * social security and pension income, adding in withdrawals from IRA/Keogh/401ks; MPRINT(TAXSCF): R_GSSINC=MAX(0,(X5306 MPRINT(ACONV): *((X5307=2)*52.18+(X5307=3)*26.09+(X5307=4)*12+(X5307=5)*4+(X5307=6)+(X5307=8)+ (X5307=11)*2+(X5307=12)*6+(X5307=31)*24+(X5307=14)+(X5307=22)) MPRINT(TAXSCF): *(X5305>=1))); MPRINT(TAXSCF): SP_GSSINC=MAX(0,(X5311 MPRINT(ACONV): *((X5312=2)*52.18+(X5312=3)*26.09+(X5312=4)*12+(X5312=5)*4+(X5312=6)+(X5312=8)+ (X5312=11)*2+(X5312=12)*6+(X5312=31)*24+(X5312=14)+(X5312=22)) MPRINT(TAXSCF): *(X5310>=1))); MPRINT(TAXSCF): T_GSSINC=MAX(0,((X5306 MPRINT(ACONV): *((X5307=2)*52.18+(X5307=3)*26.09+(X5307=4)*12+(X5307=5)*4+(X5307=6)+(X5307=8)+ (X5307=11)*2+(X5307=12)*6+(X5307=31)*24+(X5307=14)+(X5307=22)) MPRINT(TAXSCF): *(X5305>=1))+(X5311 120 The SAS System 13:32 Friday, January 29, 2021 MPRINT(ACONV): *((X5312=2)*52.18+(X5312=3)*26.09+(X5312=4)*12+(X5312=5)*4+(X5312=6)+(X5312=8)+ (X5312=11)*2+(X5312=12)*6+(X5312=31)*24+(X5312=14)+(X5312=22)) MPRINT(TAXSCF): *(X5310>=1)))); MPRINT(TAXSCF): NOSS_X5722=MAX(0,(X5722-T_GSSINC)); MPRINT(TAXSCF): IF (TAXUNIT=1) THEN DO; MPRINT(TAXSCF): IF (R_REGPEN > 0) THEN PENINC=NOSS_X5722*(R_REGPEN/(R_REGPEN+SP_REGPEN))+R_WITHDRAW; MPRINT(TAXSCF): ELSE IF (R_REGPEN=0 & R_WITHDRAW > 0) THEN PENINC=R_WITHDRAW; MPRINT(TAXSCF): ELSE IF (R_REGPEN=0 & R_WITHDRAW=0 & SP_REGPEN > 0) THEN PENINC=0; MPRINT(TAXSCF): ELSE IF (R_REGPEN=0 & R_WITHDRAW=0 & SP_REGPEN=0) THEN PENINC=NOSS_X5722*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2) THEN DO; MPRINT(TAXSCF): IF (SP_REGPEN > 0) THEN PENINC=NOSS_X5722*(SP_REGPEN/(R_REGPEN+SP_REGPEN))+SP_WITHDRAW; MPRINT(TAXSCF): ELSE IF (SP_REGPEN=0 & SP_WITHDRAW > 0) THEN PENINC=SP_WITHDRAW; MPRINT(TAXSCF): ELSE IF (SP_REGPEN=0 & SP_WITHDRAW=0 & R_REGPEN > 0) THEN PENINC=0; MPRINT(TAXSCF): ELSE IF (SP_REGPEN=0 & SP_WITHDRAW=0 & R_REGPEN=0) THEN PENINC=NOSS_X5722*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): GSSINC=MAX(0,R_GSSINC)*(TAXUNIT=1)+MAX(0,SP_GSSINC)*(TAXUNIT=2); MPRINT(TAXSCF): OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; MPRINT(TAXSCF): NONTAX=NTAXINC+AFDCINC; MPRINT(TAXSCF): RENT=MAX(0,(X602 MPRINT(ACONV): *((X603=2)*52.18+(X603=3)*26.09+(X603=4)*12+(X603=5)*4+(X603=6)+(X603=8)+ (X603=11)*2+(X603=12)*6+(X603=31)*24+(X603=14)+(X603=22)) MPRINT(TAXSCF): ),(X612 MPRINT(ACONV): *((X613=2)*52.18+(X613=3)*26.09+(X613=4)*12+(X613=5)*4+(X613=6)+(X613=8)+ (X613=11)*2+(X613=12)*6+(X613=31)*24+(X613=14)+(X613=22)) MPRINT(TAXSCF): ),(X619 MPRINT(ACONV): *((X620=2)*52.18+(X620=3)*26.09+(X620=4)*12+(X620=5)*4+(X620=6)+(X620=8)+ (X620=11)*2+(X620=12)*6+(X620=31)*24+(X620=14)+(X620=22)) MPRINT(TAXSCF): ), (X708 MPRINT(ACONV): *((X709=2)*52.18+(X709=3)*26.09+(X709=4)*12+(X709=5)*4+(X709=6)+(X709=8)+ (X709=11)*2+(X709=12)*6+(X709=31)*24+(X709=14)+(X709=22)) MPRINT(TAXSCF): ))*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TAXUNIT=0 THEN DO; MPRINT(TAXSCF): R_SOLEPROP=(X4106 IN(2 3 4) | (X3113=1 & X3119=2) | (X3213=1 & X3219=2)); MPRINT(TAXSCF): SP_SOLEPROP=(X4706 IN(2 3 4) | (X3114=1 & X3119=2) | (X3214=1 & X3219=2)); MPRINT(TAXSCF): * Split wages across primary and secondary earner for married filing jointly households; MPRINT(TAXSCF): IF FILESTAT^=2 THEN DO; MPRINT(TAXSCF): WSINCOME=MAX(0,X5702); MPRINT(TAXSCF): WSINCSP=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF FILESTAT=2 THEN DO; MPRINT(TAXSCF): IF ((R_LABORINC > 0 & SP_LABORINC=0) | (R_LABORINC=0 & SP_LABORINC > 0) | (R_LABORINC=0 & SP_LABORINC=0)) THEN DO; MPRINT(TAXSCF): WSINCOME=MAX(0,X5702); MPRINT(TAXSCF): WSINCSP=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (R_LABORINC > 0 & SP_LABORINC > 0) THEN DO; MPRINT(TAXSCF): WSINCOME=MAX(0,X5702)*(R_LABORINC/(R_LABORINC+SP_LABORINC)); MPRINT(TAXSCF): WSINCSP=MAX(0,X5702)*(SP_LABORINC/(R_LABORINC+SP_LABORINC)); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TBUSINC = X5704; MPRINT(TAXSCF): NTAXINC= MAX(0,X5706); MPRINT(TAXSCF): INTINC= MAX(0,X5708); MPRINT(TAXSCF): DIVINC= MAX(0,X5710); MPRINT(TAXSCF): IF X5712=-1 THEN CAPGLINC=0; MPRINT(TAXSCF): ELSE CAPGLINC=X5712; 121 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): RENTINC= X5714; MPRINT(TAXSCF): UNEMPINC = MAX(0,X5716); MPRINT(TAXSCF): CHSPALINC=MAX(0,X5718); MPRINT(TAXSCF): AFDCINC = MAX(0,X5720); MPRINT(TAXSCF): * Starting in 2004, IRA/Keogh/401K type income is not reported in other income, instead withdrawals are reported separately during the questions about the assets, so need to add the withdrawals to pension income. There may be a few withdrawals still reported as other income if the asset account was closed or emptied out during the year prior to the survey.; MPRINT(TAXSCF): * also remove other income that is non-taxable, such as scholarships/grants, inheritances/gifts/, support from family or others; MPRINT(TAXSCF): * special fix for 1992, removing other income coded 14, repayment of debts, it appears the total amount of the debt was report, not just the interest on the debt; MPRINT(TAXSCF): OTHINC= (X5724)*(X5725 NOT IN(3 11 12 13 28))+(X5726)*(X5727 NOT IN(3 11 12 13 28)); MPRINT(TAXSCF): GSSINC=MAX(0,((X5306 MPRINT(ACONV): *((X5307=2)*52.18+(X5307=3)*26.09+(X5307=4)*12+(X5307=5)*4+(X5307=6)+(X5307=8)+ (X5307=11)*2+(X5307=12)*6+(X5307=31)*24+(X5307=14)+(X5307=22)) MPRINT(TAXSCF): *(X5305>=1))+(X5311 MPRINT(ACONV): *((X5312=2)*52.18+(X5312=3)*26.09+(X5312=4)*12+(X5312=5)*4+(X5312=6)+(X5312=8)+ (X5312=11)*2+(X5312=12)*6+(X5312=31)*24+(X5312=14)+(X5312=22)) MPRINT(TAXSCF): *(X5310>=1)))); MPRINT(TAXSCF): IF GSSINC=0 THEN PENINC= MAX(0,X5722)+R_WITHDRAW+SP_WITHDRAW; MPRINT(TAXSCF): ELSE IF (GSSINC > 0) THEN PENINC=MAX(0,(X5722-GSSINC)) +R_WITHDRAW+SP_WITHDRAW; MPRINT(TAXSCF): OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; MPRINT(TAXSCF): NONTAX=NTAXINC+AFDCINC; MPRINT(TAXSCF): RENT=MAX(0,(X602 MPRINT(ACONV): *((X603=2)*52.18+(X603=3)*26.09+(X603=4)*12+(X603=5)*4+(X603=6)+(X603=8)+ (X603=11)*2+(X603=12)*6+(X603=31)*24+(X603=14)+(X603=22)) MPRINT(TAXSCF): ),(X612 MPRINT(ACONV): *((X613=2)*52.18+(X613=3)*26.09+(X613=4)*12+(X613=5)*4+(X613=6)+(X613=8)+ (X613=11)*2+(X613=12)*6+(X613=31)*24+(X613=14)+(X613=22)) MPRINT(TAXSCF): ),(X619 MPRINT(ACONV): *((X620=2)*52.18+(X620=3)*26.09+(X620=4)*12+(X620=5)*4+(X620=6)+(X620=8)+ (X620=11)*2+(X620=12)*6+(X620=31)*24+(X620=14)+(X620=22)) MPRINT(TAXSCF): ), (X708 MPRINT(ACONV): *((X709=2)*52.18+(X709=3)*26.09+(X709=4)*12+(X709=5)*4+(X709=6)+(X709=8)+ (X709=11)*2+(X709=12)*6+(X709=31)*24+(X709=14)+(X709=22)) MPRINT(TAXSCF): )); MPRINT(TAXSCF): END; MPRINT(TAXSCF): * AGI - note that starting in 2010, AGI questions no longer asked, so using total income minus non-taxable income plus IRA/401k withdrawals as a proxy. No information on adjustments to AGI; MPRINT(TAXSCF): AGI=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC+UNEMPINC+CHSPALINC+OTHINC+PENINC+GSSINC; MPRINT(TAXSCF): IF AGI=-1 THEN AGI=0; MPRINT(TAXSCF): AGIGE50K=(AGI>=50000); MPRINT(TAXSCF): AGICL=1*(AGI < 50000)+2*(50000 <= AGI < 100000)+3*(AGI >= 100000); MPRINT(TAXSCF): * For allocating itemized deductions - mortgage interest, investment interest expense, property taxes, and charitable contributions - between new tax units, assume tax unit with higher income assigned all itemized deductions. Creating a flag here for use in computing deductions later in the program. Using wages, business, and pension income as income measure (all other income components are split 50/50 between the new tax units).; MPRINT(TAXSCF): IF (TAXUNIT IN(1 2)) THEN DO; MPRINT(TAXSCF): R_TINCOME=R_LABORINC+R_BUSINC+R_REGPEN+R_WITHDRAW; MPRINT(TAXSCF): SP_TINCOME=SP_LABORINC+SP_BUSINC+SP_REGPEN+SP_WITHDRAW; MPRINT(TAXSCF): ITEMDEDCT_FLAG=(TAXUNIT=1 & R_TINCOME >= SP_TINCOME) +(TAXUNIT=2 & SP_TINCOME > R_TINCOME); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TAXUNIT=0 THEN ITEMDEDCT_FLAG=1; MPRINT(TAXSCF): * Set personal exemption to one for split households, divide kids among split households, if one, give to both tax units, if even number, split evenly between tax units, if odd number, give more to higher income tax unit; MPRINT(TAXSCF): IF TAXUNIT IN(1 2) THEN DO; 122 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): PERSEXP=1; MPRINT(TAXSCF): IF KIDS>1 THEN DO; MPRINT(TAXSCF): IF (KIDSU13>0 & MOD(KIDSU13,2)=0) THEN KIDSU13=KIDSU13/2; MPRINT(TAXSCF): ELSE IF (KIDSU13>0 & MOD(KIDSU13,2)^=0) THEN DO; MPRINT(TAXSCF): KIDSU13=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU13/2,1))+ (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU13/2)-.5); MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (KIDSU17>0 & MOD(KIDSU17,2)=0) THEN KIDSU17=KIDSU17/2; MPRINT(TAXSCF): ELSE IF (KIDSU17>0 & MOD(KIDSU17,2)^=0) THEN DO; MPRINT(TAXSCF): KIDSU17=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU17/2,1))+ (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU17/2)-.5); MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (KIDSU18>0 & MOD(KIDSU18,2)=0) THEN KIDSU18=KIDSU18/2; MPRINT(TAXSCF): ELSE IF (KIDSU18>0 & MOD(KIDSU18,2)^=0) THEN DO; MPRINT(TAXSCF): KIDSU18=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU18/2,1))+ (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU18/2)-.5); MPRINT(TAXSCF): END; MPRINT(TAXSCF): KIDS=KIDSU13+KIDSU17+KIDSU18; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF PERSEXP=1 & MARRIED=1 THEN FILESTAT=3; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS=0 & MARRIED=0 THEN FILESTAT=1; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS>0 & MARRIED=0 THEN FILESTAT=4; MPRINT(TAXSCF): TOTEXPT=PERSEXP+KIDS; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF FILESTAT=0 THEN PUT "MISSING FILING STATUS " Y1= X5744= X5746= TAXUNIT= MARRIED= KIDS= PERSEXP=; MPRINT(TAXSCF): RUN; NOTE: There were 34377 observations read from the data set WORK.SCF. NOTE: The data set WORK.SCF has 34377 observations and 5380 variables. NOTE: DATA statement used (Total process time): real time 0.80 seconds cpu time 0.81 seconds MPRINT(TAXSCF): * Create tax units based on NPEU members. If there are multiple NPEU members, need to allocate income, assets, and debt across the members; MPRINT(TAXSCF): DATA TEMP NPEU; MPRINT(TAXSCF): SET SCF(WHERE=(TAXUNIT IN(0 1) & X7050 >=1)); MPRINT(TAXSCF): file "null.txt"; MPRINT(TAXSCF): TAXUNIT=2; MPRINT(TAXSCF): ARRAY NPEUAGE {*} X110 X116 X122 X128 X134 X204 X210 X216 X222 X228; MPRINT(TAXSCF): ARRAY LIVEWITH {*} X112 X118 X124 X130 X136 X206 X212 X218 X224 X230; MPRINT(TAXSCF): ARRAY FINDEP {*} X113 X119 X125 X131 X137 X207 X213 X219 X225 X231; MPRINT(TAXSCF): DO I=1 TO DIM(LIVEWITH); MPRINT(TAXSCF): IF LIVEWITH{I} IN(1 2 3 4) & FINDEP{I} IN(2 3 4 5) THEN DO; MPRINT(TAXSCF): TAXUNIT=TAXUNIT+1; MPRINT(TAXSCF): TUAGE=NPEUAGE{I}; MPRINT(TAXSCF): SPAGE=0; MPRINT(TAXSCF): OUTPUT NPEU; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): RUN; NOTE: The file "null.txt" is: Filename=/disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code/null.txt, 123 The SAS System 13:32 Friday, January 29, 2021 Owner Name=taxsim,Group Name=taxsim, Access Permission=-rw-r--r--, Last Modified=29Jan2021:13:32:45 NOTE: 0 records were written to the file "null.txt". NOTE: There were 3710 observations read from the data set WORK.SCF. WHERE TAXUNIT in (0, 1) and (X7050>=1); NOTE: The data set WORK.TEMP has 0 observations and 5380 variables. NOTE: The data set WORK.NPEU has 5185 observations and 5380 variables. NOTE: DATA statement used (Total process time): real time 0.19 seconds cpu time 0.19 seconds MPRINT(TAXSCF): DATA NPEU; MPRINT(TAXSCF): SET NPEU; MPRINT(TAXSCF): ARRAY INCTYPES {*} WSINCOME WSINCSP TBUSINC INTINC NTAXINC DIVINC RENTINC UNEMPINC AFDCINC GSSINC PENINC OTHINC CAPGLINC; MPRINT(TAXSCF): DO I=1 TO DIM(INCTYPES); MPRINT(TAXSCF): INCTYPES{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Allocate NPEU wage income across all NPEU members less than 70 years old. If only other type of income is Social Security, allocate amount across NPEU members age 62 or more. Otherwise, allocate total amount of nonwage income divided by the number of other types of income to each type of income equally to each NPEU member; MPRINT(TAXSCF): NUMU70=(0=62 & X113=5)+(X116>=62 & X119=5)+(X122>=62 & X125=5) +(X128>=62 & X131=5)+(X134>=62 & X137=5)+(X204>=62 & X207=5) +(X210>=62 & X213=5)+(X216>=62 & X219=5)+(X222>=62 & X225=5) +(X228>=62 & X231=5); MPRINT(TAXSCF): NUMINCTYPES=(X6406=1)+(X6407=1)+(X6408=1)+(X6409=1)+(X6410=1)+(X6411=1) +(X6412=1)+(X6413=1)+(X6414 > 5); MPRINT(TAXSCF): IF (NUMU70 > 0) THEN WSINCOME=(MAX(0,X6403)/NUMU70)*(TUAGE < 70); MPRINT(TAXSCF): ELSE WSINCOME=(MAX(0,X6403)/X7050); MPRINT(TAXSCF): IF (X6415 > 0 & NUMINCTYPES > 0) THEN DO; MPRINT(TAXSCF): IF (NUMGE62 > 0) THEN GSSINC=(X6406=1)*((MAX(0,X6415)/(NUMINCTYPES))/NUMGE62)*(TUAGE>=62); MPRINT(TAXSCF): ELSE GSSINC=(X6406=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): TBUSINC=(X6412=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): INTINC=(X6410=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): DIVINC=(X6411=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): RENTINC=(X6413=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): PENINC=(X6407=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050) +(X6408=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): AFDCINC=(X6409=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): CAPGLINC=(X6414 IN(13))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): UNEMPINC=(X6414 IN(10))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): OTHINC=(X6414 IN(11 12 15))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): END; MPRINT(TAXSCF): OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; MPRINT(TAXSCF): NONTAX=NTAXINC+AFDCINC; MPRINT(TAXSCF): * All NPEU tax units take the standard deduction, have one personal exemption, and have filing status of single; MPRINT(TAXSCF): ITEMDEDCT_FLAG=0; MPRINT(TAXSCF): PERSEXP=1; MPRINT(TAXSCF): TOTEXPT=1; MPRINT(TAXSCF): KIDS=0; MPRINT(TAXSCF): KIDSU13=0; MPRINT(TAXSCF): KIDSU17=0; MPRINT(TAXSCF): KIDSU18=0; MPRINT(TAXSCF): FILESTAT=1; 124 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): AGI=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC+UNEMPINC+CHSPALINC+OTHINC+PENINC+GSSINC; MPRINT(TAXSCF): IF AGI=-1 THEN AGI=0; MPRINT(TAXSCF): AGIGE50K=(AGI>=50000); MPRINT(TAXSCF): AGICL=1*(AGI < 50000)+2*(50000 <= AGI < 100000)+3*(AGI >= 100000); MPRINT(TAXSCF): RUN; NOTE: There were 5185 observations read from the data set WORK.NPEU. NOTE: The data set WORK.NPEU has 5185 observations and 5383 variables. NOTE: DATA statement used (Total process time): real time 0.12 seconds cpu time 0.12 seconds MPRINT(TAXSCF): * Add NPEU tax units; MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF NPEU; MPRINT(TAXSCF): RUN; NOTE: There were 34377 observations read from the data set WORK.SCF. NOTE: There were 5185 observations read from the data set WORK.NPEU. NOTE: The data set WORK.SCF has 39562 observations and 5383 variables. NOTE: DATA statement used (Total process time): real time 0.78 seconds cpu time 0.79 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): ************Itemized deductions; MPRINT(TAXSCF): IF ITEMDEDCT_FLAG=1 THEN DO; MPRINT(TAXSCF): ************Mortgage interest deduction; MPRINT(TAXSCF): * Convert real estate taxes on primary residence into a yearly amount; MPRINT(TAXSCF): RESTAXM1=0; MPRINT(TAXSCF): IF (X721 > 0) THEN DO; MPRINT(TAXSCF): RESTAXM1=X721 MPRINT(ACONV): *((X722=2)*52.18+(X722=3)*26.09+(X722=4)*12+(X722=5)*4+(X722=6)+(X722=8)+ (X722=11)*2+(X722=12)*6+(X722=31)*24+(X722=14)+(X722=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Create arrays for various mortgage loan components; MPRINT(TAXSCF): ARRAY TLMTH {*} TLMTHM1 TLMTHM2 TLMTHM3; MPRINT(TAXSCF): ARRAY CMOPAY {*} CMOPAYM1 CMOPAYM2 CMOPAYM3; MPRINT(TAXSCF): ARRAY PAYLFT {*} PAYLFTM1 PAYLFTM2 PAYLFTM3; MPRINT(TAXSCF): ARRAY AMTOWE {*} AMTOWEM1 AMTOWEM2 AMTOWEM3; MPRINT(TAXSCF): ARRAY AMTOWE_1 {*} AMTOWE_1M1 AMTOWE_1M2 AMTOWE_1M3; MPRINT(TAXSCF): ARRAY AINTDCT {*} AINTDCTM1 AINTDCTM2 AINTDCTM3; MPRINT(TAXSCF): ARRAY LNAGE {*} LNAGEM1 LNAGEM2 LNAGEM3; MPRINT(TAXSCF): ARRAY CURBAL {*} CURBALM1 CURBALM2 CURBALM3; MPRINT(TAXSCF): ARRAY CURBAL_1 {*} CURBAL_1M1 CURBAL_1M2 CURBAL_1M3; MPRINT(TAXSCF): ARRAY CINTDCT {*} CINTDCTM1 CINTDCTM2 CINTDCTM3; MPRINT(TAXSCF): ARRAY DCTDIFF {*} DCTDIFFM1 DCTDIFFM2 DCTDIFFM3; MPRINT(TAXSCF): ARRAY SINTDCT {*} SINTDCTM1 SINTDCTM2 SINTDCTM3; MPRINT(TAXSCF): ARRAY AVINTDCT {*} AVINTDCTM1 AVINTDCTM2 AVINTDCTM3; MPRINT(TAXSCF): ARRAY NMPMT {*} X807 X907 X1007; MPRINT(TAXSCF): ARRAY NMYR {*} X806 X906 X1006; MPRINT(TAXSCF): ARRAY REGPAYF {*} X809 X909 X1009; MPRINT(TAXSCF): ARRAY REGPAY {*} X808 X908 X1008; MPRINT(TAXSCF): ARRAY TYPAYF {*} X814 X914 X1014; 125 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ARRAY TYPAY {*} X813 X913 X1013; MPRINT(TAXSCF): ARRAY LNSTMN {*} X801 X901 X1001; MPRINT(TAXSCF): ARRAY LNSTYR {*} X802 X902 X1002; MPRINT(TAXSCF): ARRAY HBALLN {*} X811 X911 X1011; MPRINT(TAXSCF): ARRAY BALLN {*} X812 X912 X1012; MPRINT(TAXSCF): ARRAY HAVELN {*} X723 X830 X931; MPRINT(TAXSCF): ARRAY AMTBORR {*} X804 X904 X1004; MPRINT(TAXSCF): ARRAY JAMTBORR {*} J804 J904 J1004; MPRINT(TAXSCF): ARRAY AMTOUT {*} X805 X905 X1005; MPRINT(TAXSCF): ARRAY JAMTOUT {*} J805 J905 J1005; MPRINT(TAXSCF): ARRAY INTRATE {*} X816 X916 X1016; MPRINT(TAXSCF): ARRAY ONSCHED {*} X7571 X7570 X7569; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTH); MPRINT(TAXSCF): TLMTH{I}=0; MPRINT(TAXSCF): CMOPAY{I}=0; MPRINT(TAXSCF): PAYLFT{I}=0; MPRINT(TAXSCF): AMTOWE{I}=0; MPRINT(TAXSCF): AMTOWE_1{I}=0; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): LNAGE{I}=0; MPRINT(TAXSCF): CURBAL{I}=0; MPRINT(TAXSCF): CURBAL_1{I}=0; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): DCTDIFF{I}=0; MPRINT(TAXSCF): SINTDCT{I}=0; MPRINT(TAXSCF): AVINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): NUMORT=(X723=1)+(X830=1)+(X931=1); MPRINT(TAXSCF): TOTAMTOUTM=0; MPRINT(TAXSCF): TOTDEDCTM=0; MPRINT(TAXSCF): GRFAMTOUTM=0; MPRINT(TAXSCF): A17AMTOUTM=0; MPRINT(TAXSCF): HAAMTOUTM=0; MPRINT(TAXSCF): DO I=1 TO DIM(NMPMT); MPRINT(TERMCON): IF (NMYR{I}=0 & NMPMT{I}=0) THEN DO; MPRINT(TERMCON): TLMTH{I}=0; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYR{I}^=0|NMPMT{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYR{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYR{I}=-1) THEN DO; MPRINT(TERMCON): TLMTH{I}=NMYR{I}; MPRINT(TERMCON): IF (NMPMT{I}=0) THEN DO; MPRINT(TERMCON): NMPMT{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYR{I}>0) THEN DO; MPRINT(TERMCON): TLMTH{I}=NMYR{I}*12; MPRINT(TERMCON): IF (NMPMT{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYF{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMT{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYF{I}=-7) THEN DO; MPRINT(TERMCON): NMPMT{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYF{I}=8) THEN DO; MPRINT(TERMCON): NMPMT{I}=1; MPRINT(TERMCON): END; 126 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TERMCON): ELSE IF (REGPAYF{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYF{I}=1) THEN NMPMT{I}=TLMTH{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=2) THEN NMPMT{I}=TLMTH{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=3) THEN NMPMT{I}=TLMTH{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=4) THEN NMPMT{I}=TLMTH{I}; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=5) THEN NMPMT{I}=TLMTH{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=6) THEN NMPMT{I}=TLMTH{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=20) THEN NMPMT{I}=TLMTH{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=21) THEN NMPMT{I}=TLMTH{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=11) THEN NMPMT{I}=TLMTH{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=12) THEN NMPMT{I}=TLMTH{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=23) THEN NMPMT{I}=TLMTH{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=24) THEN NMPMT{I}=TLMTH{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=25) THEN NMPMT{I}=TLMTH{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=31) THEN NMPMT{I}=TLMTH{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=18) THEN NMPMT{I}=TLMTH{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=0) THEN NMPMT{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYF{I}>.Z & REGPAYF{I}^=-1 & REGPAYF{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMT{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTH{I}= REGPAYF{I}= NMPMT{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTH{I}>.Z & TLMTH{I}<-2) THEN DO; MPRINT(MOCONV): NMPMT{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTH{I}= REGPAYF{I}= NMPMT{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTH{I}<=.Z) THEN NMPMT{I}=TLMTH{I}; MPRINT(MOCONV): ELSE IF (TLMTH{I}^=-1 & TLMTH{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYF{I}= TLMTH{I}= "SETTING AMT=."; MPRINT(MOCONV): NMPMT{I}=.; MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMT{I}=-1) THEN DO; MPRINT(TERMCON): TLMTH{I}=-1; MPRINT(TERMCON): IF (NMYR{I}=0) THEN DO; MPRINT(TERMCON): NMYR{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMT{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYF{I}; MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYF{I}>0) THEN PFREQ=TYPAYF{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTH{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; MPRINT(TERMCON): TLMTH{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): IF (NMPMT{I}>0) THEN DO; MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTH{I}=NMPMT{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}))); MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12))); 127 The SAS System 13:32 Friday, January 29, 2021 MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTH{I}=NMPMT{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTH{I}=NMPMT{I}*2/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTH{I}=NMPMT{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTH{I}=NMPMT{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTH{I}=NMPMT{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTH{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): TLMTH{I}=NMPMT{I}; MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMT{I}= PFREQ= TLMTH{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMT{I}>.Z & NMPMT{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTH{I}=NMPMT{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMT{I}= PFREQ= TLMTH{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMT{I}=0) THEN TLMTH{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMT{I}<=.Z) THEN TLMTH{I}=NMPMT{I}; MPRINT(IMOCONV): ELSE IF (NMPMT{I}^=-1 & NMPMT{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMT{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTH{I}=.; MPRINT(IMOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTH{I}>0) THEN DO; MPRINT(TERMCON): NMYR{I}=MAX(1,INT(.5+(TLMTH{I}/12))); MPRINT(TERMCON): TLMTH{I}=MAX(1,ROUND(TLMTH{I})); MPRINT(TERMCON): END; MPRINT(TERMCON): IF (NMYR{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMT{I}= NMYR{I}= TLMTH{I}= REGPAYF{I}= REGPAY{I}= TYPAYF{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAY{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYF{I}=1) THEN CMOPAY{I}=REGPAY{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=2) THEN CMOPAY{I}=REGPAY{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=3) THEN CMOPAY{I}=REGPAY{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=4) THEN CMOPAY{I}=REGPAY{I}; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=5) THEN CMOPAY{I}=REGPAY{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=6) THEN CMOPAY{I}=REGPAY{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=20) THEN CMOPAY{I}=REGPAY{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=21) THEN CMOPAY{I}=REGPAY{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=8) THEN CMOPAY{I}=REGPAY{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=11) THEN CMOPAY{I}=REGPAY{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=12) THEN CMOPAY{I}=REGPAY{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=23) THEN CMOPAY{I}=REGPAY{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=24) THEN CMOPAY{I}=REGPAY{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=25) THEN CMOPAY{I}=REGPAY{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=31) THEN CMOPAY{I}=REGPAY{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=18) THEN CMOPAY{I}=REGPAY{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=0) THEN CMOPAY{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYF{I}>.Z & REGPAYF{I}^=-1 & REGPAYF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAY{I}= REGPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAY{I}>.Z & REGPAY{I}<-2) THEN DO; 128 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAY{I}= REGPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAY{I}<=.Z) THEN CMOPAY{I}=REGPAY{I}; MPRINT(MOCONV): ELSE IF (REGPAY{I}^=-1 & REGPAY{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYF{I}= REGPAY{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(MOCONV): IF (TYPAYF{I}=1) THEN CMOPAY{I}=TYPAY{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=2) THEN CMOPAY{I}=TYPAY{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=3) THEN CMOPAY{I}=TYPAY{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=4) THEN CMOPAY{I}=TYPAY{I}; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=5) THEN CMOPAY{I}=TYPAY{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=6) THEN CMOPAY{I}=TYPAY{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=20) THEN CMOPAY{I}=TYPAY{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=21) THEN CMOPAY{I}=TYPAY{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=8) THEN CMOPAY{I}=TYPAY{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=11) THEN CMOPAY{I}=TYPAY{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=12) THEN CMOPAY{I}=TYPAY{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=23) THEN CMOPAY{I}=TYPAY{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=24) THEN CMOPAY{I}=TYPAY{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=25) THEN CMOPAY{I}=TYPAY{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=31) THEN CMOPAY{I}=TYPAY{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=18) THEN CMOPAY{I}=TYPAY{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=0) THEN CMOPAY{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYF{I}>.Z & TYPAYF{I}^=-1 & TYPAYF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAY{I}= TYPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAY{I}>.Z & TYPAY{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAY{I}= TYPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAY{I}<=.Z) THEN CMOPAY{I}=TYPAY{I}; MPRINT(MOCONV): ELSE IF (TYPAY{I}^=-1 & TYPAY{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYF{I}= TYPAY{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF NMYR{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFT{I}=(TLMTH{I}-((2016-LNSTYR{I})*12)); MPRINT(TAXSCF): LNAGE{I}=TLMTH{I}-PAYLFT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFT{I}=0; MPRINT(TAXSCF): LNAGE{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): file "null.txt"; MPRINT(TAXSCF): * 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 129 The SAS System 13:32 Friday, January 29, 2021 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.; MPRINT(TAXSCF): IF ((X723=1) & (X810 IN(1 2 3)) & TLMTHM1 > 0 & X816 > 0) THEN DO; MPRINT(TAXSCF): IF (X811=1) THEN DO; MPRINT(MORTPAY): AMOPAYM1=ROUND((MORT((X804),.,((X816/10000)/12),(TLMTHM1))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (CMOPAYM1 > AMOPAYM1) THEN CMOPAYM1=AMOPAYM1; MPRINT(TAXSCF): 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= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X811=2) THEN DO; MPRINT(TAXSCF): IF (X804 > X812) THEN ADJBORR=X804-X812; MPRINT(TAXSCF): ELSE IF (X804 < X812) THEN ADJBORR=X804; MPRINT(TAXSCF): IF ADJBORR > 0 THEN MPRINT(MORTPAY): AMOPAYM1=ROUND((MORT((ADJBORR),.,((X816/10000)/12),(TLMTHM1))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (X804=X812) THEN AMOPAYM1=((X804)*(X816/10000))/12; MPRINT(TAXSCF): IF (CMOPAYM1 > AMOPAYM1) THEN CMOPAYM1=AMOPAYM1; MPRINT(TAXSCF): 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= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * 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); MPRINT(TAXSCF): * NOT INCLUDING LAND CONTRACTS; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELN); MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTDCT{I}=CMOPAY{I}*12; MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELN{I}=1 & HBALLN{I} IN(1 2) & NMYR{I} NOT IN(0 -1 -7) & INTRATE{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & PAYLFT{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAY{I} < AMTBORR{I}*.005) THEN CMOPAY{I}=MAX(REGPAY{I},TYPAY{I}); MPRINT(TAXSCF): 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})); MPRINT(TAXSCF): 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))); MPRINT(TAXSCF): IF LNSTYR{I}^=2016 THEN AINTDCT{I}=(CMOPAY{I}*12)-(AMTOWE_1{I}-AMTOWE{I}); MPRINT(TAXSCF): ELSE IF LNSTYR{I}=2016 THEN AINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTH{I} < 0 | CMOPAY{I} < 0 | PAYLFT{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWE{I}=0; MPRINT(TAXSCF): AMTOWE_1{I}=0; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & AMTBORR{I} > 0 & LNAGE{I} > 0) THEN DO; MPRINT(TAXSCF): 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); 130 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTDCT{I}=(CMOPAY{I}*12)-(CURBAL_1{I}-CURBAL{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTH{I} < 0 | AMTBORR{I} < 0 | LNAGE{I} < 0) THEN DO; MPRINT(TAXSCF): CURBAL{I}=0; MPRINT(TAXSCF): CURBAL_1{I}=0; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUT{I} > 0 & INTRATE{I} > 0) THEN SINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): ELSE SINTDCT{I}=0; MPRINT(TAXSCF): * 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 the home was not purchased in the survey year. If the home was purchased in the survey year, set deduction to zero.; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & PAYLFT{I}=0) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=CURBAL_1{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): AINTDCT{I}=CINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & LNSTYR{I}=2016 & X720=2016) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): SINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & LNSTYR{I}=2016) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTDCT{I} < 0 | CINTDCT{I} < 0) & CURBAL{I} > 0 & CURBAL_1{I} > 0) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=CURBAL_1{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): AINTDCT{I}=CINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTDCT{I} < 0 | CINTDCT{I} < 0) & (CURBAL{I} <= 0 & CURBAL_1{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCT{I} > 0 & CINTDCT{I} > 0) THEN DCTDIFF{I}=CINTDCT{I}-SINTDCT{I}; MPRINT(TAXSCF): ELSE DCTDIFF{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELN{I}=1 & (NMYR{I} IN(-1 -7) | NMPMT{I} IN(-1 -7)) & AMTOUT{I} > 0 & INTRATE{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELN{I}=1 & (INTRATE{I}=-1)) THEN DO; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): SINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest deduction; MPRINT(TAXSCF): IF ((CINTDCT{I} + AINTDCT{I} + SINTDCT{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTDCT{I}=(CINTDCT{I}+AINTDCT{I}+SINTDCT{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTDCT{I}=0; 131 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): * Constraining interest deduction amount to be no more than the reported year 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.; MPRINT(TAXSCF): IF (HAVELN{I}=1 & AVINTDCT{I} > 0 & CMOPAY{I} > 0 & (AVINTDCT{I} > CMOPAY{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTDCT{I}=CMOPAY{I}*12; MPRINT(TAXSCF): CINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): SINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELN{I}=1 & AVINTDCT{I} > 0 & AMTOUT{I} > 0 & (AVINTDCT{I} > .25*AMTOUT{I})) THEN DO; MPRINT(TAXSCF): AVINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): CINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELN{I}=1 & Y1=YY1*10+1 & AVINTDCT{I}=0 & NMYR{I}^=2016) 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}= /; MPRINT(TAXSCF): * 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; MPRINT(TAXSCF): IF (X702=1 & X714=1 & X7135=5) THEN DO; MPRINT(TAXSCF): TOTDEDCTM=TOTDEDCTM+(AVINTDCT{I}/X715)*(HAVELN{I}=1); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE TOTDEDCTM=TOTDEDCTM+AVINTDCT{I}; MPRINT(TAXSCF): * Total amount outstanding on loans; MPRINT(TAXSCF): TOTAMTOUTM=TOTAMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): * Need to divide mortgages up by date, pre 10/13/87 mortgages are considered grandfathered debt by IRS, and different limits apply to mortgages taken out after 12/15/2017; MPRINT(TAXSCF): IF ((LNSTYR{I}=1987 & LNSTMN{I} < 10) | (LNSTYR{I} < 1987)) THEN DO; MPRINT(TAXSCF): GRFAMTOUTM=GRFAMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((LNSTYR{I}=2017 & LNSTMN{I}=12) | (LNSTYR{I} > 2017)) THEN DO; MPRINT(TAXSCF): A17AMTOUTM=A17AMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((LNSTYR{I}=1987 & LNSTMN {I} >= 10) | (1987 < LNSTYR{I} < 2017) | (LNSTYR{I}=2017 & LNSTMN{I}<=11)) THEN DO; MPRINT(TAXSCF): HAAMTOUTM=HAAMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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, 3, or 4 as home acquisition debt (same as a mortgage, counts toward mortgage balance limit), while HELOCs with other use codes counted as home equity debt. Ignoring the mopup as we dont know if that LOC is secured by a home; MPRINT(TAXSCF): ARRAY CMOPAYL {*} CMOPAYL1 CMOPAYL2 CMOPAYL3; MPRINT(TAXSCF): ARRAY SINTDCTL {*} SINTDCTL1 SINTDCTL2 SINTDCTL3; MPRINT(TAXSCF): ARRAY AQDBT {*} AQDBTL1 AQDBTL2 AQDBTL3; MPRINT(TAXSCF): ARRAY AQINT {*} AQINTL1 AQINTL2 AQINTL3; MPRINT(TAXSCF): ARRAY EQDBT {*} EQDBTL1 EQDBTL2 EQDBTL3; MPRINT(TAXSCF): ARRAY SBYHOME {*} X1103 X1114 X1125; MPRINT(TAXSCF): ARRAY DOOWE {*} X1105 X1116 X1127; MPRINT(TAXSCF): ARRAY LNPURP {*} X1106 X1117 X1128; MPRINT(TAXSCF): ARRAY AMTOUTL {*} X1108 X1119 X1130; MPRINT(TAXSCF): ARRAY TYPAYL {*} X1109 X1120 X1131; MPRINT(TAXSCF): ARRAY TYPAYLF {*} X1110 X1121 X1132; MPRINT(TAXSCF): ARRAY INTRATEL {*} X1111 X1122 X1133; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): TOTAQDBTL=0; 132 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): TOTEQDBTL=0; MPRINT(TAXSCF): TOTDEDCTL=0; MPRINT(TAXSCF): TOTAQDEDCTL=0; MPRINT(TAXSCF): TOTLOCINVEX=0; MPRINT(TAXSCF): DO I=1 TO DIM(CMOPAYL); MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): AQDBT{I}=0; MPRINT(TAXSCF): AQINT{I}=0; MPRINT(TAXSCF): EQDBT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (X1101=1) THEN DO; MPRINT(TAXSCF): DO I=1 TO DIM(SBYHOME); MPRINT(TAXSCF): IF (SBYHOME{I}=1 & DOOWE{I}=1) THEN DO; MPRINT(TAXSCF): IF (TYPAYL{I} > 0) THEN DO; MPRINT(MOCONV): IF (TYPAYLF{I}=1) THEN CMOPAYL{I}=TYPAYL{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=2) THEN CMOPAYL{I}=TYPAYL{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=3) THEN CMOPAYL{I}=TYPAYL{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=4) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=5) THEN CMOPAYL{I}=TYPAYL{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=6) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=20) THEN CMOPAYL{I}=TYPAYL{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=21) THEN CMOPAYL{I}=TYPAYL{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=8) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=11) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=12) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=23) THEN CMOPAYL{I}=TYPAYL{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=24) THEN CMOPAYL{I}=TYPAYL{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=25) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=31) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=18) THEN CMOPAYL{I}=TYPAYL{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=0) THEN CMOPAYL{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}>.Z & TYPAYLF{I}^=-1 & TYPAYLF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}>.Z & TYPAYL{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}<=.Z) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYL{I}^=-1 & TYPAYL{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYLF{I}= TYPAYL{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TYPAYL{I} IN(0 -1 -2)) THEN DO; MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (INTRATEL{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=((INTRATEL{I}/10000)*AMTOUTL{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEL{I} IN(0 -1)) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTL{I} > 0 & CMOPAYL{I} > 0 & SINTDCTL{I} > CMOPAYL{I}*12) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=CMOPAYL{I}*12; 133 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (LNPURP{I} IN(1 3 4)) THEN DO; MPRINT(TAXSCF): AQDBT{I}=AMTOUTL{I}; MPRINT(TAXSCF): AQINT{I}=SINTDCTL{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (LNPURP{I} NOT IN(1 3 4)) THEN DO; MPRINT(TAXSCF): EQDBT{I}=AMTOUTL{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTDEDCTL=TOTDEDCTL+SINTDCTL{I}; MPRINT(TAXSCF): TOTAQDEDCTL=TOTAQDEDCTL+AQINT{I}; MPRINT(TAXSCF): TOTAQDBTL=TOTAQDBTL+AQDBT{I}; MPRINT(TAXSCF): TOTEQDBTL=TOTEQDBTL+EQDBT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * Dropped third column of grid for 2010 forward; MPRINT(TAXSCF): * Create arrays for various other property loan components; MPRINT(TAXSCF): ARRAY TLMTHO {*} TLMTHO1 TLMTHO2; MPRINT(TAXSCF): ARRAY CMOPAYO {*} CMOPAYO1 CMOPAYO2; MPRINT(TAXSCF): ARRAY AMOPAYO {*} AMOPAYO1 AMOPAYO2; MPRINT(TAXSCF): ARRAY PAYLFTO {*} PAYLFTO1 PAYLFTO2; MPRINT(TAXSCF): ARRAY AMTOWEO {*} AMTOWEO1 AMTOWEO2; MPRINT(TAXSCF): ARRAY AMTOWE_1O {*} AMTOWE_1O1 AMTOWE_1O2; MPRINT(TAXSCF): ARRAY AINTDCTO {*} AINTDCTO1 AINTDCTO2; MPRINT(TAXSCF): ARRAY LNAGEO {*} LNAGEO1 LNAGEO2; MPRINT(TAXSCF): ARRAY CURBALO {*} CURBALO1 CURBALO2; MPRINT(TAXSCF): ARRAY CURBAL_1O {*} CURBAL_1O1 CURBAL_1O2; MPRINT(TAXSCF): ARRAY CINTDCTO {*} CINTDCTO1 CINTDCTO2; MPRINT(TAXSCF): ARRAY DCTDIFFO {*} DCTDIFFO1 DCTDIFFO2; MPRINT(TAXSCF): ARRAY SINTDCTO {*} SINTDCTO1 SINTDCTO2; MPRINT(TAXSCF): ARRAY AVINTDCTO {*} AVINTDCTO1 AVINTDCTO2; MPRINT(TAXSCF): ARRAY QUALPROP {*} QPROP1 QPROP2; MPRINT(TAXSCF): ARRAY QUALPINV {*} QPINV1 QPINV2; MPRINT(TAXSCF): ARRAY ADJBORRO {*} ADJBORRO1 ADJBORRO2; MPRINT(TAXSCF): ARRAY NMPMTO {*} X1717 X1817; MPRINT(TAXSCF): ARRAY NMYRO {*} X1716 X1816; MPRINT(TAXSCF): ARRAY REGPAYFO {*} X1719 X1819; MPRINT(TAXSCF): ARRAY REGPAYO {*} X1718 X1818; MPRINT(TAXSCF): ARRAY TYPAYFO {*} X1724 X1824; MPRINT(TAXSCF): ARRAY TYPAYO {*} X1723 X1823; MPRINT(TAXSCF): ARRAY LNSTMNO {*} X1712 X1812; MPRINT(TAXSCF): ARRAY LNSTYRO {*} X1713 X1813; MPRINT(TAXSCF): ARRAY HBALLNO {*} X1721 X1821; MPRINT(TAXSCF): ARRAY BALLNO {*} X1722 X1822; MPRINT(TAXSCF): ARRAY AMTBORRO {*} X1714 X1814; MPRINT(TAXSCF): ARRAY JAMTBORRO {*} J1714 J1814; MPRINT(TAXSCF): ARRAY AMTOUTO {*} X1715 X1815; MPRINT(TAXSCF): ARRAY JAMTOUTO {*} J1715 J1815; MPRINT(TAXSCF): ARRAY HAVELNO {*} X1711 X1811; MPRINT(TAXSCF): ARRAY INTRATEO {*} X1726 X1826; MPRINT(TAXSCF): ARRAY ONSCHEDO {*} X7554 X7553; MPRINT(TAXSCF): ARRAY HINCOMEO {*} X1729 X1829; MPRINT(TAXSCF): ARRAY INCOMEO {*} X1730 X1830; MPRINT(TAXSCF): ARRAY PROPTYPE {*} X1703 X1803; MPRINT(TAXSCF): ARRAY PERPROP {*} X1705 X1805; MPRINT(TAXSCF): ARRAY PROPVAL {*} X1706 X1806; 134 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ARRAY TAXINS {*} X1720 X1820; MPRINT(TAXSCF): ARRAY PURCHYRO {*} X1708 X1808; MPRINT(TAXSCF): ARRAY LIMFLAG {*} LIMFL1 LIMFL2; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTHO); MPRINT(TAXSCF): TLMTHO{I}=0; MPRINT(TAXSCF): CMOPAYO{I}=0; MPRINT(TAXSCF): PAYLFTO{I}=0; MPRINT(TAXSCF): AMTOWEO{I}=0; MPRINT(TAXSCF): AMTOWE_1O{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): LNAGEO{I}=0; MPRINT(TAXSCF): CURBALO{I}=0; MPRINT(TAXSCF): CURBAL_1O{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): DCTDIFFO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): AVINTDCTO{I}=0; MPRINT(TAXSCF): QUALPROP{I}=0; MPRINT(TAXSCF): QUALPINV{I}=0; MPRINT(TAXSCF): ADJBORRO{I}=0; MPRINT(TAXSCF): LIMFLAG{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTAMTOUTO=0; MPRINT(TAXSCF): TOTDEDCTO=0; MPRINT(TAXSCF): QUALOTHPROP=0; MPRINT(TAXSCF): QUALINVPROP=0; MPRINT(TAXSCF): TOTINVPDCT=0; MPRINT(TAXSCF): FMVOP=0; MPRINT(TAXSCF): DO I=1 TO DIM(NMPMTO); MPRINT(TERMCON): IF (NMYRO{I}=0 & NMPMTO{I}=0) THEN DO; MPRINT(TERMCON): TLMTHO{I}=0; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRO{I}^=0|NMPMTO{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRO{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRO{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHO{I}=NMYRO{I}; MPRINT(TERMCON): IF (NMPMTO{I}=0) THEN DO; MPRINT(TERMCON): NMPMTO{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRO{I}>0) THEN DO; MPRINT(TERMCON): TLMTHO{I}=NMYRO{I}*12; MPRINT(TERMCON): IF (NMPMTO{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYFO{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMTO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFO{I}=-7) THEN DO; MPRINT(TERMCON): NMPMTO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFO{I}=8) THEN DO; MPRINT(TERMCON): NMPMTO{I}=1; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFO{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYFO{I}=1) THEN NMPMTO{I}=TLMTHO{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=2) THEN NMPMTO{I}=TLMTHO{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=3) THEN NMPMTO{I}=TLMTHO{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=4) THEN NMPMTO{I}=TLMTHO{I}; 135 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=5) THEN NMPMTO{I}=TLMTHO{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=6) THEN NMPMTO{I}=TLMTHO{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=20) THEN NMPMTO{I}=TLMTHO{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=21) THEN NMPMTO{I}=TLMTHO{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=11) THEN NMPMTO{I}=TLMTHO{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=12) THEN NMPMTO{I}=TLMTHO{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=23) THEN NMPMTO{I}=TLMTHO{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=24) THEN NMPMTO{I}=TLMTHO{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=25) THEN NMPMTO{I}=TLMTHO{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=31) THEN NMPMTO{I}=TLMTHO{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=18) THEN NMPMTO{I}=TLMTHO{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=0) THEN NMPMTO{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}>.Z & REGPAYFO{I}^=-1 & REGPAYFO{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMTO{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTHO{I}= REGPAYFO{I}= NMPMTO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHO{I}>.Z & TLMTHO{I}<-2) THEN DO; MPRINT(MOCONV): NMPMTO{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTHO{I}= REGPAYFO{I}= NMPMTO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHO{I}<=.Z) THEN NMPMTO{I}=TLMTHO{I}; MPRINT(MOCONV): ELSE IF (TLMTHO{I}^=-1 & TLMTHO{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFO{I}= TLMTHO{I}= "SETTING AMT=."; MPRINT(MOCONV): NMPMTO{I}=.; MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTO{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHO{I}=-1; MPRINT(TERMCON): IF (NMYRO{I}=0) THEN DO; MPRINT(TERMCON): NMYRO{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTO{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYFO{I}; MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYFO{I}>0) THEN PFREQ=TYPAYFO{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTHO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; MPRINT(TERMCON): TLMTHO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): IF (NMPMTO{I}>0) THEN DO; MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTHO{I}=NMPMTO{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}))); MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12))); MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTHO{I}=NMPMTO{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTHO{I}=NMPMTO{I}*2/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTHO{I}=NMPMTO{I}/(2*(52/52)); 136 The SAS System 13:32 Friday, January 29, 2021 MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTHO{I}=NMPMTO{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTHO{I}=NMPMTO{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTHO{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): TLMTHO{I}=NMPMTO{I}; MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMTO{I}= PFREQ= TLMTHO{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}>.Z & NMPMTO{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTHO{I}=NMPMTO{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMTO{I}= PFREQ= TLMTHO{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}=0) THEN TLMTHO{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}<=.Z) THEN TLMTHO{I}=NMPMTO{I}; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}^=-1 & NMPMTO{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMTO{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTHO{I}=.; MPRINT(IMOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTHO{I}>0) THEN DO; MPRINT(TERMCON): NMYRO{I}=MAX(1,INT(.5+(TLMTHO{I}/12))); MPRINT(TERMCON): TLMTHO{I}=MAX(1,ROUND(TLMTHO{I})); MPRINT(TERMCON): END; MPRINT(TERMCON): IF (NMYRO{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMTO{I}= NMYRO{I}= TLMTHO{I}= REGPAYFO{I}= REGPAYO{I}= TYPAYFO{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAYO{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYFO{I}=1) THEN CMOPAYO{I}=REGPAYO{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=2) THEN CMOPAYO{I}=REGPAYO{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=3) THEN CMOPAYO{I}=REGPAYO{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=4) THEN CMOPAYO{I}=REGPAYO{I}; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=5) THEN CMOPAYO{I}=REGPAYO{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=6) THEN CMOPAYO{I}=REGPAYO{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=20) THEN CMOPAYO{I}=REGPAYO{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=21) THEN CMOPAYO{I}=REGPAYO{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=8) THEN CMOPAYO{I}=REGPAYO{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=11) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=12) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=23) THEN CMOPAYO{I}=REGPAYO{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=24) THEN CMOPAYO{I}=REGPAYO{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=25) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=31) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=18) THEN CMOPAYO{I}=REGPAYO{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=0) THEN CMOPAYO{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}>.Z & REGPAYFO{I}^=-1 & REGPAYFO{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAYO{I}= REGPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYO{I}>.Z & REGPAYO{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAYO{I}= REGPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYO{I}<=.Z) THEN CMOPAYO{I}=REGPAYO{I}; 137 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (REGPAYO{I}^=-1 & REGPAYO{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFO{I}= REGPAYO{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(MOCONV): IF (TYPAYFO{I}=1) THEN CMOPAYO{I}=TYPAYO{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=2) THEN CMOPAYO{I}=TYPAYO{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=3) THEN CMOPAYO{I}=TYPAYO{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=4) THEN CMOPAYO{I}=TYPAYO{I}; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=5) THEN CMOPAYO{I}=TYPAYO{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=6) THEN CMOPAYO{I}=TYPAYO{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=20) THEN CMOPAYO{I}=TYPAYO{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=21) THEN CMOPAYO{I}=TYPAYO{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=8) THEN CMOPAYO{I}=TYPAYO{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=11) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=12) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=23) THEN CMOPAYO{I}=TYPAYO{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=24) THEN CMOPAYO{I}=TYPAYO{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=25) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=31) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=18) THEN CMOPAYO{I}=TYPAYO{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=0) THEN CMOPAYO{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}>.Z & TYPAYFO{I}^=-1 & TYPAYFO{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYO{I}= TYPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYO{I}>.Z & TYPAYO{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYO{I}= TYPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYO{I}<=.Z) THEN CMOPAYO{I}=TYPAYO{I}; MPRINT(MOCONV): ELSE IF (TYPAYO{I}^=-1 & TYPAYO{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYFO{I}= TYPAYO{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF NMYRO{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFTO{I}=(TLMTHO{I}-((2016-LNSTYRO{I})*12)); MPRINT(TAXSCF): LNAGEO{I}=TLMTHO{I}-PAYLFTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFTO{I}=0; MPRINT(TAXSCF): LNAGEO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNO); MPRINT(TAXSCF): IF ((HAVELNO{I}=1) & (TAXINS{I} IN(1 2 3)) & TLMTHO{I} > 0 & INTRATEO{I} > 0) THEN DO; 138 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): IF (HBALLNO{I}=1) THEN DO; MPRINT(MORTPAY): AMOPAYO{I}=ROUND((MORT((AMTBORRO{I}),.,((INTRATEO{I}/10000)/12),(TLMTHO{I}))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (CMOPAYO{I} > AMOPAYO{I}) THEN CMOPAYO{I}=AMOPAYO{I}; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HBALLNO{I}=5) THEN DO; MPRINT(TAXSCF): IF (AMTBORRO{I} > BALLNO{I}) THEN ADJBORRO{I}=(AMTBORRO{I}-BALLNO{I}); MPRINT(TAXSCF): ELSE IF (AMTBORRO{I} < BALLNO{I}) THEN ADJBORRO{I}=AMTBORRO{I}; MPRINT(TAXSCF): IF ADJBORRO{I} > 0 THEN MPRINT(MORTPAY): AMOPAYO{I}=ROUND((MORT((ADJBORRO{I}),.,((INTRATEO{I}/10000)/12),(TLMTHO{I}))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (AMTBORRO{I}=BALLNO{I}) THEN AMOPAYO{I}=((AMTBORRO{I})*(INTRATEO{I}/10000))/12; MPRINT(TAXSCF): IF (CMOPAYO{I} > AMOPAYO{I}) THEN CMOPAYO{I}=AMOPAYO{I}; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * 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); MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNO); MPRINT(TAXSCF): IF (PROPTYPE{I} IN(12 13 14 21 22 25 40 49 999) & (HINCOMEO{I}=5 | INCOMEO{I}=-1)) | (PROPTYPE{I} IN(12 13 14 21 22 25 40 49 999) & HINCOMEO{I}=1 & INCOMEO{I} < (CMOPAYO{I}*12)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified properties; MPRINT(TAXSCF): QUALPROP{I}=(HAVELNO{I}=1); MPRINT(TAXSCF): QUALOTHPROP=QUALOTHPROP+QUALPROP{I}; MPRINT(TAXSCF): FMVOP=FMVOP+PROPVAL{I}*(HAVELNO{I}=1); MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & HBALLNO{I} IN(1 5) & NMYRO{I} NOT IN(0 -1 -7) & INTRATEO{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAYO{I} < AMTBORRO{I}*.005) THEN CMOPAYO{I}=MAX(REGPAYO{I},TYPAYO{I}); MPRINT(TAXSCF): 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})); MPRINT(TAXSCF): 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))); MPRINT(TAXSCF): IF LNSTYRO{I}^=2016 THEN AINTDCTO{I}=(CMOPAYO{I}*12)-(AMTOWE_1O{I}-AMTOWEO{I}); MPRINT(TAXSCF): ELSE IF LNSTYRO{I}=2016 THEN AINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | CMOPAYO{I} < 0 | PAYLFTO{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEO{I}=0; MPRINT(TAXSCF): AMTOWE_1O{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): END; 139 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & AMTBORRO{I} > 0 & LNAGEO{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTDCTO{I}=(CMOPAYO{I}*12)-(CURBAL_1O{I}-CURBALO{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | AMTBORRO{I} < 0 | LNAGEO{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALO{I}=0; MPRINT(TAXSCF): CURBAL_1O{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): ELSE SINTDCTO{I}=0; MPRINT(TAXSCF): * 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 the home was not purchased in the survey year. If the home was purchased in the survey year, set deduction to zero.; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I}=0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=2016 & PURCHYRO{I}=2016) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=2016) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & CURBALO{I} > 0 & CURBAL_1O{I} > 0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & (CURBALO{I} <= 0 & CURBAL_1O{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTO{I} > 0 & CINTDCTO{I} > 0) THEN DCTDIFFO{I}=CINTDCTO{I}-SINTDCTO{I}; MPRINT(TAXSCF): ELSE DCTDIFFO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (NMYRO{I} IN(-1 -7) & NMPMTO{I} IN(-1 -7)) & AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (INTRATEO{I}=-1)) THEN DO; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest deduction; MPRINT(TAXSCF): IF ((CINTDCTO{I} + AINTDCTO{I} + SINTDCTO{I}) > 0) THEN DO; 140 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): AVINTDCTO{I}=(CINTDCTO{I}+AINTDCTO{I}+SINTDCTO{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTDCTO{I}=0; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & CMOPAYO{I} > 0 & (AVINTDCTO{I} > CMOPAYO{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): SINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & AMTOUTO{I} > 0 & (AVINTDCTO{I} > .25*AMTOUTO{I})) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): * Compute total deduction and total amount outstanding; MPRINT(TAXSCF): TOTDEDCTO=TOTDEDCTO+((AVINTDCTO{I})*PERPROP{I}/10000)*(HAVELNO{I}=1); MPRINT(TAXSCF): TOTAMTOUTO=TOTAMTOUTO+AMTOUTO{I}; MPRINT(TAXSCF): * Create flag for loans after 12/15/17, used in computing limits on mortgage interest deduction for home acquistion debt; MPRINT(TAXSCF): LIMFLAG{I}=(LNSTYRO{I}> 2017 | (LNSTYRO{I}=2017 & LNSTMNO{I}=12)); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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 hhs are rational and report the home/properties with the biggest deductions.; MPRINT(TAXSCF): ADJDEDCTO=0; MPRINT(TAXSCF): ADJAMTOUTO=0; MPRINT(TAXSCF): ADJ17AMTOUTO=0; MPRINT(TAXSCF): FMVOTHPROP=0; MPRINT(TAXSCF): IF (QUALOTHPROP > 0) THEN DO; MPRINT(TAXSCF): IF (QUALOTHPROP=1 & QPROP1=1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=1 & QPROP2=1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=2) THEN DO; MPRINT(TAXSCF): IF (AVINTDCTO1 >= AVINTDCTO2) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; 141 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE IF (AVINTDCTO2 >= AVINTDCTO1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (X701=-7 & X7133=1) THEN DO; MPRINT(TAXSCF): HOUSE=(X7134/10000)*X716; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE HOUSE=SUM(0,X604,X614,X623,X716,(X513+X526)); MPRINT(TAXSCF): IF (TOTEQDBTL > 0 & GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL+TOTEQDBTL > (HOUSE)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) > 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=MIN((HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL)),TOTEQDBTL,100000); MPRINT(TAXSCF): ADJDEDCTL=TOTDEDCTL*(ADJEQDBTL/TOTEQDBTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) <= 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=0; MPRINT(TAXSCF): ADJDEDCTL=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((FILESTAT=3) & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) > 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=MIN((HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL)),TOTEQDBTL,50000); MPRINT(TAXSCF): ADJDEDCTL=TOTDEDCTL*(ADJEQDBTL/TOTEQDBTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((FILESTAT=3) & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) <= 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=0; MPRINT(TAXSCF): ADJDEDCTL=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TOTEQDBTL ^=. & TOTDEDCTL ^=.) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=TOTEQDBTL; MPRINT(TAXSCF): ADJDEDCTL=TOTDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TOTEQDBTL > 0 & GRFAMTOUTM+A17AMTOUTM+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= /; MPRINT(TAXSCF): * 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), worksheet changed in 2018; MPRINT(TAXSCF): ADJDEDCT=0; MPRINT(TAXSCF): * case 1 - grandfathered debt, no home acquisition debt, maybe home equity; MPRINT(TAXSCF): IF (GRFAMTOUTM > 0 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & ADJEQDBTL <= 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & ADJEQDBTL > 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+100000)/(GRFAMTOUTM+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & ADJEQDBTL <= 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTL; 142 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & ADJEQDBTL > 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+50000)/(GRFAMTOUTM+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * case 2 - some grandfathered debt, some home acquisition debt, maybe home equity; MPRINT(TAXSCF): ELSE IF (GRFAMTOUTM > 0 & (HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & (ADJEQDBTL=0 | ADJEQDBTL <= 100000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & ADJEQDBTL > 100000 & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+100000) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (ADJEQDBTL <= 100000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+ADJEQDBTL),(1000000+ADJEQDBTL))) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (ADJEQDBTL > 100000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+100000),1100000))/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (ADJEQDBTL=0 | ADJEQDBTL <= 50000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & ADJEQDBTL > 50000 & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+50000) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (ADJEQDBTL=0 | ADJEQDBTL <= 50000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+ADJEQDBTL),(500000+ADJEQDBTL))) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (ADJEQDBTL=0 | ADJEQDBTL > 50000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+50000),550000))/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * case 3 - no grandfathered debt, maybe home acquisition, maybe home equity; MPRINT(TAXSCF): ELSE IF (GRFAMTOUTM=0 & (HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | ADJEQDBTL > 0)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 0 & ADJEQDBTL <= 100000) 143 The SAS System 13:32 Friday, January 29, 2021 THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((100000)/ADJEQDBTL)*ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL <= 1000000) & ADJEQDBTL <= 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL <= 1000000) & ADJEQDBTL > 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+100000)/ (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL > 1000000) & (ADJEQDBTL <= 100000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((1000000+ADJEQDBTL)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL > 1000000) & (ADJEQDBTL > 100000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((1100000)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 0 & ADJEQDBTL <= 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((50000)/ADJEQDBTL)*ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000) & ADJEQDBTL <= 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000) & ADJEQDBTL > 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+50000)/ (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000) & (ADJEQDBTL <= 50000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((500000+ADJEQDBTL)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000) & (ADJEQDBTL > 50000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((550000)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * a few obs will come out here, but they either have -1 as the interest rate or are land contracts; MPRINT(TAXSCF): IF ((GRFAMTOUTM > 0 | HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | (ADJEQDBTL*(2016 LE 2016)) > 0 | A17AMTOUTM > 0 & ADJ17AMTOUTO > 0) & ADJDEDCT=0 & X5744 IN(1 5 6) & Y1=YY1*10+1 & X720^=2016) THEN PUT "MORTGAGE DEDUCTION SHOULD NOT BE ZERO " Y1= X5744= X5746= GRFAMTOUTM= HAAMTOUTM= ADJAMTOUTO= TOTAQDBTL= ADJEQDBTL= A17AMTOUTM= 144 The SAS System 13:32 Friday, January 29, 2021 ADJ17AMTOUTO= TOTDEDCTM= ADJDEDCTO= ADJDEDCTL= OVERLIM= QUALOTHPROP= CINTDCTM1= CINTDCTM2= CINTDCTM3= CINTDCTO1= CINTDCTO2= X702= X714= X7135= X723=/; MPRINT(TAXSCF): IF ((GRFAMTOUTM > 0 | HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | ADJEQDBTL > 0 | A17AMTOUTM > 0 & ADJ17AMTOUTO > 0) & OVERLIM=. & Y1=YY1*10+1) THEN PUT "OVER LIMIT INDICATOR MISSING " Y1= X5744= X5746= GRFAMTOUTM= HAAMTOUTM= ADJAMTOUTO= TOTAQDBTL= ADJEQDBTL= A17AMTOUTM= ADJ17AMTOUTO= TOTDEDCTM= ADJDEDCTO= ADJDEDCTL= OVERLIM= ADJDEDCT=/; MPRINT(TAXSCF): IF ADJDEDCT >= 100000 & Y1=YY1*10+1 THEN PUT "HUGE MORTGAGE INTEREST DEDUCTION " Y1= TOTDEDCTM= GRFAMTOUTM= HAAMTOUTM= TOTAQDBTL= ADJDEDCTL= ADJEQDBTL= ADJDEDCTO= ADJAMTOUTO= A17AMTOUTM= ADJ17AMTOUTO= HOUSE= QUALOTHPROP= FMVOTHPROP= X5744= X5746= ADJDEDCT= /; MPRINT(TAXSCF): ************Real estate taxes; MPRINT(TAXSCF): * TAXSIM doesnt want local property taxes in amount of itemized deductions, listed as a separate variable; MPRINT(TAXSCF): * 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; MPRINT(TAXSCF): PROPTXRATE=0; MPRINT(TAXSCF): IF (HOUSE > 0 & RESTAXM1 > 0) THEN PROPTXRATE=(RESTAXM1/HOUSE)*100; MPRINT(TAXSCF): IF (PROPTXRATE > 10 & Y1=YY1*10+1) THEN PUT "HIGH PROPERTY TAX RATE " Y1= HOUSE= RESTAXM1= X721= J721= X722= J722= X501= X601= X701= PROPTXRATE=/; MPRINT(TAXSCF): IF (PROPTXRATE > 10 & X722=4) THEN RESTAXM1=X721; MPRINT(TAXSCF): ************Investment interest expense; MPRINT(TAXSCF): * 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 need to add up dividend/interest income. Capital gains 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.; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * LOCs - only counting loans not secured by the residence and with asset or real estate investment as loan purpose.; MPRINT(TAXSCF): IF (X1101=1) THEN DO; MPRINT(TAXSCF): DO I=1 TO DIM(SBYHOME); MPRINT(TAXSCF): IF (SBYHOME{I}=5 & DOOWE{I}=1 & LNPURP{I} IN(76 78 79)) THEN DO; MPRINT(TAXSCF): IF (TYPAYL{I} > 0) THEN DO; MPRINT(MOCONV): IF (TYPAYLF{I}=1) THEN CMOPAYL{I}=TYPAYL{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=2) THEN CMOPAYL{I}=TYPAYL{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=3) THEN CMOPAYL{I}=TYPAYL{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=4) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=5) THEN CMOPAYL{I}=TYPAYL{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=6) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=20) THEN CMOPAYL{I}=TYPAYL{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=21) THEN CMOPAYL{I}=TYPAYL{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=8) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=11) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=12) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=23) THEN CMOPAYL{I}=TYPAYL{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=24) THEN CMOPAYL{I}=TYPAYL{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=25) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=31) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=18) THEN CMOPAYL{I}=TYPAYL{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=0) THEN CMOPAYL{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}>.Z & TYPAYLF{I}^=-1 & TYPAYLF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}>.Z & TYPAYL{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; 145 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (TYPAYL{I}<=.Z) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYL{I}^=-1 & TYPAYL{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYLF{I}= TYPAYL{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TYPAYL{I} IN(0 -1 -2)) THEN DO; MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (INTRATEL{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=((INTRATEL{I}/10000)*AMTOUTL{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEL{I} IN(0 -1)) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTL{I} > 0 & CMOPAYL{I} > 0 & SINTDCTL{I} > CMOPAYL{I}*12) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=CMOPAYL{I}*12; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTLOCINVEX=TOTLOCINVEX+SINTDCTL{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Other properties - only counting properties held for investment purposes, and hh must receive income from the property.; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNO); MPRINT(TAXSCF): IF (PROPTYPE{I} IN(41 42 43 44 45 46 47 48) & (INCOMEO{I} > 0)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified properties; MPRINT(TAXSCF): QUALPINV{I}=(HAVELNO{I}=1); MPRINT(TAXSCF): QUALINVPROP=QUALINVPROP+QUALPINV{I}; MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & HBALLNO{I} IN(1 5) & NMYRO{I} NOT IN(0 -1 -7) & INTRATEO{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAYO{I} < AMTBORRO{I}*.005) THEN CMOPAYO{I}=MAX(REGPAYO{I},TYPAYO{I}); MPRINT(TAXSCF): 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})); MPRINT(TAXSCF): 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))); MPRINT(TAXSCF): IF LNSTYRO{I}^=2016 THEN AINTDCTO{I}=(CMOPAYO{I}*12)-(AMTOWE_1O{I}-AMTOWEO{I}); MPRINT(TAXSCF): ELSE IF LNSTYRO{I}=2016 THEN AINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | CMOPAYO{I} < 0 | PAYLFTO{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEO{I}=0; MPRINT(TAXSCF): AMTOWE_1O{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & AMTBORRO{I} > 0 & LNAGEO{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTDCTO{I}=(CMOPAYO{I}*12)-(CURBAL_1O{I}-CURBALO{I}); 146 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | AMTBORRO{I} < 0 | LNAGEO{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALO{I}=0; MPRINT(TAXSCF): CURBAL_1O{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): ELSE SINTDCTO{I}=0; MPRINT(TAXSCF): * 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 the home was not purchased in the survey year. If the home was purchased in the survey year, set deduction to zero.; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I}=0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=2016 & PURCHYRO{I}=2016) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=2016) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & CURBALO{I} > 0 & CURBAL_1O{I} > 0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & (CURBALO{I} <= 0 & CURBAL_1O{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTO{I} > 0 & CINTDCTO{I} > 0) THEN DCTDIFFO{I}=CINTDCTO{I}-SINTDCTO{I}; MPRINT(TAXSCF): ELSE DCTDIFFO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (NMYRO{I} IN(-1 -7) & NMPMTO{I} IN(-1 -7)) & AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (INTRATEO{I}=-1)) THEN DO; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest deduction; MPRINT(TAXSCF): IF ((CINTDCTO{I} + AINTDCTO{I} + SINTDCTO{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=(CINTDCTO{I}+AINTDCTO{I}+SINTDCTO{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTDCTO{I}=0; MPRINT(TAXSCF): * 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.; 147 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & CMOPAYO{I} > 0 & (AVINTDCTO{I} > CMOPAYO{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): SINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & AMTOUTO{I} > 0 & (AVINTDCTO{I} > .25*AMTOUTO{I})) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): * Compute total investment interest expense; MPRINT(TAXSCF): TOTINVPDCT=TOTINVPDCT+((AVINTDCTO{I})*PERPROP{I}/10000)*(HAVELNO{I}=1); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Other loans - only counting loans for (non-business) investment purposes; MPRINT(TAXSCF): ARRAY TLMTHI {*} TLMTHI1 TLMTHI2 TLMTHI3 TLMTHI4 TLMTHI5 TLMTHI6; MPRINT(TAXSCF): ARRAY CMOPAYI {*} CMOPAYI1 CMOPAYI2 CMOPAYI3 CMOPAYI4 CMOPAYI5 CMOPAYI6; MPRINT(TAXSCF): ARRAY PAYLFTI {*} PAYLFTI1 PAYLFTI2 PAYLFTI3 PAYLFTI4 PAYLFTI5 PAYLFTI6; MPRINT(TAXSCF): ARRAY AMTOWEI {*} AMTOWEI1 AMTOWEI2 AMTOWEI3 AMTOWEI4 AMTOWEI5 AMTOWEI6; MPRINT(TAXSCF): ARRAY AMTOWE_1I {*} AMTOWE_1I1 AMTOWE_1I2 AMTOWE_1I3 AMTOWE_1I4 AMTOWE_1I5 AMTOWE_1I6; MPRINT(TAXSCF): ARRAY AINTEXPI {*} AINTEXPI1 AINTEXPI2 AINTEXPI3 AINTEXPI4 AINTEXPI5 AINTEXPI6; MPRINT(TAXSCF): ARRAY LNAGEI {*} LNAGEI1 LNAGEI2 LNAGEI3 LNAGEI4 LNAGEI5 LNAGEI6; MPRINT(TAXSCF): ARRAY CURBALI {*} CURBALI1 CURBALI2 CURBALI3 URBALI4 CURBALI5 CURBALI6; MPRINT(TAXSCF): ARRAY CURBAL_1I {*} CURBAL_1I1 CURBAL_1I2 CURBAL_1I3 CURBAL_1I4 CURBAL_1I5 CURBAL_1I6; MPRINT(TAXSCF): ARRAY CINTEXPI {*} CINTEXPI1 CINTEXPI2 CINTEXPI3 CINTEXPI4 CINTEXPI5 CINTEXPI6; MPRINT(TAXSCF): ARRAY DCTDIFFI {*} DCTDIFFI1 DCTDIFFI2 DCTDIFFI3 DCTDIFFI4 DCTDIFFI5 DCTDIFFI6; MPRINT(TAXSCF): ARRAY SINTEXPI {*} SINTEXPI1 SINTEXPI2 SINTEXPI3 SINTEXPI4 SINTEXPI5 SINTEXPI6; MPRINT(TAXSCF): ARRAY AVINTEXPI {*} AVINTEXPI1 AVINTEXPI2 AVINTEXPI3 AVINTEXPI4 AVINTEXPI5 AVINTEXPI6; MPRINT(TAXSCF): ARRAY QUALN {*} QLN1 QLN2 QLN3 QLN4 QLN5 QLN6; MPRINT(TAXSCF): ARRAY NMPMTI {*} X2716 X2733 X2816 X2833 X2916 X2933; MPRINT(TAXSCF): ARRAY NMYRI {*} X2717 X2734 X2817 X2834 X2917 X2934; MPRINT(TAXSCF): ARRAY REGPAYFI {*} X7527 X7526 X7525 X7524 X7523 X7522; MPRINT(TAXSCF): ARRAY REGPAYI {*} X2718 X2735 X2818 X2835 X2918 X2935; MPRINT(TAXSCF): ARRAY TYPAYFI {*} X2720 X2737 X2820 X2837 X2920 X2937; MPRINT(TAXSCF): ARRAY TYPAYI {*} X2719 X2736 X2819 X2836 X2919 X2936; MPRINT(TAXSCF): ARRAY LNSTYRI {*} X2713 X2730 X2813 X2830 X2913 X2930; MPRINT(TAXSCF): ARRAY AMTBORRI {*} X2714 X2731 X2814 X2831 X2914 X2931; MPRINT(TAXSCF): ARRAY JAMTBORRI {*} J2714 J2731 J2814 J2831 J2914 J2931; MPRINT(TAXSCF): ARRAY AMTOUTI {*} X2723 X2740 X2823 X2840 X2923 X2940; MPRINT(TAXSCF): ARRAY JAMTOUTI {*} J2723 J2740 J2823 J2840 J2923 J2940; MPRINT(TAXSCF): ARRAY INTRATEI {*} X2724 X2741 X2824 X2841 X2924 X2941; MPRINT(TAXSCF): ARRAY ONSCHEDI {*} X7521 X7520 X7519 X7518 X7517 X7516; MPRINT(TAXSCF): ; MPRINT(TAXSCF): ARRAY LNTYPE {*} X2710 X2727 X2810 X2827 X2910 X2927; MPRINT(TAXSCF): ARRAY BUSLN {*} X6842 X6843 X6844 X6845 X6846 X6847; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTHI); MPRINT(TAXSCF): TLMTHI{I}=0; MPRINT(TAXSCF): CMOPAYI{I}=0; MPRINT(TAXSCF): PAYLFTI{I}=0; MPRINT(TAXSCF): AMTOWEI{I}=0; MPRINT(TAXSCF): AMTOWE_1I{I}=0; 148 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): LNAGEI{I}=0; MPRINT(TAXSCF): CURBALI{I}=0; MPRINT(TAXSCF): CURBAL_1I{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): DCTDIFFI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; MPRINT(TAXSCF): AVINTEXPI{I}=0; MPRINT(TAXSCF): QUALN{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTLNINVEX=0; MPRINT(TAXSCF): QUALOANINV=0; MPRINT(TAXSCF): DO I=1 TO DIM(NMPMTI); MPRINT(TERMCON): IF (NMYRI{I}=0 & NMPMTI{I}=0) THEN DO; MPRINT(TERMCON): TLMTHI{I}=0; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRI{I}^=0|NMPMTI{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRI{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRI{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHI{I}=NMYRI{I}; MPRINT(TERMCON): IF (NMPMTI{I}=0) THEN DO; MPRINT(TERMCON): NMPMTI{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRI{I}>0) THEN DO; MPRINT(TERMCON): TLMTHI{I}=NMYRI{I}*12; MPRINT(TERMCON): IF (NMPMTI{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYFI{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMTI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFI{I}=-7) THEN DO; MPRINT(TERMCON): NMPMTI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFI{I}=8) THEN DO; MPRINT(TERMCON): NMPMTI{I}=1; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFI{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYFI{I}=1) THEN NMPMTI{I}=TLMTHI{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=2) THEN NMPMTI{I}=TLMTHI{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=3) THEN NMPMTI{I}=TLMTHI{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=4) THEN NMPMTI{I}=TLMTHI{I}; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=5) THEN NMPMTI{I}=TLMTHI{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=6) THEN NMPMTI{I}=TLMTHI{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=20) THEN NMPMTI{I}=TLMTHI{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=21) THEN NMPMTI{I}=TLMTHI{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=11) THEN NMPMTI{I}=TLMTHI{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=12) THEN NMPMTI{I}=TLMTHI{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=23) THEN NMPMTI{I}=TLMTHI{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=24) THEN NMPMTI{I}=TLMTHI{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=25) THEN NMPMTI{I}=TLMTHI{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=31) THEN NMPMTI{I}=TLMTHI{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=18) THEN NMPMTI{I}=TLMTHI{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=0) THEN NMPMTI{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}>.Z & REGPAYFI{I}^=-1 & REGPAYFI{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMTI{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTHI{I}= REGPAYFI{I}= NMPMTI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHI{I}>.Z & TLMTHI{I}<-2) THEN DO; 149 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): NMPMTI{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTHI{I}= REGPAYFI{I}= NMPMTI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHI{I}<=.Z) THEN NMPMTI{I}=TLMTHI{I}; MPRINT(MOCONV): ELSE IF (TLMTHI{I}^=-1 & TLMTHI{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFI{I}= TLMTHI{I}= "SETTING AMT=."; MPRINT(MOCONV): NMPMTI{I}=.; MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTI{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHI{I}=-1; MPRINT(TERMCON): IF (NMYRI{I}=0) THEN DO; MPRINT(TERMCON): NMYRI{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTI{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYFI{I}; MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYFI{I}>0) THEN PFREQ=TYPAYFI{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTHI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; MPRINT(TERMCON): TLMTHI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): IF (NMPMTI{I}>0) THEN DO; MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTHI{I}=NMPMTI{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}))); MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12))); MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTHI{I}=NMPMTI{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTHI{I}=NMPMTI{I}*2/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTHI{I}=NMPMTI{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTHI{I}=NMPMTI{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTHI{I}=NMPMTI{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTHI{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): TLMTHI{I}=NMPMTI{I}; MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMTI{I}= PFREQ= TLMTHI{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}>.Z & NMPMTI{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTHI{I}=NMPMTI{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMTI{I}= PFREQ= TLMTHI{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}=0) THEN TLMTHI{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}<=.Z) THEN TLMTHI{I}=NMPMTI{I}; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}^=-1 & NMPMTI{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMTI{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTHI{I}=.; 150 The SAS System 13:32 Friday, January 29, 2021 MPRINT(IMOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTHI{I}>0) THEN DO; MPRINT(TERMCON): NMYRI{I}=MAX(1,INT(.5+(TLMTHI{I}/12))); MPRINT(TERMCON): TLMTHI{I}=MAX(1,ROUND(TLMTHI{I})); MPRINT(TERMCON): END; MPRINT(TERMCON): IF (NMYRI{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMTI{I}= NMYRI{I}= TLMTHI{I}= REGPAYFI{I}= REGPAYI{I}= TYPAYFI{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAYI{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYFI{I}=1) THEN CMOPAYI{I}=REGPAYI{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=2) THEN CMOPAYI{I}=REGPAYI{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=3) THEN CMOPAYI{I}=REGPAYI{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=4) THEN CMOPAYI{I}=REGPAYI{I}; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=5) THEN CMOPAYI{I}=REGPAYI{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=6) THEN CMOPAYI{I}=REGPAYI{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=20) THEN CMOPAYI{I}=REGPAYI{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=21) THEN CMOPAYI{I}=REGPAYI{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=8) THEN CMOPAYI{I}=REGPAYI{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=11) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=12) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=23) THEN CMOPAYI{I}=REGPAYI{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=24) THEN CMOPAYI{I}=REGPAYI{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=25) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=31) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=18) THEN CMOPAYI{I}=REGPAYI{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=0) THEN CMOPAYI{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}>.Z & REGPAYFI{I}^=-1 & REGPAYFI{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAYI{I}= REGPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYI{I}>.Z & REGPAYI{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAYI{I}= REGPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYI{I}<=.Z) THEN CMOPAYI{I}=REGPAYI{I}; MPRINT(MOCONV): ELSE IF (REGPAYI{I}^=-1 & REGPAYI{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFI{I}= REGPAYI{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(MOCONV): IF (TYPAYFI{I}=1) THEN CMOPAYI{I}=TYPAYI{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=2) THEN CMOPAYI{I}=TYPAYI{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=3) THEN CMOPAYI{I}=TYPAYI{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=4) THEN CMOPAYI{I}=TYPAYI{I}; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=5) THEN CMOPAYI{I}=TYPAYI{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=6) THEN CMOPAYI{I}=TYPAYI{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=20) THEN CMOPAYI{I}=TYPAYI{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=21) THEN CMOPAYI{I}=TYPAYI{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=8) THEN CMOPAYI{I}=TYPAYI{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=11) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)/6; 151 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=12) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=23) THEN CMOPAYI{I}=TYPAYI{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=24) THEN CMOPAYI{I}=TYPAYI{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=25) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=31) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=18) THEN CMOPAYI{I}=TYPAYI{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=0) THEN CMOPAYI{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}>.Z & TYPAYFI{I}^=-1 & TYPAYFI{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYI{I}= TYPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYI{I}>.Z & TYPAYI{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYI{I}= TYPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYI{I}<=.Z) THEN CMOPAYI{I}=TYPAYI{I}; MPRINT(MOCONV): ELSE IF (TYPAYI{I}^=-1 & TYPAYI{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYFI{I}= TYPAYI{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF NMYRI{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFTI{I}=(TLMTHI{I}-((2016-LNSTYRI{I})*12)); MPRINT(TAXSCF): LNAGEI{I}=TLMTHI{I}-PAYLFTI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFTI{I}=0; MPRINT(TAXSCF): LNAGEI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): DO I=1 TO MIN(6,X2709); MPRINT(TAXSCF): IF (LNTYPE{I} IN(76 78 79) & BUSLN{I} IN(0 5 8)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified loans; MPRINT(TAXSCF): QUALN{I}=1; MPRINT(TAXSCF): QUALOANINV=QUALOANINV+QUALN{I}; MPRINT(TAXSCF): IF (NMYRI{I} NOT IN(0 -1 -7) & INTRATEI{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & PAYLFTI{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAYI{I} < AMTBORRI{I}*.005) THEN CMOPAYI{I}=MAX(REGPAYI{I},TYPAYI{I}); MPRINT(TAXSCF): AMTOWEI{I}=CMOPAYI{I}*((1-1/(1+(INTRATEI{I}/10000)/12)**PAYLFTI{I})/ ((INTRATEI{I}/10000)/12)); MPRINT(TAXSCF): AMTOWE_1I{I}=CMOPAYI{I}*((1-1/(1+(INTRATEI{I}/10000)/12)**(PAYLFTI{I}+12))/ ((INTRATEI{I}/10000)/12)); MPRINT(TAXSCF): IF LNSTYRI{I}^=2016 THEN AINTEXPI{I}=(CMOPAYI{I}*12)-(AMTOWE_1I{I}-AMTOWEI{I}); MPRINT(TAXSCF): ELSE IF LNSTYRI{I}=2016 THEN AINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHI{I} < 0 | CMOPAYI{I} < 0 | PAYLFTI{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEI{I}=0; MPRINT(TAXSCF): AMTOWE_1I{I}=0; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & AMTBORRI{I} > 0 & LNAGEI{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTEXPI{I}=(CMOPAYI{I}*12)-(CURBAL_1I{I}-CURBALI{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHI{I} < 0 | AMTBORRI{I} < 0 | LNAGEI{I} < 0) THEN DO; 152 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): CURBALI{I}=0; MPRINT(TAXSCF): CURBAL_1I{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUTI{I} > 0 & INTRATEI{I} > 0) THEN SINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): ELSE SINTEXPI{I}=0; MPRINT(TAXSCF): * 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, set the interest expense to zero.; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & PAYLFTI{I}=0) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=CURBAL_1I{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=CINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & LNSTYRI{I}=2016) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTEXPI{I} < 0 | CINTEXPI{I} < 0) & CURBALI{I} > 0 & CURBAL_1I{I} > 0) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=CURBAL_1I{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=CINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTEXPI{I} < 0 | CINTEXPI{I} < 0) & (CURBALI{I} <= 0 & CURBAL_1I{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTEXPI{I} > 0 & CINTEXPI{I} > 0) THEN DCTDIFFI{I}=CINTEXPI{I}-SINTEXPI{I}; MPRINT(TAXSCF): ELSE DCTDIFFI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): CINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEI{I}=-1) THEN DO; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest expense; MPRINT(TAXSCF): IF ((CINTEXPI{I} + AINTEXPI{I} + SINTEXPI{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=(CINTEXPI{I}+AINTEXPI{I}+SINTEXPI{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTEXPI{I}=0; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (AVINTEXPI{I} > 0 & CMOPAYI{I} > 0 & (AVINTEXPI{I} > CMOPAYI{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=CMOPAYI{I}*12; MPRINT(TAXSCF): CINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): SINTEXPI{I}=AVINTEXPI{I}; 153 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AVINTEXPI{I} > 0 & AMTOUTI{I} > 0 & (AVINTEXPI{I} > .25*AMTOUTI{I})) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): CINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): * Compute loan investment interest expense; MPRINT(TAXSCF): TOTLNINVEX=TOTLNINVEX+AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Total investment interest expense, if investment interest expense is greater than interest/dividend income, then expense is limited to income amount; MPRINT(TAXSCF): TOTINTINC=X5708+X5710; MPRINT(TAXSCF): TOTINVEX=0; MPRINT(TAXSCF): TOTINVEX=TOTLOCINVEX+TOTINVPDCT+TOTLNINVEX; MPRINT(TAXSCF): IF TOTINVEX > 0 THEN HINVEX=1; MPRINT(TAXSCF): ELSE HINVEX=0; MPRINT(TAXSCF): IF TOTINVEX > TOTINTINC & Y1=YY1*10+1 THEN PUT "TOO MUCH INVESTMENT INTEREST EXPENSES " Y1= TOTINVEX= TOTLOCINVEX= TOTINVPDCT= TOTLNINVEX= TOTINTINC=/; MPRINT(TAXSCF): IF (TOTINVEX > TOTINTINC) THEN TOTINVEX=TOTINTINC; MPRINT(TAXSCF): * In 1988, 40% of personal interest is deductible, this includes credit cards, car/other vehicle loans, other consumer loans, loans against life insurance policies, home improvement loans, and non-HELOC LOCs.; MPRINT(TAXSCF): TOTPINEX=0; MPRINT(TAXSCF): **************Charitable Contributions; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): GCHARITY=(X5822=1); MPRINT(TAXSCF): CHARITYAMT=0; MPRINT(TAXSCF): IF (X5822=1 & X5823 > 0) THEN DO; MPRINT(TAXSCF): IF (X5823 > .5*AGI) & (AGI>0) THEN CHARITYAMT=.5*AGI; MPRINT(TAXSCF): ELSE CHARITYAMT=X5823; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF X5822=1 & X5823 > 0 & AGI < 0 & Y1=YY1*10+1 THEN PUT "NEGATIVE AGI BUT CHARITYAMT > 0 " Y1= X5823= CHARITYAMT= X5744= X5746= AGI=; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ITEMDEDCT_FLAG=0 THEN DO; MPRINT(TAXSCF): ADJDEDCT=0; MPRINT(TAXSCF): RESTAXM1=0; MPRINT(TAXSCF): TOTINVEX=0; MPRINT(TAXSCF): CHARITYAMT=0; MPRINT(TAXSCF): TOTPINEX=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): **********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.; MPRINT(TAXSCF): TOTITEMDCT=0; MPRINT(TAXSCF): * no limits on itemized deductions in 1988, 2012 and 2018; MPRINT(TAXSCF): * starting in 2015, itemized deduction phaseout limit for AGI are the same as for personal exemptions, so using EXLIM1-4 in this code; MPRINT(TAXSCF): TEMPITEMDCT=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); MPRINT(TAXSCF): IF TEMPITEMDCT > 0 & ((AGI <= 258250 & FILESTAT=1) | (AGI <= 309900 & FILESTAT IN(2 5)) | (AGI <= 154 The SAS System 13:32 Friday, January 29, 2021 154950 & FILESTAT=3) | (AGI <= 284050 & FILESTAT=4)) THEN DO; MPRINT(TAXSCF): TOTITEMDCT=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); MPRINT(TAXSCF): DEDCTLIM=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TEMPITEMDCT > 0 & DEDCTLIM^=0 THEN DO; MPRINT(TAXSCF): ITDLIM=258250*(FILESTAT=1)+309900*(FILESTAT IN(2 5)) +154950*(FILESTAT=3)+284050*(FILESTAT=4); MPRINT(TAXSCF): DEDCTLIM=1; MPRINT(TAXSCF): IWLINE1=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); MPRINT(TAXSCF): IF (IWLINE1-TOTINVEX <= 0) THEN TOTITEMDCT=IWLINE1; MPRINT(TAXSCF): ELSE IF (IWLINE1-TOTINVEX > 0) THEN DO; MPRINT(TAXSCF): IWLINE4=(IWLINE1-TOTINVEX)*.80; MPRINT(TAXSCF): IWLINE7=AGI-ITDLIM; MPRINT(TAXSCF): IWLINE8=IWLINE7*.03; MPRINT(TAXSCF): IWLINE9=MIN(IWLINE4,IWLINE8); MPRINT(TAXSCF): TOTITEMDCT=IWLINE1-IWLINE9; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TEMPITEMDCT=0 THEN DEDCTLIM=0; MPRINT(TAXSCF): * NOTE: Change in worksheet for 2006; MPRINT(TAXSCF): * no limits on exemptions in 1988 and 2012, no exemptions in 2018; MPRINT(TAXSCF): TOTEXPTAMT=0; MPRINT(TAXSCF): EXPTLIM=0; MPRINT(TAXSCF): EXLIM=258250*(FILESTAT=1)+309900*(FILESTAT IN(2 5)) +154950*(FILESTAT=3)+284050*(FILESTAT=4); MPRINT(TAXSCF): EXPAGIT=122500*(FILESTAT^=3)+61250*(FILESTAT=3); MPRINT(TAXSCF): DLINE6=2500*(FILESTAT^=3)+1250*(FILESTAT=3); MPRINT(TAXSCF): IF (AGI <= EXLIM) THEN TOTEXPTAMT=TOTEXPT*4000; MPRINT(TAXSCF): ELSE IF (AGI > EXLIM) THEN DO; MPRINT(TAXSCF): EXPTLIM=1; MPRINT(TAXSCF): EWLINE2=TOTEXPT*4000; MPRINT(TAXSCF): EWLINE5=AGI-EXLIM; MPRINT(TAXSCF): IF EWLINE5 > EXPAGIT THEN TOTEXPTAMT=TOTEXPT*0; MPRINT(TAXSCF): ELSE IF EWLINE5 <= EXPAGIT THEN DO; MPRINT(TAXSCF): EWLINE6=ROUND((EWLINE5/DLINE6),1); MPRINT(TAXSCF): EWLINE7=EWLINE6*.02; MPRINT(TAXSCF): EWLINE8=EWLINE7*EWLINE2; MPRINT(TAXSCF): TOTEXPTAMT=EWLINE2-EWLINE8; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Standard deduction by filing status, including addition deduction amount for over 65, dont have any info on blindness. Also compute number of age exemptions and flag nonfilers based on IRS filing thresholds and a few other assumptions. Nonfilers also cannot have negative AGI, losses from business or capital gains or more than 1/3 of the lowest filing threshold, which is married, filing separately; MPRINT(TAXSCF): BUSRENTCAPLOSS=(TBUSINC < 0 | RENTINC < 0 | CAPGLINC < 0); MPRINT(TAXSCF): HWSINCSE=(WSINCOME >= (.33*4000) | WSINCSP >= (.33*4000) | TBUSINC >= (.33*4000)); MPRINT(TAXSCF): STDDCT=0; MPRINT(TAXSCF): IF (FILESTAT=1 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=6300; MPRINT(TAXSCF): NONFILER=(0 < AGI < 10300)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=1 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=7850; MPRINT(TAXSCF): NONFILER=(0 < AGI < 11850)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=2 & TUAGE < 65 & SPAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=12600; MPRINT(TAXSCF): NONFILER=(0 < AGI < 20600)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=2 & TUAGE >= 65 & SPAGE >= 65) THEN DO; 155 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): STDDCT=15100; MPRINT(TAXSCF): NONFILER=(0 < AGI < 23100)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=2 & (TUAGE >= 65 | SPAGE >= 65)) THEN DO; MPRINT(TAXSCF): STDDCT=13850; MPRINT(TAXSCF): NONFILER=(0 < AGI < 21850)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=6300; MPRINT(TAXSCF): NONFILER=(AGI < 4000)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=7850; MPRINT(TAXSCF): NONFILER=(AGI < 4000)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=4 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=9250; MPRINT(TAXSCF): NONFILER=(0 < AGI < 13250)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=4 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=10800; MPRINT(TAXSCF): NONFILER=(0 < AGI < 14800)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=5 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=12600; MPRINT(TAXSCF): NONFILER=(AGI < 16600)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=5 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=13850; MPRINT(TAXSCF): NONFILER=(0 < AGI < 17850)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): AGEXMP=(TUAGE > 65) + (SPAGE > 65)*(FILESTAT=2); MPRINT(TAXSCF): * Did the hh itemize; MPRINT(TAXSCF): * No itemization question in 1989 or 1992, so itemize will be zero; MPRINT(TAXSCF): ITEMIZE=(TAXUNIT=0)*(X7367=1 | X7368=1 | X7369=1)+(TAXUNIT=1)*(X7368=1)+(TAXUNIT=2)*(X7369=1); MPRINT(TAXSCF): CITEMIZE=(TOTITEMDCT => STDDCT); MPRINT(TAXSCF): * Construct other variables needed for TAXSIM; MPRINT(TAXSCF): TAXUNITID=Y1*100+TAXUNIT; MPRINT(TAXSCF): YEAR=2015; MPRINT(TAXSCF): AGECL=1*(TUAGE < 26)+2*(26<=TUAGE<35)+3*(35<=TUAGE<45) +4*(45<=TUAGE<55)+5*(55<=TUAGE<65)+6*(TUAGE>=65); MPRINT(TAXSCF): * 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).; MPRINT(TAXSCF): STCAPINC=0; MPRINT(TAXSCF): LTCAPINC=0; MPRINT(TAXSCF): IF (AGICL IN(1)) THEN DO; MPRINT(TAXSCF): IF (CAPGLINC > 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.87; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.87); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (CAPGLINC < 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.62; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.62); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AGICL IN(2)) THEN DO; 156 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): IF (CAPGLINC > 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.86; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.86); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (CAPGLINC < 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.66; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.66); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AGICL IN(3)) THEN DO; MPRINT(TAXSCF): IF (CAPGLINC > 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.94; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.94); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (CAPGLINC < 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.87; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.87); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ARRAY NEG_1 {*} TBUSINC OTHINC RENTINC OTHPINC; MPRINT(TAXSCF): DO I=1 TO DIM(NEG_1); MPRINT(TAXSCF): IF NEG_1{I}=-1 THEN NEG_1{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): UNADJTOTDEDCT=MAX(0,(ADJDEDCT+TOTINVEX+CHARITYAMT)); MPRINT(TAXSCF): CHCAREXP=0; MPRINT(TAXSCF): TINCOME=WSINCOME+WSINCSP+TBUSINC+INTINC+NTAXINC+DIVINC+CAPGLINC+RENTINC +UNEMPINC+GSSINC+PENINC+AFDCINC+OTHINC; MPRINT(TAXSCF): TOTXINC=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC +UNEMPINC+GSSINC+PENINC+OTHINC; MPRINT(TAXSCF): *set 3000 max loss for capital gains for comparison with IRS estimates; MPRINT(TAXSCF): IF CAPGLINC < -3000 THEN CAPGL3K=-3000; MPRINT(TAXSCF): ELSE CAPGL3K=CAPGLINC; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (TOTXINC=0 & TINCOME > 0 & AFDCINC=0 & NTAXINC=0 & TAXUNIT < 3 & Y1=YY1*10+1) THEN PUT "TOTXINC IS ZERO BUT TINCOME > 0 " YY1= Y1= TOTXINC= TINCOME= WSINCOME= WSINCSP= TBUSINC= INTINC= NTAXINC= DIVINC= RENTINC= UNEMPINC= AFDCINC= GSSINC= PENINC= OTHINC= CAPGLINC= RAGE= SPAGE= FILESTAT= TAXUNIT= X4100= X4700=/; MPRINT(TAXSCF): * Adding in payroll tax liability and mtr, assuming employee pays both employee and employer share, and 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 earning 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 tax year, 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 caculate the payroll liability and mtr. Computing the payroll atr in a similar fashion. NOTE: Need to adjust for different amounts used to compute the mtr, initially computing payroll mtr for adding $1 to earnings.; MPRINT(TAXSCF): * Need to adjust for 1988, 2% credit for SE, in 1991, limit on medicare tax; MPRINT(TAXSCF): ** earnings from wages and businesses for head and spouse/parnter; MPRINT(TAXSCF): REARN=R_LABORINC+R_BUSINC; MPRINT(TAXSCF): SPEARN=SP_LABORINC+SP_BUSINC; MPRINT(TAXSCF): HHEARN=REARN+SPEARN; MPRINT(TAXSCF): TWSINC=WSINCOME+WSINCSP; MPRINT(TAXSCF): PAYROLLIAB=0; MPRINT(TAXSCF): PAYROLLMTR=0; MPRINT(TAXSCF): PAYROLLATR=0; 157 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): IF TAXUNIT=0 THEN DO; MPRINT(TAXSCF): IF (X4106 IN(1 2 3 4 -7) & X4706=0) | (X4106=0 & X4706 IN(1 2 3 4 -7)) | (X4106=0 & X4706=0 & X102=0 & (TWSINC > 0 | TBUSINC > 0)) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(118500,(TWSINC+TBUSINC*(TBUSINC >0)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*.029)*(2016 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*.029)*(2016 EQ 1992); MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 118500)*(100*.124))+ (100*.029)*(2016 GE 1995)+ (100*.029)*(2016 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB >0) THEN PAYROLLATR=100*(PAYROLLIAB/(TWSINC+TBUSINC*(TBUSINC > 0))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X4106 IN(1 2 3 4 -7) & X4706 IN(1 2 3 4 -7)) THEN DO; MPRINT(TAXSCF): IF (X4115 >=1 & X4715 >=1 & HHEARN > 0) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(118500,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(REARN/HHEARN))*.029*(2016 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*(REARN/HHEARN))*.029*(2016 EQ 1992)+ MIN(118500,((TWSINC+TBUSINC*(TBUSINC >0))*(SPEARN/HHEARN)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(SPEARN/HHEARN))*.029*(2016 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*(SPEARN/HHEARN))*.029*(2016 EQ 1992); MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(REARN/HHEARN) <= 118500)*(100*.124))+(100*.029)*(2016 GE 1995)+ (100*.029)*(2016 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1)*(REARN/HHEARN) <= 125000); MPRINT(TAXSCF): IF ((MIN(118500,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(REARN/HHEARN))*.029) > 0) THEN PAYROLLATR=100*((MIN(118500,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*.124 + ((2016 GE 1995)*((TWSINC+TBUSINC*(TBUSINC >0))*(REARN/HHEARN))*.029)+ ((2016 EQ 1992)*(MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*(REARN/HHEARN))*.029))/ ((TWSINC+TBUSINC*(TBUSINC > 0))*(REARN/HHEARN))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X4115 =-1 & X4715=-1) | (X4115 >=1 & X4715=-1) | (X4115=-1 & X4715 >=1) | (HHEARN=0) THEN DO; MPRINT(TAXSCF): IF ((TWSINC+TBUSINC*(TBUSINC >0)) <= 118500) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=(TWSINC+TBUSINC*(TBUSINC >0))*.124+ (TWSINC+TBUSINC*(TBUSINC >0))*.029; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((TWSINC+TBUSINC*(TBUSINC >0)) > 118500) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(2*118500,((TWSINC+TBUSINC*(TBUSINC >0))))*.124+ (TWSINC+TBUSINC*(TBUSINC >0))*.029*(2016 GE 1995)+ MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*.029*(2016 EQ 1992); MPRINT(TAXSCF): END; MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(.5) <= 118500)*(100*.124))+(100*.029)*(2016 GE 1995)+ (100*.029)*(2016 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB*.5 > 0) THEN PAYROLLATR=100*((PAYROLLIAB*.5)/((TWSINC+TBUSINC*(TBUSINC >0))*(.5))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X4106=0 & X4706=0 & X102^=0 & (TWSINC > 0 | TBUSINC > 0)) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=2*(MIN(118500,((TWSINC+TBUSINC*(TBUSINC >0))*(.5)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(.5))*.029*(2016 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)*(.5)))*.029)*(2016 EQ 1992)); MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(.5) <= 118500)*(100*.124))+(100*.029)*(2016 GE 1995)+ (100*.029)*(2016 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB*.5 > 0) THEN PAYROLLATR=100*((PAYROLLIAB*.5)/((TWSINC+TBUSINC*(TBUSINC >0))*(.5))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TAXUNIT >= 1 THEN DO; MPRINT(TAXSCF): IF (WSINCOME > 0 | TBUSINC > 0) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(118500,(WSINCOME+TBUSINC*(TBUSINC >0)))*.124 + ((WSINCOME+TBUSINC*(TBUSINC >0))*.029)*(2016 GE 1995)+ (MIN(125000,(WSINCOME+TBUSINC*(TBUSINC >0)))*.029)*(2016 EQ 1992); MPRINT(TAXSCF): PAYROLLMTR=(((WSINCOME+TBUSINC*(TBUSINC > 0)+1)<=118500)*(100*.124))+ (100*.029)*(2016 GE 1995)+ (100*.029)*(2016 EQ 1992)*((WSINCOME+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB >0) THEN PAYROLLATR=100*(PAYROLLIAB/(WSINCOME+TBUSINC*(TBUSINC > 0))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF PAYROLLIAB=0 & PAYROLLMTR=0 & PAYROLLATR=0 & (TWSINC > 0 | TBUSINC > 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= TWSINC= TBUSINC= R_LABORINC= R_BUSINC= R_SOLEPROP= SP_LABORINC= SP_BUSINC= SP_SOLEPROP= REARN= SPEARN= HHEARN= TAXUNIT=/; 158 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): * Check for missing variables; MPRINT(TAXSCF): ARRAY CHVARS {*} YY1 Y1 CHARITYAMT X5823 TOTITEMDCT STDDCT AGI AGICL AGIGE50K DEDCTLIM X7372 X7018 X8023 X105 PERSEXP KIDS TOTEXPT FILESTAT TOTEXPTAMT EXPTLIM RAGE SPAGE TUAGE YEAR STATE TAXUNIT WSINCOME WSINCSP TBUSINC NTAXINC INTINC DIVINC CAPGLINC RENTINC UNEMPINC CHSPALINC AFDCINC PENINC OTHINC GSSINC OTHPINC NONTAX RENT UNADJTOTDEDCT CHCAREXP TINCOME TOTXINC STCAPINC LTCAPINC PAYROLLIAB PAYROLLMTR PAYROLLATR LWP KIDSU17 KIDSU18 KIDSU13; MPRINT(TAXSCF): DO I=1 TO DIM(CHVARS); MPRINT(TAXSCF): IF CHVARS{I}=. THEN PUT "MISSING VALUE FOR " Y1= CHVARS{I}=; MPRINT(TAXSCF): END; MPRINT(TAXSCF): RUN; NOTE: The file "null.txt" is: Filename=/disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code/null.txt, Owner Name=taxsim,Group Name=taxsim, Access Permission=-rw-r--r--, Last Modified=29Jan2021:13:32:46 NOTE: 670 records were written to the file "null.txt". The minimum record length was 0. The maximum record length was 376. NOTE: There were 39562 observations read from the data set WORK.SCF. NOTE: The data set WORK.SCF has 39562 observations and 5644 variables. NOTE: DATA statement used (Total process time): real time 2.48 seconds cpu time 1.25 seconds MPRINT(TAXSCF): * Create a dataset for full TAXSIM. Breaking out total itemized deductions into its parts - have applied the limits for the mortgage interest deduction and investment interest expense, but not for charitable contributions.; MPRINT(TAXSCF): PROC SORT DATA=SCF; MPRINT(TAXSCF): BY TAXUNITID; MPRINT(TAXSCF): RUN; NOTE: There were 39562 observations read from the data set WORK.SCF. NOTE: The data set WORK.SCF has 39562 observations and 5644 variables. NOTE: PROCEDURE SORT used (Total process time): real time 1.54 seconds cpu time 0.94 seconds MPRINT(TAXSCF): proc means; MPRINT(TAXSCF): var y1 yy1 year year; MPRINT(TAXSCF): run; NOTE: There were 39562 observations read from the data set WORK.SCF. NOTE: The PROCEDURE MEANS printed page 115. NOTE: PROCEDURE MEANS used (Total process time): real time 0.10 seconds cpu time 0.11 seconds MPRINT(TAXSCF): * Rename variables to TAXSIM names, use lowercase for TAXSIM file names; MPRINT(TAXSCF): libname swt "../swt/sas"; NOTE: Libref SWT was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/swt/sas MPRINT(TAXSCF): DATA swt.swt16; MPRINT(TAXSCF): SET SCF; 159 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): rep=mod(y1,10); MPRINT(TAXSCF): * IF FILESTAT > 0; MPRINT(TAXSCF): mstat=1*(FILESTAT IN(1 4))+2*(FILESTAT IN(2 5))+6*(FILESTAT IN(3)); MPRINT(TAXSCF): otherprop=RENTINC+TBUSINC; MPRINT(TAXSCF): nonprop=CHSPALINC+OTHINC; MPRINT(TAXSCF): otheritem=TOTINVEX+TOTPINEX; MPRINT(TAXSCF): mortgage=ADJDEDCT+X5823; MPRINT(TAXSCF): scorp=0; MPRINT(TAXSCF): pbusinc=0; MPRINT(TAXSCF): pprofinc=0; MPRINT(TAXSCF): sbusinc=0; MPRINT(TAXSCF): sprofinc=0; MPRINT(TAXSCF): tyear=YEAR; MPRINT(TAXSCF): tstate=STATE; MPRINT(TAXSCF): * set idtl=2 to get detailed output from TAXSIM; MPRINT(TAXSCF): idtl=2; MPRINT(TAXSCF): DROP STATE; MPRINT(TAXSCF): RENAME TAXUNITID=taxsimid TUAGE=page SPAGE=sage KIDS=depx KIDSU13=dep13 KIDSU17=dep17 KIDSU18=dep18 WSINCOME=pwages WSINCSP=swages DIVINC=dividends INTINC=intrec STCAPINC=stcg LTCAPINC=ltcg PENINC=pensions GSSINC=gssi UNEMPINC=ui AFDCINC=transfers RENT=rentpaid RESTAXM1=proptax CHCAREXP=childcare tyear=year; MPRINT(TAXSCF): RUN; WARNING: Variable tyear cannot be renamed to year because year already exists. NOTE: There were 39562 observations read from the data set WORK.SCF. NOTE: The data set SWT.SWT16 has 39562 observations and 5657 variables. NOTE: DATA statement used (Total process time): real time 9.85 seconds cpu time 1.39 seconds MPRINT(TAXSCF): proc means; MPRINT(TAXSCF): var y1 yy1 year; MPRINT(TAXSCF): run; NOTE: There were 39562 observations read from the data set SWT.SWT16. NOTE: The PROCEDURE MEANS printed page 116. NOTE: PROCEDURE MEANS used (Total process time): real time 8.58 seconds cpu time 0.56 seconds MPRINT(TAXSCF): libname taxsim "../txpydata/sas"; NOTE: Libref TAXSIM was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/txpydata/sas MPRINT(TAXSCF): proc contents data=swt.swt16; MPRINT(TAXSCF): run; NOTE: PROCEDURE CONTENTS used (Total process time): real time 0.01 seconds cpu time 0.01 seconds NOTE: The PROCEDURE CONTENTS printed pages 117-226. MPRINT(TAXSCF): DATA taxsim.txpydata16; MPRINT(TAXSCF): SET swt.swt16(KEEP=taxsimid year mstat page sage depx dep13 dep17 dep18 pwages swages dividends intrec stcg ltcg otherprop nonprop pensions gssi ui transfers rentpaid proptax otheritem childcare mortgage scorp pbusinc pprofinc sbusinc sprofinc Y1 YY1 taxunit rep); 160 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): y1=Y1; MPRINT(TAXSCF): yy1=YY1; MPRINT(TAXSCF): RUN; NOTE: There were 39562 observations read from the data set SWT.SWT16. NOTE: The data set TAXSIM.TXPYDATA16 has 39562 observations and 35 variables. NOTE: DATA statement used (Total process time): real time 0.35 seconds cpu time 0.12 seconds MPRINT(TAXSCF): proc contents data=taxsim.txpydata16; MPRINT(TAXSCF): run; NOTE: PROCEDURE CONTENTS used (Total process time): real time 0.03 seconds cpu time 0.02 seconds NOTE: The PROCEDURE CONTENTS printed pages 227-228. 3859 3860 %TAXSCF(SYEAR=2013,TYEAR=2012,WYEAR=2010,ITDLIM1=0,ITDLIM2=0,ITDL10=0,EXPAMT=3800, 3861 EXPAMT2=0,EXDL9=0,EXPAGIT1=0,EXPAGIT2=0,EXLIM1=0,EXLIM2=0, 3862 EXLIM3=0,EXLIM4=0,STDAMT1=5950,STDAMT2=7400,STDAMT3=11900,STDAMT4=13050, 3863 STDAMT5=14200,STDAMT6=8700,STDAMT7=10150,FILELIM1=9750,FILELIM2=11200,FILELIM3=19500,FILELIM4=20650, 3864 FILELIM5=21800,FILELIM6=3800,FILELIM7=12500,FILELIM8=13950,FILELIM9=15700,FILELIM10=16850,LCGAGI1=.87, 3865 LCLAGI1=.62,LCGAGI2=.86,LCLAGI2=.66,LCGAGI3=.94, MPRINT(TAXSCF): * define libraries for SCF public datasets; 3866 LCLAGI3=.87,PAYTAX=.104,MEDHI=.029,PTLIM=110100,HTAXFILE=HTAXFILE=&SYSPARM); MPRINT(TAXSCF): LIBNAME SCF13 "../orig/sas7bdat" ACCESS=READONLY; NOTE: Libref SCF13 refers to the same physical library as SCF16. NOTE: Libref SCF13 was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/orig/sas7bdat MPRINT(TAXSCF): * directory for datasets created by the program; MPRINT(TAXSCF): LIBNAME OUT "."; NOTE: Libref OUT was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code MPRINT(TAXSCF): * csv file for TAXSIM v32; MPRINT(TAXSCF): FILENAME SCFTAX "txpydata13.csv"; MPRINT(TAXSCF): * csv from TAXSIM v32; MPRINT(TAXSCF): FILENAME TAXSIM "results13.csv"; MPRINT(TAXSCF): * read in public SCF data, assumes dataset name is pXXiY.sas7bdat; MPRINT(TAXSCF): * NOTE: Any changes to the libname or data set name must also be made in this data step; MPRINT(TAXSCF): DATA MAIN; MPRINT(TAXSCF): SET SCF13.P13I6; NOTE: Data file SCF13.P13I6.DATA is in a format that is native to another host, or the file encoding does not match the session encoding. Cross Environment Data Access will be used, which might require additional CPU resources and might reduce performance. MPRINT(TAXSCF): RUN; NOTE: There were 30075 observations read from the data set SCF13.P13I6. NOTE: The data set WORK.MAIN has 30075 observations and 5415 variables. NOTE: DATA statement used (Total process time): real time 7.92 seconds cpu time 7.79 seconds 161 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): PROC SORT DATA=MAIN; MPRINT(TAXSCF): BY Y1; MPRINT(TAXSCF): RUN; NOTE: There were 30075 observations read from the data set WORK.MAIN. NOTE: The data set WORK.MAIN has 30075 observations and 5415 variables. NOTE: PROCEDURE SORT used (Total process time): real time 0.51 seconds cpu time 0.50 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET MAIN; MPRINT(TAXSCF): file "null.txt"; MPRINT(TAXSCF): WGT=(X42001/5); MPRINT(TAXSCF): POP=1; MPRINT(TAXSCF): * setting STATE variable to zero, set to -1 if you want TAXSIM to compute state tax for all 51 states; MPRINT(TAXSCF): STATE=0; MPRINT(TAXSCF): * Small data fix for one case in 1992; MPRINT(TAXSCF): * Small data fix for one case in 1998; MPRINT(TAXSCF): * Small data fix for one case in 2007; MPRINT(TAXSCF): * Small data fix for one case in 2013; MPRINT(TAXSCF): IF (YY1=4225 & X1016=0) THEN DO; MPRINT(TAXSCF): X1016=-1; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Payment frequency on other loans not asked in 1989, assumed to be monthly; MPRINT(TAXSCF): * Only one other income variable after 1992, set to zero for 1992 forward; MPRINT(TAXSCF): X5726=0; MPRINT(TAXSCF): X5727=0; MPRINT(TAXSCF): * Spouse/partner in PEU, need to create X7020 for 1989 to 1998; MPRINT(TAXSCF): * A few other recodes to construct variables not asked in 1989 and 1992; MPRINT(TAXSCF): * Number of years with spouse/partner; MPRINT(TAXSCF): IF 2013=X8005 THEN X7370=-1; MPRINT(TAXSCF): ELSE X7370=2013-X8005; MPRINT(TAXSCF): * Number of people in NPEU, need to compute for 1989 to 2004, variable exists for 2007 forward; MPRINT(TAXSCF): * Absent spouse/partner indicator; MPRINT(TAXSCF): IF (X100=5) | (X106=5 & X107 IN(2 5 12)) THEN ABSP_P=1; MPRINT(TAXSCF): ELSE ABSP_P=0; MPRINT(TAXSCF): PERSEXP=1+(X105 IN(1 2))*(ABSP_P=0); MPRINT(TAXSCF): * Including children living elsewhere that are under 18, max of one extra as there is uncertainty about dependent status; MPRINT(TAXSCF): 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) + (X226 IN(4 13))*(X228 < 19) + (X5912 > 0 | X5912=-2); MPRINT(TAXSCF): * For the child tax credit - must be under 17; MPRINT(TAXSCF): 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) + (X226 IN(4 13))*(X228 < 17); MPRINT(TAXSCF): KIDSU18=(X108 IN(4 13))*(X110 < 18) + (X114 IN(4 13))*(X116 < 18) + (X120 IN(4 13))*(X122 < 18) + (X126 IN(4 13))*(X128 < 18) + (X132 IN(4 13))*(X134 < 18) + (X202 IN(4 13))*(X204 < 18) + (X208 IN(4 13))*(X210 < 18) + (X214 IN(4 13))*(X216 < 18) + (X220 IN(4 13))*(X222 < 18) + (X226 IN(4 13))*(X228 < 18); MPRINT(TAXSCF): KIDSU13=(X108 IN(4 13))*(X110 < 13) + (X114 IN(4 13))*(X116 < 13) + (X120 IN(4 13))*(X122 < 13) + (X126 IN(4 13))*(X128 < 13) + (X132 IN(4 13))*(X134 < 13) + (X202 IN(4 13))*(X204 < 13) + (X208 IN(4 13))*(X210 < 13) + (X214 IN(4 13))*(X216 < 13) + (X220 IN(4 13))*(X222 < 13) + (X226 IN(4 13))*(X228 < 13); MPRINT(TAXSCF): * Indicator for R living with a partner; MPRINT(TAXSCF): LWP=(X8023=2); MPRINT(TAXSCF): RAGE=X14; 162 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): * Set spouse/parnter age to zero if absent spouse/partner; MPRINT(TAXSCF): SPAGE=X19*(X7020=2); MPRINT(TAXSCF): * Possible scenarios, not considering NPEU right now, will create those tax units last 1. Married filing jointly households = tax unit 2. Single person households = tax unit 3. Filing separately households = split into two tax units, need to determine if single or married filing separately filing status 4. LWP households = split into two tax units even if one person is a nonfiler For 3. and 4., one of the tax units may have head of household status depending on presence of children For each new tax unit, start with replicate of household data and parse out income, deductions, exemptions; MPRINT(TAXSCF): * Create new observations from married filing separately households or LWP households. 0. Tax unit = household 1. Created tax unit for household head 2. Created tax unit for spouse/parnter 3-8. Created tax unit for NPEU member Note: If R and Sp are legally married for more than one year, treat as married filing joint even if x5746=3,4. If R and Sp LWP and report filing jointly treat as two tax units. If R and Sp married and report filing separately, treat as filing jointly unless either R or Sp has a past marriage. Inspection of the data reveals that too many married couples report filing separately when compared to the IRS data. The past marriage condition put the number closer to the IRS data.; MPRINT(TAXSCF): MARRIED=(X8023=1 & X105=1 & X7370 >= 1 & X7020=2); MPRINT(TAXSCF): IF (X5744 IN(1 6) & X5746=1 & MARRIED=1) | (MARRIED=1 & ((X5744=5 | X5746 IN(3 4)) | (X5746=2 & X7377^=2 & X7392^=2))) | (X8023 > 0 & X105=0 & (X5744=5 | (X5744 IN(1 6) & X5746=0))) | (X8023 > 0 & X105 > 0 & X5744 IN(1 5 6) & X5746=0 & X7020=1) | (X8023=8 & X105=0 & X5744=1 & X5746=1) THEN TAXUNIT=0; MPRINT(TAXSCF): ELSE IF (X5744 IN(1 6) & X5746 IN(2 3 4)) | (X8023 > 0 & X105 > 0 & (X5744=5 | (X5744 IN(1 6) & X5746 IN(0 1)))) | (X8023=1 & X105=1 & X7370=-1 & X5744=1) THEN TAXUNIT=1; MPRINT(TAXSCF): ELSE PUT "MISSING TAXUNIT STATUS " YY1= X5744= X5746= X8023= X105= X7020= MARRIED= X7372= X7018= X7370=; MPRINT(TAXSCF): TUAGE=RAGE; MPRINT(TAXSCF): RUN; NOTE: The file "null.txt" is: Filename=/disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code/null.txt, Owner Name=taxsim,Group Name=taxsim, Access Permission=-rw-r--r--, Last Modified=29Jan2021:13:33:17 NOTE: 0 records were written to the file "null.txt". NOTE: There were 30075 observations read from the data set WORK.MAIN. NOTE: The data set WORK.SCF has 30075 observations and 5433 variables. NOTE: DATA statement used (Total process time): real time 0.67 seconds cpu time 0.67 seconds MPRINT(TAXSCF): DATA NEWUNITS; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): IF TAXUNIT=1; MPRINT(TAXSCF): TAXUNIT=2; MPRINT(TAXSCF): TUAGE=SPAGE; MPRINT(TAXSCF): SPAGE=0; MPRINT(TAXSCF): RUN; NOTE: There were 30075 observations read from the data set WORK.SCF. NOTE: The data set WORK.NEWUNITS has 2983 observations and 5433 variables. NOTE: DATA statement used (Total process time): real time 0.29 seconds cpu time 0.30 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF NEWUNITS; MPRINT(TAXSCF): RUN; 163 The SAS System 13:32 Friday, January 29, 2021 NOTE: There were 30075 observations read from the data set WORK.SCF. NOTE: There were 2983 observations read from the data set WORK.NEWUNITS. NOTE: The data set WORK.SCF has 33058 observations and 5433 variables. NOTE: DATA statement used (Total process time): real time 0.66 seconds cpu time 0.67 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): * Codes for filestat, assigning status even if did not file, will determine non-filer status later, filing status for split tax units done after splitting up income 1= Single 2= Married filing jointly 3= Married filing separately 4= Head of HH 5= Qualified widower; MPRINT(TAXSCF): FILESTAT=0; MPRINT(TAXSCF): IF TAXUNIT=0 THEN DO; MPRINT(TAXSCF): IF (MARRIED=1) THEN FILESTAT=2; MPRINT(TAXSCF): ELSE IF MARRIED=0 THEN DO; MPRINT(TAXSCF): IF PERSEXP=1 & KIDS=0 THEN FILESTAT=1; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS > 0 & X8023=5 & X7372=5 & X8007>=2010 THEN FILESTAT=5; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS > 0 THEN FILESTAT=4; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTEXPT=PERSEXP+KIDS; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * No AGI variables starting in 2010; MPRINT(TAXSCF): * Coding income variables with -1 and -2 to zero; MPRINT(TAXSCF): ARRAY NEG {*} X5704 X5714 X5724 X5726 X5729; MPRINT(TAXSCF): DO I=1 TO DIM(NEG); MPRINT(TAXSCF): IF NEG{I} IN(-2 -1) THEN NEG{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Income from wages and business; MPRINT(TAXSCF): R_LABORINC=MAX(0,X4112) MPRINT(ACONV): *((X4113=2)*52.18+(X4113=3)*26.09+(X4113=4)*12+(X4113=5)*4+(X4113=6)+(X4113=8)+ (X4113=11)*2+(X4113=12)*6+(X4113=31)*24+(X4113=14)+(X4113=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): SP_LABORINC=MAX(0,X4712) MPRINT(ACONV): *((X4713=2)*52.18+(X4713=3)*26.09+(X4713=4)*12+(X4713=5)*4+(X4713=6)+(X4713=8)+ (X4713=11)*2+(X4713=12)*6+(X4713=31)*24+(X4713=14)+(X4713=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): R_BUSINC=MAX(0,X4131) MPRINT(ACONV): *((X4132=2)*52.18+(X4132=3)*26.09+(X4132=4)*12+(X4132=5)*4+(X4132=6)+(X4132=8)+ (X4132=11)*2+(X4132=12)*6+(X4132=31)*24+(X4132=14)+(X4132=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): SP_BUSINC=MAX(0,X4731) MPRINT(ACONV): *((X4732=2)*52.18+(X4732=3)*26.09+(X4732=4)*12+(X4732=5)*4+(X4732=6)+(X4732=8)+ (X4732=11)*2+(X4732=12)*6+(X4732=31)*24+(X4732=14)+(X4732=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): * Income from pensions and tax-deferred account withdrawals. No withdrawal information for IRAs or future pensions prior to 2004. No withdrawal information for any tax-deferred accounts, aside from other income, prior to 2001; MPRINT(TAXSCF): R_REGPEN=MAX(0,(X5318 MPRINT(ACONV): *((X5319=2)*52.18+(X5319=3)*26.09+(X5319=4)*12+(X5319=5)*4+(X5319=6)+(X5319=8)+ (X5319=11)*2+(X5319=12)*6+(X5319=31)*24+(X5319=14)+(X5319=22)) MPRINT(TAXSCF): *(X5315=1)*(X5317>=1))) +MAX(0,(X5326 MPRINT(ACONV): *((X5327=2)*52.18+(X5327=3)*26.09+(X5327=4)*12+(X5327=5)*4+(X5327=6)+(X5327=8)+ (X5327=11)*2+(X5327=12)*6+(X5327=31)*24+(X5327=14)+(X5327=22)) MPRINT(TAXSCF): *(X5323=1)*(X5325>=1))) +MAX(0,(X5334 MPRINT(ACONV): *((X5335=2)*52.18+(X5335=3)*26.09+(X5335=4)*12+(X5335=5)*4+(X5335=6)+(X5335=8)+ 164 The SAS System 13:32 Friday, January 29, 2021 (X5335=11)*2+(X5335=12)*6+(X5335=31)*24+(X5335=14)+(X5335=22)) MPRINT(TAXSCF): *(X5331=1)*(X5333>=1))) +MAX(0,(X5418 MPRINT(ACONV): *((X5419=2)*52.18+(X5419=3)*26.09+(X5419=4)*12+(X5419=5)*4+(X5419=6)+(X5419=8)+ (X5419=11)*2+(X5419=12)*6+(X5419=31)*24+(X5419=14)+(X5419=22)) MPRINT(TAXSCF): *(X5415=1)*(X5417>=1))); MPRINT(TAXSCF): R_WITHDRAW=X6558+(X6574*.5)+MAX(0,(X6464 MPRINT(ACONV): *((X6465=2)*52.18+(X6465=3)*26.09+(X6465=4)*12+(X6465=5)*4+(X6465=6)+(X6465=8)+ (X6465=11)*2+(X6465=12)*6+(X6465=31)*24+(X6465=14)+(X6465=22)) MPRINT(TAXSCF): *(X5315=1))) +MAX(0,(X6469 MPRINT(ACONV): *((X6470=2)*52.18+(X6470=3)*26.09+(X6470=4)*12+(X6470=5)*4+(X6470=6)+(X6470=8)+ (X6470=11)*2+(X6470=12)*6+(X6470=31)*24+(X6470=14)+(X6470=22)) MPRINT(TAXSCF): *(X5323=1)))+MAX(0,(X6474 MPRINT(ACONV): *((X6475=2)*52.18+(X6475=3)*26.09+(X6475=4)*12+(X6475=5)*4+(X6475=6)+(X6475=8)+ (X6475=11)*2+(X6475=12)*6+(X6475=31)*24+(X6475=14)+(X6475=22)) MPRINT(TAXSCF): *(X5331=1))) +MAX(0,(X6479 MPRINT(ACONV): *((X6480=2)*52.18+(X6480=3)*26.09+(X6480=4)*12+(X6480=5)*4+(X6480=6)+(X6480=8)+ (X6480=11)*2+(X6480=12)*6+(X6480=31)*24+(X6480=14)+(X6480=22)) MPRINT(TAXSCF): *(X5415=1)))+MAX(0,(X6965 MPRINT(ACONV): *((X6966=2)*52.18+(X6966=3)*26.09+(X6966=4)*12+(X6966=5)*4+(X6966=6)+(X6966=8)+ (X6966=11)*2+(X6966=12)*6+(X6966=31)*24+(X6966=14)+(X6966=22)) MPRINT(TAXSCF): *(X5606=1))) +MAX(0,(X6971 MPRINT(ACONV): *((X6972=2)*52.18+(X6972=3)*26.09+(X6972=4)*12+(X6972=5)*4+(X6972=6)+(X6972=8)+ (X6972=11)*2+(X6972=12)*6+(X6972=31)*24+(X6972=14)+(X6972=22)) MPRINT(TAXSCF): *(X5614=1)))+MAX(0,(X6977 MPRINT(ACONV): *((X6978=2)*52.18+(X6978=3)*26.09+(X6978=4)*12+(X6978=5)*4+(X6978=6)+(X6978=8)+ (X6978=11)*2+(X6978=12)*6+(X6978=31)*24+(X6978=14)+(X6978=22)) MPRINT(TAXSCF): *(X5622=1))) +MAX(0,(X6983 MPRINT(ACONV): *((X6984=2)*52.18+(X6984=3)*26.09+(X6984=4)*12+(X6984=5)*4+(X6984=6)+(X6984=8)+ (X6984=11)*2+(X6984=12)*6+(X6984=31)*24+(X6984=14)+(X6984=22)) MPRINT(TAXSCF): *(X5630=1)))+(X5724)*(X5725=11)*.5; MPRINT(TAXSCF): SP_REGPEN=MAX(0,(X5318 MPRINT(ACONV): *((X5319=2)*52.18+(X5319=3)*26.09+(X5319=4)*12+(X5319=5)*4+(X5319=6)+(X5319=8)+ (X5319=11)*2+(X5319=12)*6+(X5319=31)*24+(X5319=14)+(X5319=22)) MPRINT(TAXSCF): *(X5315=2)*(X5317>=1))) +MAX(0,(X5326 MPRINT(ACONV): *((X5327=2)*52.18+(X5327=3)*26.09+(X5327=4)*12+(X5327=5)*4+(X5327=6)+(X5327=8)+ (X5327=11)*2+(X5327=12)*6+(X5327=31)*24+(X5327=14)+(X5327=22)) MPRINT(TAXSCF): *(X5323=2)*(X5325>=1))) +MAX(0,(X5334 MPRINT(ACONV): *((X5335=2)*52.18+(X5335=3)*26.09+(X5335=4)*12+(X5335=5)*4+(X5335=6)+(X5335=8)+ (X5335=11)*2+(X5335=12)*6+(X5335=31)*24+(X5335=14)+(X5335=22)) MPRINT(TAXSCF): *(X5331=2)*(X5333>=1))) +MAX(0,(X5418 MPRINT(ACONV): *((X5419=2)*52.18+(X5419=3)*26.09+(X5419=4)*12+(X5419=5)*4+(X5419=6)+(X5419=8)+ (X5419=11)*2+(X5419=12)*6+(X5419=31)*24+(X5419=14)+(X5419=22)) MPRINT(TAXSCF): *(X5415=2)*(X5417>=1))); MPRINT(TAXSCF): SP_WITHDRAW=X6566+(X6574*.5)+MAX(0,(X6464 MPRINT(ACONV): *((X6465=2)*52.18+(X6465=3)*26.09+(X6465=4)*12+(X6465=5)*4+(X6465=6)+(X6465=8)+ (X6465=11)*2+(X6465=12)*6+(X6465=31)*24+(X6465=14)+(X6465=22)) MPRINT(TAXSCF): *(X5315=2))) +MAX(0,(X6469 MPRINT(ACONV): *((X6470=2)*52.18+(X6470=3)*26.09+(X6470=4)*12+(X6470=5)*4+(X6470=6)+(X6470=8)+ (X6470=11)*2+(X6470=12)*6+(X6470=31)*24+(X6470=14)+(X6470=22)) MPRINT(TAXSCF): *(X5323=2)))+MAX(0,(X6474 MPRINT(ACONV): *((X6475=2)*52.18+(X6475=3)*26.09+(X6475=4)*12+(X6475=5)*4+(X6475=6)+(X6475=8)+ (X6475=11)*2+(X6475=12)*6+(X6475=31)*24+(X6475=14)+(X6475=22)) MPRINT(TAXSCF): *(X5331=2))) +MAX(0,(X6479 MPRINT(ACONV): *((X6480=2)*52.18+(X6480=3)*26.09+(X6480=4)*12+(X6480=5)*4+(X6480=6)+(X6480=8)+ (X6480=11)*2+(X6480=12)*6+(X6480=31)*24+(X6480=14)+(X6480=22)) MPRINT(TAXSCF): *(X5415=2)))+MAX(0,(X6965 MPRINT(ACONV): *((X6966=2)*52.18+(X6966=3)*26.09+(X6966=4)*12+(X6966=5)*4+(X6966=6)+(X6966=8)+ (X6966=11)*2+(X6966=12)*6+(X6966=31)*24+(X6966=14)+(X6966=22)) 165 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): *(X5606=2))) +MAX(0,(X6971 MPRINT(ACONV): *((X6972=2)*52.18+(X6972=3)*26.09+(X6972=4)*12+(X6972=5)*4+(X6972=6)+(X6972=8)+ (X6972=11)*2+(X6972=12)*6+(X6972=31)*24+(X6972=14)+(X6972=22)) MPRINT(TAXSCF): *(X5614=2)))+MAX(0,(X6977 MPRINT(ACONV): *((X6978=2)*52.18+(X6978=3)*26.09+(X6978=4)*12+(X6978=5)*4+(X6978=6)+(X6978=8)+ (X6978=11)*2+(X6978=12)*6+(X6978=31)*24+(X6978=14)+(X6978=22)) MPRINT(TAXSCF): *(X5622=2))) +MAX(0,(X6983 MPRINT(ACONV): *((X6984=2)*52.18+(X6984=3)*26.09+(X6984=4)*12+(X6984=5)*4+(X6984=6)+(X6984=8)+ (X6984=11)*2+(X6984=12)*6+(X6984=31)*24+(X6984=14)+(X6984=22)) MPRINT(TAXSCF): *(X5630=2)))+(X5724)*(X5725=11)*.5; MPRINT(TAXSCF): * For new tax units need to split up income and determine which new tax unit is assigned which deductions and exemptions. Also need to zero out any variables not relevant to the new tax unit (ex. spouses wages); MPRINT(TAXSCF): IF TAXUNIT IN(1 2) THEN DO; MPRINT(TAXSCF): * age; MPRINT(TAXSCF): IF (TAXUNIT=1) THEN SPAGE=0; MPRINT(TAXSCF): * wages; MPRINT(TAXSCF): IF (TAXUNIT=1 & (R_LABORINC+SP_LABORINC>0)) THEN WSINCOME=MAX(0,X5702)*(R_LABORINC/(R_LABORINC+SP_LABORINC))*(R_LABORINC>0); MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & (R_LABORINC+SP_LABORINC>0)) THEN WSINCOME=MAX(0,X5702)*(SP_LABORINC/(R_LABORINC+SP_LABORINC))*(SP_LABORINC>0); MPRINT(TAXSCF): ELSE WSINCOME=MAX(0,X5702)*.5; MPRINT(TAXSCF): WSINCSP=0; MPRINT(TAXSCF): * business income; MPRINT(TAXSCF): R_SOLEPROP=(X4106 IN(2 3 4) | (X3113=1 & X3119=2) | (X3213=1 & X3219=2)); MPRINT(TAXSCF): SP_SOLEPROP=(X4706 IN(2 3 4) | (X3114=1 & X3119=2) | (X3214=1 & X3219=2)); MPRINT(TAXSCF): IF (TAXUNIT=1 & (R_BUSINC+SP_BUSINC>0) & (R_SOLEPROP=1 | SP_SOLEPROP=1)) THEN DO; MPRINT(TAXSCF): IF (R_SOLEPROP=1 & SP_SOLEPROP=1) THEN TBUSINC=X5704*(R_BUSINC/(R_BUSINC+SP_BUSINC))*(R_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=1 & SP_SOLEPROP=0) THEN TBUSINC=X5704; MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=0 & SP_SOLEPROP=1) THEN TBUSINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & (R_BUSINC+SP_BUSINC>0) & (R_SOLEPROP=1 | SP_SOLEPROP=1)) THEN DO; MPRINT(TAXSCF): IF (R_SOLEPROP=1 & SP_SOLEPROP=1) THEN TBUSINC=X5704*(SP_BUSINC/(R_BUSINC+SP_BUSINC))*(SP_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=0 & SP_SOLEPROP=1) THEN TBUSINC=X5704; MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=1 & SP_SOLEPROP=0) THEN TBUSINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE TBUSINC=X5704*.5; MPRINT(TAXSCF): * interest, dividends, and capital gains - just split 50-50; MPRINT(TAXSCF): NTAXINC= MAX(0,X5706)*.5; MPRINT(TAXSCF): INTINC= MAX(0,X5708)*.5; MPRINT(TAXSCF): DIVINC= MAX(0,X5710)*.5; MPRINT(TAXSCF): IF X5712=-1 THEN CAPGLINC=0; MPRINT(TAXSCF): ELSE CAPGLINC=X5712*.5; MPRINT(TAXSCF): * rent, royalties, partnership and scorp income; MPRINT(TAXSCF): R_PARTNER_SCORP=(X4106 IN(2 3 4) | (X3113=1 & X3119 IN(1 3 6 11 12 15)) | (X3213=1 & X3219 IN(1 3 6 11 12 15))); MPRINT(TAXSCF): SP_PARTNER_SCORP=(X4106 IN(2 3 4) | (X3114=1 & X3119 IN(1 3 6 11 12 15)) | (X3214=1 & X3219 IN(1 3 6 11 12 15))); MPRINT(TAXSCF): IF (TAXUNIT=1 & (R_BUSINC+SP_BUSINC>0) & (R_PARTNER_SCORP=1 | SP_PARTNER_SCORP=1)) THEN DO; MPRINT(TAXSCF): IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=1) THEN RENTINC=X5714*(R_BUSINC/(R_BUSINC+SP_BUSINC))*(R_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=0) THEN RENTINC=X5714; MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=0 & SP_PARTNER_SCORP=1) THEN RENTINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & (R_BUSINC+SP_BUSINC>0) & (R_PARTNER_SCORP=1 | SP_PARTNER_SCORP=1)) THEN DO; MPRINT(TAXSCF): IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=1) THEN RENTINC=X5714*(SP_BUSINC/(R_BUSINC+SP_BUSINC))*(SP_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=0 & SP_PARTNER_SCORP=1) THEN RENTINC=X5714; MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=0) THEN RENTINC=0; 166 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE RENTINC=X5714*.5; MPRINT(TAXSCF): * unemployment income, no questions about unemployed in past 12 months prior to 1998; MPRINT(TAXSCF): IF (TAXUNIT=1) THEN DO; MPRINT(TAXSCF): IF (X6780=1) THEN UNEMPINC=MAX(0,X5716)*(X6784 IN(0 5))+MAX(0,X5716)*(X6784=1)*.5; MPRINT(TAXSCF): ELSE IF (X6780=5 & X6784=1) THEN UNEMPINC=0; MPRINT(TAXSCF): ELSE UNEMPINC=MAX(0,X5716)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2) THEN DO; MPRINT(TAXSCF): IF (X6784=1) THEN UNEMPINC=MAX(0,X5716)*(X6780 IN(0 5))+MAX(0,X5716)*(X6780=1)*.5; MPRINT(TAXSCF): ELSE IF (X6784=5 & X6780=1) THEN UNEMPINC=0; MPRINT(TAXSCF): ELSE UNEMPINC=MAX(0,X5716)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * child support and alimony income; MPRINT(TAXSCF): IF (TAXUNIT=1 & X7377=2) THEN DO; MPRINT(TAXSCF): CHSPALINC=MAX(0,X5718)*(X7392^=2)+MAX(0,X5718)*(X7392=2)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & X7392=2) THEN DO; MPRINT(TAXSCF): CHSPALINC=MAX(0,X5718)*(X7377^=2)+MAX(0,X5718)*(X7377=2)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE CHSPALINC=MAX(0,X5718)*.5; MPRINT(TAXSCF): * government transfers, split 50/50; MPRINT(TAXSCF): AFDCINC=MAX(0,X5720)*.5; MPRINT(TAXSCF): * other income, split 50/50 - remove other income that is non-taxable, such as scholarships/grants, inheritances/gifts/, support from family or others, also remove IRA/Keogh income; MPRINT(TAXSCF): * special fix for 1992, removing other income coded 14, repayment of debts, it appears the total amount of the debt was reported, not just the interest on the debt; MPRINT(TAXSCF): OTHINC= (X5724)*(X5725 NOT IN(3 11 12 13 28))*.5+(X5726)*(X5727 NOT IN(3 11 12 13 28))*.5; MPRINT(TAXSCF): * social security and pension income, adding in withdrawals from IRA/Keogh/401ks; MPRINT(TAXSCF): R_GSSINC=MAX(0,(X5306 MPRINT(ACONV): *((X5307=2)*52.18+(X5307=3)*26.09+(X5307=4)*12+(X5307=5)*4+(X5307=6)+(X5307=8)+ (X5307=11)*2+(X5307=12)*6+(X5307=31)*24+(X5307=14)+(X5307=22)) MPRINT(TAXSCF): *(X5305>=1))); MPRINT(TAXSCF): SP_GSSINC=MAX(0,(X5311 MPRINT(ACONV): *((X5312=2)*52.18+(X5312=3)*26.09+(X5312=4)*12+(X5312=5)*4+(X5312=6)+(X5312=8)+ (X5312=11)*2+(X5312=12)*6+(X5312=31)*24+(X5312=14)+(X5312=22)) MPRINT(TAXSCF): *(X5310>=1))); MPRINT(TAXSCF): T_GSSINC=MAX(0,((X5306 MPRINT(ACONV): *((X5307=2)*52.18+(X5307=3)*26.09+(X5307=4)*12+(X5307=5)*4+(X5307=6)+(X5307=8)+ (X5307=11)*2+(X5307=12)*6+(X5307=31)*24+(X5307=14)+(X5307=22)) MPRINT(TAXSCF): *(X5305>=1))+(X5311 MPRINT(ACONV): *((X5312=2)*52.18+(X5312=3)*26.09+(X5312=4)*12+(X5312=5)*4+(X5312=6)+(X5312=8)+ (X5312=11)*2+(X5312=12)*6+(X5312=31)*24+(X5312=14)+(X5312=22)) MPRINT(TAXSCF): *(X5310>=1)))); MPRINT(TAXSCF): NOSS_X5722=MAX(0,(X5722-T_GSSINC)); MPRINT(TAXSCF): IF (TAXUNIT=1) THEN DO; MPRINT(TAXSCF): IF (R_REGPEN > 0) THEN PENINC=NOSS_X5722*(R_REGPEN/(R_REGPEN+SP_REGPEN))+R_WITHDRAW; MPRINT(TAXSCF): ELSE IF (R_REGPEN=0 & R_WITHDRAW > 0) THEN PENINC=R_WITHDRAW; MPRINT(TAXSCF): ELSE IF (R_REGPEN=0 & R_WITHDRAW=0 & SP_REGPEN > 0) THEN PENINC=0; MPRINT(TAXSCF): ELSE IF (R_REGPEN=0 & R_WITHDRAW=0 & SP_REGPEN=0) THEN PENINC=NOSS_X5722*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2) THEN DO; MPRINT(TAXSCF): IF (SP_REGPEN > 0) THEN PENINC=NOSS_X5722*(SP_REGPEN/(R_REGPEN+SP_REGPEN))+SP_WITHDRAW; MPRINT(TAXSCF): ELSE IF (SP_REGPEN=0 & SP_WITHDRAW > 0) THEN PENINC=SP_WITHDRAW; MPRINT(TAXSCF): ELSE IF (SP_REGPEN=0 & SP_WITHDRAW=0 & R_REGPEN > 0) THEN PENINC=0; MPRINT(TAXSCF): ELSE IF (SP_REGPEN=0 & SP_WITHDRAW=0 & R_REGPEN=0) THEN PENINC=NOSS_X5722*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): GSSINC=MAX(0,R_GSSINC)*(TAXUNIT=1)+MAX(0,SP_GSSINC)*(TAXUNIT=2); 167 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; MPRINT(TAXSCF): NONTAX=NTAXINC+AFDCINC; MPRINT(TAXSCF): RENT=MAX(0,(X602 MPRINT(ACONV): *((X603=2)*52.18+(X603=3)*26.09+(X603=4)*12+(X603=5)*4+(X603=6)+(X603=8)+ (X603=11)*2+(X603=12)*6+(X603=31)*24+(X603=14)+(X603=22)) MPRINT(TAXSCF): ),(X612 MPRINT(ACONV): *((X613=2)*52.18+(X613=3)*26.09+(X613=4)*12+(X613=5)*4+(X613=6)+(X613=8)+ (X613=11)*2+(X613=12)*6+(X613=31)*24+(X613=14)+(X613=22)) MPRINT(TAXSCF): ),(X619 MPRINT(ACONV): *((X620=2)*52.18+(X620=3)*26.09+(X620=4)*12+(X620=5)*4+(X620=6)+(X620=8)+ (X620=11)*2+(X620=12)*6+(X620=31)*24+(X620=14)+(X620=22)) MPRINT(TAXSCF): ), (X708 MPRINT(ACONV): *((X709=2)*52.18+(X709=3)*26.09+(X709=4)*12+(X709=5)*4+(X709=6)+(X709=8)+ (X709=11)*2+(X709=12)*6+(X709=31)*24+(X709=14)+(X709=22)) MPRINT(TAXSCF): ))*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TAXUNIT=0 THEN DO; MPRINT(TAXSCF): R_SOLEPROP=(X4106 IN(2 3 4) | (X3113=1 & X3119=2) | (X3213=1 & X3219=2)); MPRINT(TAXSCF): SP_SOLEPROP=(X4706 IN(2 3 4) | (X3114=1 & X3119=2) | (X3214=1 & X3219=2)); MPRINT(TAXSCF): * Split wages across primary and secondary earner for married filing jointly households; MPRINT(TAXSCF): IF FILESTAT^=2 THEN DO; MPRINT(TAXSCF): WSINCOME=MAX(0,X5702); MPRINT(TAXSCF): WSINCSP=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF FILESTAT=2 THEN DO; MPRINT(TAXSCF): IF ((R_LABORINC > 0 & SP_LABORINC=0) | (R_LABORINC=0 & SP_LABORINC > 0) | (R_LABORINC=0 & SP_LABORINC=0)) THEN DO; MPRINT(TAXSCF): WSINCOME=MAX(0,X5702); MPRINT(TAXSCF): WSINCSP=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (R_LABORINC > 0 & SP_LABORINC > 0) THEN DO; MPRINT(TAXSCF): WSINCOME=MAX(0,X5702)*(R_LABORINC/(R_LABORINC+SP_LABORINC)); MPRINT(TAXSCF): WSINCSP=MAX(0,X5702)*(SP_LABORINC/(R_LABORINC+SP_LABORINC)); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TBUSINC = X5704; MPRINT(TAXSCF): NTAXINC= MAX(0,X5706); MPRINT(TAXSCF): INTINC= MAX(0,X5708); MPRINT(TAXSCF): DIVINC= MAX(0,X5710); MPRINT(TAXSCF): IF X5712=-1 THEN CAPGLINC=0; MPRINT(TAXSCF): ELSE CAPGLINC=X5712; MPRINT(TAXSCF): RENTINC= X5714; MPRINT(TAXSCF): UNEMPINC = MAX(0,X5716); MPRINT(TAXSCF): CHSPALINC=MAX(0,X5718); MPRINT(TAXSCF): AFDCINC = MAX(0,X5720); MPRINT(TAXSCF): * Starting in 2004, IRA/Keogh/401K type income is not reported in other income, instead withdrawals are reported separately during the questions about the assets, so need to add the withdrawals to pension income. There may be a few withdrawals still reported as other income if the asset account was closed or emptied out during the year prior to the survey.; MPRINT(TAXSCF): * also remove other income that is non-taxable, such as scholarships/grants, inheritances/gifts/, support from family or others; MPRINT(TAXSCF): * special fix for 1992, removing other income coded 14, repayment of debts, it appears the total amount of the debt was report, not just the interest on the debt; MPRINT(TAXSCF): OTHINC= (X5724)*(X5725 NOT IN(3 11 12 13 28))+(X5726)*(X5727 NOT IN(3 11 12 13 28)); MPRINT(TAXSCF): GSSINC=MAX(0,((X5306 MPRINT(ACONV): *((X5307=2)*52.18+(X5307=3)*26.09+(X5307=4)*12+(X5307=5)*4+(X5307=6)+(X5307=8)+ (X5307=11)*2+(X5307=12)*6+(X5307=31)*24+(X5307=14)+(X5307=22)) MPRINT(TAXSCF): *(X5305>=1))+(X5311 168 The SAS System 13:32 Friday, January 29, 2021 MPRINT(ACONV): *((X5312=2)*52.18+(X5312=3)*26.09+(X5312=4)*12+(X5312=5)*4+(X5312=6)+(X5312=8)+ (X5312=11)*2+(X5312=12)*6+(X5312=31)*24+(X5312=14)+(X5312=22)) MPRINT(TAXSCF): *(X5310>=1)))); MPRINT(TAXSCF): IF GSSINC=0 THEN PENINC= MAX(0,X5722)+R_WITHDRAW+SP_WITHDRAW; MPRINT(TAXSCF): ELSE IF (GSSINC > 0) THEN PENINC=MAX(0,(X5722-GSSINC)) +R_WITHDRAW+SP_WITHDRAW; MPRINT(TAXSCF): OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; MPRINT(TAXSCF): NONTAX=NTAXINC+AFDCINC; MPRINT(TAXSCF): RENT=MAX(0,(X602 MPRINT(ACONV): *((X603=2)*52.18+(X603=3)*26.09+(X603=4)*12+(X603=5)*4+(X603=6)+(X603=8)+ (X603=11)*2+(X603=12)*6+(X603=31)*24+(X603=14)+(X603=22)) MPRINT(TAXSCF): ),(X612 MPRINT(ACONV): *((X613=2)*52.18+(X613=3)*26.09+(X613=4)*12+(X613=5)*4+(X613=6)+(X613=8)+ (X613=11)*2+(X613=12)*6+(X613=31)*24+(X613=14)+(X613=22)) MPRINT(TAXSCF): ),(X619 MPRINT(ACONV): *((X620=2)*52.18+(X620=3)*26.09+(X620=4)*12+(X620=5)*4+(X620=6)+(X620=8)+ (X620=11)*2+(X620=12)*6+(X620=31)*24+(X620=14)+(X620=22)) MPRINT(TAXSCF): ), (X708 MPRINT(ACONV): *((X709=2)*52.18+(X709=3)*26.09+(X709=4)*12+(X709=5)*4+(X709=6)+(X709=8)+ (X709=11)*2+(X709=12)*6+(X709=31)*24+(X709=14)+(X709=22)) MPRINT(TAXSCF): )); MPRINT(TAXSCF): END; MPRINT(TAXSCF): * AGI - note that starting in 2010, AGI questions no longer asked, so using total income minus non-taxable income plus IRA/401k withdrawals as a proxy. No information on adjustments to AGI; MPRINT(TAXSCF): AGI=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC+UNEMPINC+CHSPALINC+OTHINC+PENINC+GSSINC; MPRINT(TAXSCF): IF AGI=-1 THEN AGI=0; MPRINT(TAXSCF): AGIGE50K=(AGI>=50000); MPRINT(TAXSCF): AGICL=1*(AGI < 50000)+2*(50000 <= AGI < 100000)+3*(AGI >= 100000); MPRINT(TAXSCF): * For allocating itemized deductions - mortgage interest, investment interest expense, property taxes, and charitable contributions - between new tax units, assume tax unit with higher income assigned all itemized deductions. Creating a flag here for use in computing deductions later in the program. Using wages, business, and pension income as income measure (all other income components are split 50/50 between the new tax units).; MPRINT(TAXSCF): IF (TAXUNIT IN(1 2)) THEN DO; MPRINT(TAXSCF): R_TINCOME=R_LABORINC+R_BUSINC+R_REGPEN+R_WITHDRAW; MPRINT(TAXSCF): SP_TINCOME=SP_LABORINC+SP_BUSINC+SP_REGPEN+SP_WITHDRAW; MPRINT(TAXSCF): ITEMDEDCT_FLAG=(TAXUNIT=1 & R_TINCOME >= SP_TINCOME) +(TAXUNIT=2 & SP_TINCOME > R_TINCOME); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TAXUNIT=0 THEN ITEMDEDCT_FLAG=1; MPRINT(TAXSCF): * Set personal exemption to one for split households, divide kids among split households, if one, give to both tax units, if even number, split evenly between tax units, if odd number, give more to higher income tax unit; MPRINT(TAXSCF): IF TAXUNIT IN(1 2) THEN DO; MPRINT(TAXSCF): PERSEXP=1; MPRINT(TAXSCF): IF KIDS>1 THEN DO; MPRINT(TAXSCF): IF (KIDSU13>0 & MOD(KIDSU13,2)=0) THEN KIDSU13=KIDSU13/2; MPRINT(TAXSCF): ELSE IF (KIDSU13>0 & MOD(KIDSU13,2)^=0) THEN DO; MPRINT(TAXSCF): KIDSU13=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU13/2,1))+ (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU13/2)-.5); MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (KIDSU17>0 & MOD(KIDSU17,2)=0) THEN KIDSU17=KIDSU17/2; MPRINT(TAXSCF): ELSE IF (KIDSU17>0 & MOD(KIDSU17,2)^=0) THEN DO; MPRINT(TAXSCF): KIDSU17=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU17/2,1))+ (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU17/2)-.5); MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (KIDSU18>0 & MOD(KIDSU18,2)=0) THEN KIDSU18=KIDSU18/2; MPRINT(TAXSCF): ELSE IF (KIDSU18>0 & MOD(KIDSU18,2)^=0) THEN DO; MPRINT(TAXSCF): KIDSU18=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU18/2,1))+ (TAXUNIT=1 & 169 The SAS System 13:32 Friday, January 29, 2021 R_TINCOME=SP_TINCOME)*((KIDSU18/2)-.5); MPRINT(TAXSCF): END; MPRINT(TAXSCF): KIDS=KIDSU13+KIDSU17+KIDSU18; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF PERSEXP=1 & MARRIED=1 THEN FILESTAT=3; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS=0 & MARRIED=0 THEN FILESTAT=1; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS>0 & MARRIED=0 THEN FILESTAT=4; MPRINT(TAXSCF): TOTEXPT=PERSEXP+KIDS; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF FILESTAT=0 THEN PUT "MISSING FILING STATUS " Y1= X5744= X5746= TAXUNIT= MARRIED= KIDS= PERSEXP=; MPRINT(TAXSCF): RUN; NOTE: There were 33058 observations read from the data set WORK.SCF. NOTE: The data set WORK.SCF has 33058 observations and 5475 variables. NOTE: DATA statement used (Total process time): real time 0.79 seconds cpu time 0.79 seconds MPRINT(TAXSCF): * Create tax units based on NPEU members. If there are multiple NPEU members, need to allocate income, assets, and debt across the members; MPRINT(TAXSCF): DATA TEMP NPEU; MPRINT(TAXSCF): SET SCF(WHERE=(TAXUNIT IN(0 1) & X7050 >=1)); MPRINT(TAXSCF): file "null.txt"; MPRINT(TAXSCF): TAXUNIT=2; MPRINT(TAXSCF): ARRAY NPEUAGE {*} X110 X116 X122 X128 X134 X204 X210 X216 X222 X228; MPRINT(TAXSCF): ARRAY LIVEWITH {*} X112 X118 X124 X130 X136 X206 X212 X218 X224 X230; MPRINT(TAXSCF): ARRAY FINDEP {*} X113 X119 X125 X131 X137 X207 X213 X219 X225 X231; MPRINT(TAXSCF): DO I=1 TO DIM(LIVEWITH); MPRINT(TAXSCF): IF LIVEWITH{I} IN(1 2 3 4) & FINDEP{I} IN(2 3 4 5) THEN DO; MPRINT(TAXSCF): TAXUNIT=TAXUNIT+1; MPRINT(TAXSCF): TUAGE=NPEUAGE{I}; MPRINT(TAXSCF): SPAGE=0; MPRINT(TAXSCF): OUTPUT NPEU; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): RUN; NOTE: The file "null.txt" is: Filename=/disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code/null.txt, Owner Name=taxsim,Group Name=taxsim, Access Permission=-rw-r--r--, Last Modified=29Jan2021:13:33:20 NOTE: 0 records were written to the file "null.txt". NOTE: There were 3100 observations read from the data set WORK.SCF. WHERE TAXUNIT in (0, 1) and (X7050>=1); NOTE: The data set WORK.TEMP has 0 observations and 5475 variables. NOTE: The data set WORK.NPEU has 4265 observations and 5475 variables. NOTE: DATA statement used (Total process time): real time 0.23 seconds cpu time 0.20 seconds MPRINT(TAXSCF): DATA NPEU; MPRINT(TAXSCF): SET NPEU; MPRINT(TAXSCF): ARRAY INCTYPES {*} WSINCOME WSINCSP TBUSINC INTINC NTAXINC DIVINC RENTINC UNEMPINC AFDCINC GSSINC 170 The SAS System 13:32 Friday, January 29, 2021 PENINC OTHINC CAPGLINC; MPRINT(TAXSCF): DO I=1 TO DIM(INCTYPES); MPRINT(TAXSCF): INCTYPES{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Allocate NPEU wage income across all NPEU members less than 70 years old. If only other type of income is Social Security, allocate amount across NPEU members age 62 or more. Otherwise, allocate total amount of nonwage income divided by the number of other types of income to each type of income equally to each NPEU member; MPRINT(TAXSCF): NUMU70=(0=62 & X113=5)+(X116>=62 & X119=5)+(X122>=62 & X125=5) +(X128>=62 & X131=5)+(X134>=62 & X137=5)+(X204>=62 & X207=5) +(X210>=62 & X213=5)+(X216>=62 & X219=5)+(X222>=62 & X225=5) +(X228>=62 & X231=5); MPRINT(TAXSCF): NUMINCTYPES=(X6406=1)+(X6407=1)+(X6408=1)+(X6409=1)+(X6410=1)+(X6411=1) +(X6412=1)+(X6413=1)+(X6414 > 5); MPRINT(TAXSCF): IF (NUMU70 > 0) THEN WSINCOME=(MAX(0,X6403)/NUMU70)*(TUAGE < 70); MPRINT(TAXSCF): ELSE WSINCOME=(MAX(0,X6403)/X7050); MPRINT(TAXSCF): IF (X6415 > 0 & NUMINCTYPES > 0) THEN DO; MPRINT(TAXSCF): IF (NUMGE62 > 0) THEN GSSINC=(X6406=1)*((MAX(0,X6415)/(NUMINCTYPES))/NUMGE62)*(TUAGE>=62); MPRINT(TAXSCF): ELSE GSSINC=(X6406=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): TBUSINC=(X6412=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): INTINC=(X6410=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): DIVINC=(X6411=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): RENTINC=(X6413=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): PENINC=(X6407=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050) +(X6408=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): AFDCINC=(X6409=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): CAPGLINC=(X6414 IN(13))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): UNEMPINC=(X6414 IN(10))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): OTHINC=(X6414 IN(11 12 15))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): END; MPRINT(TAXSCF): OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; MPRINT(TAXSCF): NONTAX=NTAXINC+AFDCINC; MPRINT(TAXSCF): * All NPEU tax units take the standard deduction, have one personal exemption, and have filing status of single; MPRINT(TAXSCF): ITEMDEDCT_FLAG=0; MPRINT(TAXSCF): PERSEXP=1; MPRINT(TAXSCF): TOTEXPT=1; MPRINT(TAXSCF): KIDS=0; MPRINT(TAXSCF): KIDSU13=0; MPRINT(TAXSCF): KIDSU17=0; MPRINT(TAXSCF): KIDSU18=0; MPRINT(TAXSCF): FILESTAT=1; MPRINT(TAXSCF): AGI=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC+UNEMPINC+CHSPALINC+OTHINC+PENINC+GSSINC; MPRINT(TAXSCF): IF AGI=-1 THEN AGI=0; MPRINT(TAXSCF): AGIGE50K=(AGI>=50000); MPRINT(TAXSCF): AGICL=1*(AGI < 50000)+2*(50000 <= AGI < 100000)+3*(AGI >= 100000); MPRINT(TAXSCF): RUN; NOTE: There were 4265 observations read from the data set WORK.NPEU. NOTE: The data set WORK.NPEU has 4265 observations and 5478 variables. NOTE: DATA statement used (Total process time): real time 0.14 seconds cpu time 0.12 seconds MPRINT(TAXSCF): * Add NPEU tax units; MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF NPEU; MPRINT(TAXSCF): RUN; 171 The SAS System 13:32 Friday, January 29, 2021 NOTE: There were 33058 observations read from the data set WORK.SCF. NOTE: There were 4265 observations read from the data set WORK.NPEU. NOTE: The data set WORK.SCF has 37323 observations and 5478 variables. NOTE: DATA statement used (Total process time): real time 0.77 seconds cpu time 0.77 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): ************Itemized deductions; MPRINT(TAXSCF): IF ITEMDEDCT_FLAG=1 THEN DO; MPRINT(TAXSCF): ************Mortgage interest deduction; MPRINT(TAXSCF): * Convert real estate taxes on primary residence into a yearly amount; MPRINT(TAXSCF): RESTAXM1=0; MPRINT(TAXSCF): IF (X721 > 0) THEN DO; MPRINT(TAXSCF): RESTAXM1=X721 MPRINT(ACONV): *((X722=2)*52.18+(X722=3)*26.09+(X722=4)*12+(X722=5)*4+(X722=6)+(X722=8)+ (X722=11)*2+(X722=12)*6+(X722=31)*24+(X722=14)+(X722=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Create arrays for various mortgage loan components; MPRINT(TAXSCF): ARRAY TLMTH {*} TLMTHM1 TLMTHM2 TLMTHM3; MPRINT(TAXSCF): ARRAY CMOPAY {*} CMOPAYM1 CMOPAYM2 CMOPAYM3; MPRINT(TAXSCF): ARRAY PAYLFT {*} PAYLFTM1 PAYLFTM2 PAYLFTM3; MPRINT(TAXSCF): ARRAY AMTOWE {*} AMTOWEM1 AMTOWEM2 AMTOWEM3; MPRINT(TAXSCF): ARRAY AMTOWE_1 {*} AMTOWE_1M1 AMTOWE_1M2 AMTOWE_1M3; MPRINT(TAXSCF): ARRAY AINTDCT {*} AINTDCTM1 AINTDCTM2 AINTDCTM3; MPRINT(TAXSCF): ARRAY LNAGE {*} LNAGEM1 LNAGEM2 LNAGEM3; MPRINT(TAXSCF): ARRAY CURBAL {*} CURBALM1 CURBALM2 CURBALM3; MPRINT(TAXSCF): ARRAY CURBAL_1 {*} CURBAL_1M1 CURBAL_1M2 CURBAL_1M3; MPRINT(TAXSCF): ARRAY CINTDCT {*} CINTDCTM1 CINTDCTM2 CINTDCTM3; MPRINT(TAXSCF): ARRAY DCTDIFF {*} DCTDIFFM1 DCTDIFFM2 DCTDIFFM3; MPRINT(TAXSCF): ARRAY SINTDCT {*} SINTDCTM1 SINTDCTM2 SINTDCTM3; MPRINT(TAXSCF): ARRAY AVINTDCT {*} AVINTDCTM1 AVINTDCTM2 AVINTDCTM3; MPRINT(TAXSCF): ARRAY NMPMT {*} X807 X907 X1007; MPRINT(TAXSCF): ARRAY NMYR {*} X806 X906 X1006; MPRINT(TAXSCF): ARRAY REGPAYF {*} X809 X909 X1009; MPRINT(TAXSCF): ARRAY REGPAY {*} X808 X908 X1008; MPRINT(TAXSCF): ARRAY TYPAYF {*} X814 X914 X1014; MPRINT(TAXSCF): ARRAY TYPAY {*} X813 X913 X1013; MPRINT(TAXSCF): ARRAY LNSTMN {*} X801 X901 X1001; MPRINT(TAXSCF): ARRAY LNSTYR {*} X802 X902 X1002; MPRINT(TAXSCF): ARRAY HBALLN {*} X811 X911 X1011; MPRINT(TAXSCF): ARRAY BALLN {*} X812 X912 X1012; MPRINT(TAXSCF): ARRAY HAVELN {*} X723 X830 X931; MPRINT(TAXSCF): ARRAY AMTBORR {*} X804 X904 X1004; MPRINT(TAXSCF): ARRAY JAMTBORR {*} J804 J904 J1004; MPRINT(TAXSCF): ARRAY AMTOUT {*} X805 X905 X1005; MPRINT(TAXSCF): ARRAY JAMTOUT {*} J805 J905 J1005; MPRINT(TAXSCF): ARRAY INTRATE {*} X816 X916 X1016; MPRINT(TAXSCF): ARRAY ONSCHED {*} X7571 X7570 X7569; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTH); MPRINT(TAXSCF): TLMTH{I}=0; MPRINT(TAXSCF): CMOPAY{I}=0; MPRINT(TAXSCF): PAYLFT{I}=0; 172 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): AMTOWE{I}=0; MPRINT(TAXSCF): AMTOWE_1{I}=0; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): LNAGE{I}=0; MPRINT(TAXSCF): CURBAL{I}=0; MPRINT(TAXSCF): CURBAL_1{I}=0; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): DCTDIFF{I}=0; MPRINT(TAXSCF): SINTDCT{I}=0; MPRINT(TAXSCF): AVINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): NUMORT=(X723=1)+(X830=1)+(X931=1); MPRINT(TAXSCF): TOTAMTOUTM=0; MPRINT(TAXSCF): TOTDEDCTM=0; MPRINT(TAXSCF): GRFAMTOUTM=0; MPRINT(TAXSCF): A17AMTOUTM=0; MPRINT(TAXSCF): HAAMTOUTM=0; MPRINT(TAXSCF): DO I=1 TO DIM(NMPMT); MPRINT(TERMCON): IF (NMYR{I}=0 & NMPMT{I}=0) THEN DO; MPRINT(TERMCON): TLMTH{I}=0; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYR{I}^=0|NMPMT{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYR{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYR{I}=-1) THEN DO; MPRINT(TERMCON): TLMTH{I}=NMYR{I}; MPRINT(TERMCON): IF (NMPMT{I}=0) THEN DO; MPRINT(TERMCON): NMPMT{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYR{I}>0) THEN DO; MPRINT(TERMCON): TLMTH{I}=NMYR{I}*12; MPRINT(TERMCON): IF (NMPMT{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYF{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMT{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYF{I}=-7) THEN DO; MPRINT(TERMCON): NMPMT{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYF{I}=8) THEN DO; MPRINT(TERMCON): NMPMT{I}=1; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYF{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYF{I}=1) THEN NMPMT{I}=TLMTH{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=2) THEN NMPMT{I}=TLMTH{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=3) THEN NMPMT{I}=TLMTH{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=4) THEN NMPMT{I}=TLMTH{I}; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=5) THEN NMPMT{I}=TLMTH{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=6) THEN NMPMT{I}=TLMTH{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=20) THEN NMPMT{I}=TLMTH{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=21) THEN NMPMT{I}=TLMTH{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=11) THEN NMPMT{I}=TLMTH{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=12) THEN NMPMT{I}=TLMTH{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=23) THEN NMPMT{I}=TLMTH{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=24) THEN NMPMT{I}=TLMTH{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=25) THEN NMPMT{I}=TLMTH{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=31) THEN NMPMT{I}=TLMTH{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=18) THEN NMPMT{I}=TLMTH{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=0) THEN NMPMT{I}=0; 173 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (REGPAYF{I}>.Z & REGPAYF{I}^=-1 & REGPAYF{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMT{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTH{I}= REGPAYF{I}= NMPMT{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTH{I}>.Z & TLMTH{I}<-2) THEN DO; MPRINT(MOCONV): NMPMT{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTH{I}= REGPAYF{I}= NMPMT{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTH{I}<=.Z) THEN NMPMT{I}=TLMTH{I}; MPRINT(MOCONV): ELSE IF (TLMTH{I}^=-1 & TLMTH{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYF{I}= TLMTH{I}= "SETTING AMT=."; MPRINT(MOCONV): NMPMT{I}=.; MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMT{I}=-1) THEN DO; MPRINT(TERMCON): TLMTH{I}=-1; MPRINT(TERMCON): IF (NMYR{I}=0) THEN DO; MPRINT(TERMCON): NMYR{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMT{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYF{I}; MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYF{I}>0) THEN PFREQ=TYPAYF{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTH{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; MPRINT(TERMCON): TLMTH{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): IF (NMPMT{I}>0) THEN DO; MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTH{I}=NMPMT{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}))); MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12))); MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTH{I}=NMPMT{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTH{I}=NMPMT{I}*2/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTH{I}=NMPMT{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTH{I}=NMPMT{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTH{I}=NMPMT{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTH{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): TLMTH{I}=NMPMT{I}; MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMT{I}= PFREQ= TLMTH{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMT{I}>.Z & NMPMT{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTH{I}=NMPMT{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMT{I}= PFREQ= TLMTH{I}=; MPRINT(IMOCONV): END; 174 The SAS System 13:32 Friday, January 29, 2021 MPRINT(IMOCONV): ELSE IF (NMPMT{I}=0) THEN TLMTH{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMT{I}<=.Z) THEN TLMTH{I}=NMPMT{I}; MPRINT(IMOCONV): ELSE IF (NMPMT{I}^=-1 & NMPMT{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMT{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTH{I}=.; MPRINT(IMOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTH{I}>0) THEN DO; MPRINT(TERMCON): NMYR{I}=MAX(1,INT(.5+(TLMTH{I}/12))); MPRINT(TERMCON): TLMTH{I}=MAX(1,ROUND(TLMTH{I})); MPRINT(TERMCON): END; MPRINT(TERMCON): IF (NMYR{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMT{I}= NMYR{I}= TLMTH{I}= REGPAYF{I}= REGPAY{I}= TYPAYF{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAY{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYF{I}=1) THEN CMOPAY{I}=REGPAY{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=2) THEN CMOPAY{I}=REGPAY{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=3) THEN CMOPAY{I}=REGPAY{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=4) THEN CMOPAY{I}=REGPAY{I}; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=5) THEN CMOPAY{I}=REGPAY{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=6) THEN CMOPAY{I}=REGPAY{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=20) THEN CMOPAY{I}=REGPAY{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=21) THEN CMOPAY{I}=REGPAY{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=8) THEN CMOPAY{I}=REGPAY{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=11) THEN CMOPAY{I}=REGPAY{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=12) THEN CMOPAY{I}=REGPAY{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=23) THEN CMOPAY{I}=REGPAY{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=24) THEN CMOPAY{I}=REGPAY{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=25) THEN CMOPAY{I}=REGPAY{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=31) THEN CMOPAY{I}=REGPAY{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=18) THEN CMOPAY{I}=REGPAY{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=0) THEN CMOPAY{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYF{I}>.Z & REGPAYF{I}^=-1 & REGPAYF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAY{I}= REGPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAY{I}>.Z & REGPAY{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAY{I}= REGPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAY{I}<=.Z) THEN CMOPAY{I}=REGPAY{I}; MPRINT(MOCONV): ELSE IF (REGPAY{I}^=-1 & REGPAY{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYF{I}= REGPAY{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(MOCONV): IF (TYPAYF{I}=1) THEN CMOPAY{I}=TYPAY{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=2) THEN CMOPAY{I}=TYPAY{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=3) THEN CMOPAY{I}=TYPAY{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=4) THEN CMOPAY{I}=TYPAY{I}; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=5) THEN CMOPAY{I}=TYPAY{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=6) THEN CMOPAY{I}=TYPAY{I}/12; 175 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (TYPAYF{I}=20) THEN CMOPAY{I}=TYPAY{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=21) THEN CMOPAY{I}=TYPAY{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=8) THEN CMOPAY{I}=TYPAY{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=11) THEN CMOPAY{I}=TYPAY{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=12) THEN CMOPAY{I}=TYPAY{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=23) THEN CMOPAY{I}=TYPAY{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=24) THEN CMOPAY{I}=TYPAY{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=25) THEN CMOPAY{I}=TYPAY{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=31) THEN CMOPAY{I}=TYPAY{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=18) THEN CMOPAY{I}=TYPAY{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=0) THEN CMOPAY{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYF{I}>.Z & TYPAYF{I}^=-1 & TYPAYF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAY{I}= TYPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAY{I}>.Z & TYPAY{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAY{I}= TYPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAY{I}<=.Z) THEN CMOPAY{I}=TYPAY{I}; MPRINT(MOCONV): ELSE IF (TYPAY{I}^=-1 & TYPAY{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYF{I}= TYPAY{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF NMYR{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFT{I}=(TLMTH{I}-((2013-LNSTYR{I})*12)); MPRINT(TAXSCF): LNAGE{I}=TLMTH{I}-PAYLFT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFT{I}=0; MPRINT(TAXSCF): LNAGE{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): file "null.txt"; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((X723=1) & (X810 IN(1 2 3)) & TLMTHM1 > 0 & X816 > 0) THEN DO; MPRINT(TAXSCF): IF (X811=1) THEN DO; MPRINT(MORTPAY): AMOPAYM1=ROUND((MORT((X804),.,((X816/10000)/12),(TLMTHM1))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (CMOPAYM1 > AMOPAYM1) THEN CMOPAYM1=AMOPAYM1; MPRINT(TAXSCF): 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= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X811=2) THEN DO; MPRINT(TAXSCF): IF (X804 > X812) THEN ADJBORR=X804-X812; MPRINT(TAXSCF): ELSE IF (X804 < X812) THEN ADJBORR=X804; MPRINT(TAXSCF): IF ADJBORR > 0 THEN MPRINT(MORTPAY): AMOPAYM1=ROUND((MORT((ADJBORR),.,((X816/10000)/12),(TLMTHM1))),.01); 176 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (X804=X812) THEN AMOPAYM1=((X804)*(X816/10000))/12; MPRINT(TAXSCF): IF (CMOPAYM1 > AMOPAYM1) THEN CMOPAYM1=AMOPAYM1; MPRINT(TAXSCF): 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= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * 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); MPRINT(TAXSCF): * NOT INCLUDING LAND CONTRACTS; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELN); MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTDCT{I}=CMOPAY{I}*12; MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELN{I}=1 & HBALLN{I} IN(1 2) & NMYR{I} NOT IN(0 -1 -7) & INTRATE{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & PAYLFT{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAY{I} < AMTBORR{I}*.005) THEN CMOPAY{I}=MAX(REGPAY{I},TYPAY{I}); MPRINT(TAXSCF): 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})); MPRINT(TAXSCF): 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))); MPRINT(TAXSCF): IF LNSTYR{I}^=2013 THEN AINTDCT{I}=(CMOPAY{I}*12)-(AMTOWE_1{I}-AMTOWE{I}); MPRINT(TAXSCF): ELSE IF LNSTYR{I}=2013 THEN AINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTH{I} < 0 | CMOPAY{I} < 0 | PAYLFT{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWE{I}=0; MPRINT(TAXSCF): AMTOWE_1{I}=0; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & AMTBORR{I} > 0 & LNAGE{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTDCT{I}=(CMOPAY{I}*12)-(CURBAL_1{I}-CURBAL{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTH{I} < 0 | AMTBORR{I} < 0 | LNAGE{I} < 0) THEN DO; MPRINT(TAXSCF): CURBAL{I}=0; MPRINT(TAXSCF): CURBAL_1{I}=0; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUT{I} > 0 & INTRATE{I} > 0) THEN SINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): ELSE SINTDCT{I}=0; MPRINT(TAXSCF): * 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 the home was not purchased in the survey year. If the home was purchased in the survey year, set deduction to zero.; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & PAYLFT{I}=0) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=CURBAL_1{I}*(INTRATE{I}/10000); 177 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): AINTDCT{I}=CINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & LNSTYR{I}=2013 & X720=2013) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): SINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & LNSTYR{I}=2013) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTDCT{I} < 0 | CINTDCT{I} < 0) & CURBAL{I} > 0 & CURBAL_1{I} > 0) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=CURBAL_1{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): AINTDCT{I}=CINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTDCT{I} < 0 | CINTDCT{I} < 0) & (CURBAL{I} <= 0 & CURBAL_1{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCT{I} > 0 & CINTDCT{I} > 0) THEN DCTDIFF{I}=CINTDCT{I}-SINTDCT{I}; MPRINT(TAXSCF): ELSE DCTDIFF{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELN{I}=1 & (NMYR{I} IN(-1 -7) | NMPMT{I} IN(-1 -7)) & AMTOUT{I} > 0 & INTRATE{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELN{I}=1 & (INTRATE{I}=-1)) THEN DO; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): SINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest deduction; MPRINT(TAXSCF): IF ((CINTDCT{I} + AINTDCT{I} + SINTDCT{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTDCT{I}=(CINTDCT{I}+AINTDCT{I}+SINTDCT{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTDCT{I}=0; MPRINT(TAXSCF): * Constraining interest deduction amount to be no more than the reported year 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.; MPRINT(TAXSCF): IF (HAVELN{I}=1 & AVINTDCT{I} > 0 & CMOPAY{I} > 0 & (AVINTDCT{I} > CMOPAY{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTDCT{I}=CMOPAY{I}*12; MPRINT(TAXSCF): CINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): SINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELN{I}=1 & AVINTDCT{I} > 0 & AMTOUT{I} > 0 & (AVINTDCT{I} > .25*AMTOUT{I})) THEN DO; MPRINT(TAXSCF): AVINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): CINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELN{I}=1 & Y1=YY1*10+1 & AVINTDCT{I}=0 & NMYR{I}^=2013) 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}= 178 The SAS System 13:32 Friday, January 29, 2021 CINTDCT{I}= AVINTDCT{I}= DCTDIFF{I}= SINTDCT{I}= INTRATE{I}= AMTBORR{I}= JAMTBORR{I}= ONSCHED{I}= HBALLN{I}= BALLN{I}= /; MPRINT(TAXSCF): * 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; MPRINT(TAXSCF): IF (X702=1 & X714=1 & X7135=5) THEN DO; MPRINT(TAXSCF): TOTDEDCTM=TOTDEDCTM+(AVINTDCT{I}/X715)*(HAVELN{I}=1); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE TOTDEDCTM=TOTDEDCTM+AVINTDCT{I}; MPRINT(TAXSCF): * Total amount outstanding on loans; MPRINT(TAXSCF): TOTAMTOUTM=TOTAMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): * Need to divide mortgages up by date, pre 10/13/87 mortgages are considered grandfathered debt by IRS, and different limits apply to mortgages taken out after 12/15/2017; MPRINT(TAXSCF): IF ((LNSTYR{I}=1987 & LNSTMN{I} < 10) | (LNSTYR{I} < 1987)) THEN DO; MPRINT(TAXSCF): GRFAMTOUTM=GRFAMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((LNSTYR{I}=2017 & LNSTMN{I}=12) | (LNSTYR{I} > 2017)) THEN DO; MPRINT(TAXSCF): A17AMTOUTM=A17AMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((LNSTYR{I}=1987 & LNSTMN {I} >= 10) | (1987 < LNSTYR{I} < 2017) | (LNSTYR{I}=2017 & LNSTMN{I}<=11)) THEN DO; MPRINT(TAXSCF): HAAMTOUTM=HAAMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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, 3, or 4 as home acquisition debt (same as a mortgage, counts toward mortgage balance limit), while HELOCs with other use codes counted as home equity debt. Ignoring the mopup as we dont know if that LOC is secured by a home; MPRINT(TAXSCF): ARRAY CMOPAYL {*} CMOPAYL1 CMOPAYL2 CMOPAYL3; MPRINT(TAXSCF): ARRAY SINTDCTL {*} SINTDCTL1 SINTDCTL2 SINTDCTL3; MPRINT(TAXSCF): ARRAY AQDBT {*} AQDBTL1 AQDBTL2 AQDBTL3; MPRINT(TAXSCF): ARRAY AQINT {*} AQINTL1 AQINTL2 AQINTL3; MPRINT(TAXSCF): ARRAY EQDBT {*} EQDBTL1 EQDBTL2 EQDBTL3; MPRINT(TAXSCF): ARRAY SBYHOME {*} X1103 X1114 X1125; MPRINT(TAXSCF): ARRAY DOOWE {*} X1105 X1116 X1127; MPRINT(TAXSCF): ARRAY LNPURP {*} X1106 X1117 X1128; MPRINT(TAXSCF): ARRAY AMTOUTL {*} X1108 X1119 X1130; MPRINT(TAXSCF): ARRAY TYPAYL {*} X1109 X1120 X1131; MPRINT(TAXSCF): ARRAY TYPAYLF {*} X1110 X1121 X1132; MPRINT(TAXSCF): ARRAY INTRATEL {*} X1111 X1122 X1133; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): TOTAQDBTL=0; MPRINT(TAXSCF): TOTEQDBTL=0; MPRINT(TAXSCF): TOTDEDCTL=0; MPRINT(TAXSCF): TOTAQDEDCTL=0; MPRINT(TAXSCF): TOTLOCINVEX=0; MPRINT(TAXSCF): DO I=1 TO DIM(CMOPAYL); MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): AQDBT{I}=0; MPRINT(TAXSCF): AQINT{I}=0; MPRINT(TAXSCF): EQDBT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (X1101=1) THEN DO; MPRINT(TAXSCF): DO I=1 TO DIM(SBYHOME); MPRINT(TAXSCF): IF (SBYHOME{I}=1 & DOOWE{I}=1) THEN DO; MPRINT(TAXSCF): IF (TYPAYL{I} > 0) THEN DO; MPRINT(MOCONV): IF (TYPAYLF{I}=1) THEN CMOPAYL{I}=TYPAYL{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=2) THEN CMOPAYL{I}=TYPAYL{I}*52/12; 179 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=3) THEN CMOPAYL{I}=TYPAYL{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=4) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=5) THEN CMOPAYL{I}=TYPAYL{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=6) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=20) THEN CMOPAYL{I}=TYPAYL{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=21) THEN CMOPAYL{I}=TYPAYL{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=8) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=11) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=12) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=23) THEN CMOPAYL{I}=TYPAYL{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=24) THEN CMOPAYL{I}=TYPAYL{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=25) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=31) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=18) THEN CMOPAYL{I}=TYPAYL{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=0) THEN CMOPAYL{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}>.Z & TYPAYLF{I}^=-1 & TYPAYLF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}>.Z & TYPAYL{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}<=.Z) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYL{I}^=-1 & TYPAYL{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYLF{I}= TYPAYL{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TYPAYL{I} IN(0 -1 -2)) THEN DO; MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (INTRATEL{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=((INTRATEL{I}/10000)*AMTOUTL{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEL{I} IN(0 -1)) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTL{I} > 0 & CMOPAYL{I} > 0 & SINTDCTL{I} > CMOPAYL{I}*12) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=CMOPAYL{I}*12; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (LNPURP{I} IN(1 3 4)) THEN DO; MPRINT(TAXSCF): AQDBT{I}=AMTOUTL{I}; MPRINT(TAXSCF): AQINT{I}=SINTDCTL{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (LNPURP{I} NOT IN(1 3 4)) THEN DO; MPRINT(TAXSCF): EQDBT{I}=AMTOUTL{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTDEDCTL=TOTDEDCTL+SINTDCTL{I}; MPRINT(TAXSCF): TOTAQDEDCTL=TOTAQDEDCTL+AQINT{I}; MPRINT(TAXSCF): TOTAQDBTL=TOTAQDBTL+AQDBT{I}; MPRINT(TAXSCF): TOTEQDBTL=TOTEQDBTL+EQDBT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; 180 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): * Dropped third column of grid for 2010 forward; MPRINT(TAXSCF): * Create arrays for various other property loan components; MPRINT(TAXSCF): ARRAY TLMTHO {*} TLMTHO1 TLMTHO2; MPRINT(TAXSCF): ARRAY CMOPAYO {*} CMOPAYO1 CMOPAYO2; MPRINT(TAXSCF): ARRAY AMOPAYO {*} AMOPAYO1 AMOPAYO2; MPRINT(TAXSCF): ARRAY PAYLFTO {*} PAYLFTO1 PAYLFTO2; MPRINT(TAXSCF): ARRAY AMTOWEO {*} AMTOWEO1 AMTOWEO2; MPRINT(TAXSCF): ARRAY AMTOWE_1O {*} AMTOWE_1O1 AMTOWE_1O2; MPRINT(TAXSCF): ARRAY AINTDCTO {*} AINTDCTO1 AINTDCTO2; MPRINT(TAXSCF): ARRAY LNAGEO {*} LNAGEO1 LNAGEO2; MPRINT(TAXSCF): ARRAY CURBALO {*} CURBALO1 CURBALO2; MPRINT(TAXSCF): ARRAY CURBAL_1O {*} CURBAL_1O1 CURBAL_1O2; MPRINT(TAXSCF): ARRAY CINTDCTO {*} CINTDCTO1 CINTDCTO2; MPRINT(TAXSCF): ARRAY DCTDIFFO {*} DCTDIFFO1 DCTDIFFO2; MPRINT(TAXSCF): ARRAY SINTDCTO {*} SINTDCTO1 SINTDCTO2; MPRINT(TAXSCF): ARRAY AVINTDCTO {*} AVINTDCTO1 AVINTDCTO2; MPRINT(TAXSCF): ARRAY QUALPROP {*} QPROP1 QPROP2; MPRINT(TAXSCF): ARRAY QUALPINV {*} QPINV1 QPINV2; MPRINT(TAXSCF): ARRAY ADJBORRO {*} ADJBORRO1 ADJBORRO2; MPRINT(TAXSCF): ARRAY NMPMTO {*} X1717 X1817; MPRINT(TAXSCF): ARRAY NMYRO {*} X1716 X1816; MPRINT(TAXSCF): ARRAY REGPAYFO {*} X1719 X1819; MPRINT(TAXSCF): ARRAY REGPAYO {*} X1718 X1818; MPRINT(TAXSCF): ARRAY TYPAYFO {*} X1724 X1824; MPRINT(TAXSCF): ARRAY TYPAYO {*} X1723 X1823; MPRINT(TAXSCF): ARRAY LNSTMNO {*} X1712 X1812; MPRINT(TAXSCF): ARRAY LNSTYRO {*} X1713 X1813; MPRINT(TAXSCF): ARRAY HBALLNO {*} X1721 X1821; MPRINT(TAXSCF): ARRAY BALLNO {*} X1722 X1822; MPRINT(TAXSCF): ARRAY AMTBORRO {*} X1714 X1814; MPRINT(TAXSCF): ARRAY JAMTBORRO {*} J1714 J1814; MPRINT(TAXSCF): ARRAY AMTOUTO {*} X1715 X1815; MPRINT(TAXSCF): ARRAY JAMTOUTO {*} J1715 J1815; MPRINT(TAXSCF): ARRAY HAVELNO {*} X1711 X1811; MPRINT(TAXSCF): ARRAY INTRATEO {*} X1726 X1826; MPRINT(TAXSCF): ARRAY ONSCHEDO {*} X7554 X7553; MPRINT(TAXSCF): ARRAY HINCOMEO {*} X1729 X1829; MPRINT(TAXSCF): ARRAY INCOMEO {*} X1730 X1830; MPRINT(TAXSCF): ARRAY PROPTYPE {*} X1703 X1803; MPRINT(TAXSCF): ARRAY PERPROP {*} X1705 X1805; MPRINT(TAXSCF): ARRAY PROPVAL {*} X1706 X1806; MPRINT(TAXSCF): ARRAY TAXINS {*} X1720 X1820; MPRINT(TAXSCF): ARRAY PURCHYRO {*} X1708 X1808; MPRINT(TAXSCF): ARRAY LIMFLAG {*} LIMFL1 LIMFL2; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTHO); MPRINT(TAXSCF): TLMTHO{I}=0; MPRINT(TAXSCF): CMOPAYO{I}=0; MPRINT(TAXSCF): PAYLFTO{I}=0; MPRINT(TAXSCF): AMTOWEO{I}=0; MPRINT(TAXSCF): AMTOWE_1O{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): LNAGEO{I}=0; MPRINT(TAXSCF): CURBALO{I}=0; MPRINT(TAXSCF): CURBAL_1O{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): DCTDIFFO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; 181 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): AVINTDCTO{I}=0; MPRINT(TAXSCF): QUALPROP{I}=0; MPRINT(TAXSCF): QUALPINV{I}=0; MPRINT(TAXSCF): ADJBORRO{I}=0; MPRINT(TAXSCF): LIMFLAG{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTAMTOUTO=0; MPRINT(TAXSCF): TOTDEDCTO=0; MPRINT(TAXSCF): QUALOTHPROP=0; MPRINT(TAXSCF): QUALINVPROP=0; MPRINT(TAXSCF): TOTINVPDCT=0; MPRINT(TAXSCF): FMVOP=0; MPRINT(TAXSCF): DO I=1 TO DIM(NMPMTO); MPRINT(TERMCON): IF (NMYRO{I}=0 & NMPMTO{I}=0) THEN DO; MPRINT(TERMCON): TLMTHO{I}=0; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRO{I}^=0|NMPMTO{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRO{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRO{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHO{I}=NMYRO{I}; MPRINT(TERMCON): IF (NMPMTO{I}=0) THEN DO; MPRINT(TERMCON): NMPMTO{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRO{I}>0) THEN DO; MPRINT(TERMCON): TLMTHO{I}=NMYRO{I}*12; MPRINT(TERMCON): IF (NMPMTO{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYFO{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMTO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFO{I}=-7) THEN DO; MPRINT(TERMCON): NMPMTO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFO{I}=8) THEN DO; MPRINT(TERMCON): NMPMTO{I}=1; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFO{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYFO{I}=1) THEN NMPMTO{I}=TLMTHO{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=2) THEN NMPMTO{I}=TLMTHO{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=3) THEN NMPMTO{I}=TLMTHO{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=4) THEN NMPMTO{I}=TLMTHO{I}; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=5) THEN NMPMTO{I}=TLMTHO{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=6) THEN NMPMTO{I}=TLMTHO{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=20) THEN NMPMTO{I}=TLMTHO{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=21) THEN NMPMTO{I}=TLMTHO{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=11) THEN NMPMTO{I}=TLMTHO{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=12) THEN NMPMTO{I}=TLMTHO{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=23) THEN NMPMTO{I}=TLMTHO{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=24) THEN NMPMTO{I}=TLMTHO{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=25) THEN NMPMTO{I}=TLMTHO{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=31) THEN NMPMTO{I}=TLMTHO{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=18) THEN NMPMTO{I}=TLMTHO{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=0) THEN NMPMTO{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}>.Z & REGPAYFO{I}^=-1 & REGPAYFO{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMTO{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTHO{I}= REGPAYFO{I}= NMPMTO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHO{I}>.Z & TLMTHO{I}<-2) THEN DO; 182 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): NMPMTO{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTHO{I}= REGPAYFO{I}= NMPMTO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHO{I}<=.Z) THEN NMPMTO{I}=TLMTHO{I}; MPRINT(MOCONV): ELSE IF (TLMTHO{I}^=-1 & TLMTHO{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFO{I}= TLMTHO{I}= "SETTING AMT=."; MPRINT(MOCONV): NMPMTO{I}=.; MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTO{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHO{I}=-1; MPRINT(TERMCON): IF (NMYRO{I}=0) THEN DO; MPRINT(TERMCON): NMYRO{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTO{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYFO{I}; MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYFO{I}>0) THEN PFREQ=TYPAYFO{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTHO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; MPRINT(TERMCON): TLMTHO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): IF (NMPMTO{I}>0) THEN DO; MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTHO{I}=NMPMTO{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}))); MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12))); MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTHO{I}=NMPMTO{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTHO{I}=NMPMTO{I}*2/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTHO{I}=NMPMTO{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTHO{I}=NMPMTO{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTHO{I}=NMPMTO{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTHO{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): TLMTHO{I}=NMPMTO{I}; MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMTO{I}= PFREQ= TLMTHO{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}>.Z & NMPMTO{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTHO{I}=NMPMTO{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMTO{I}= PFREQ= TLMTHO{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}=0) THEN TLMTHO{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}<=.Z) THEN TLMTHO{I}=NMPMTO{I}; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}^=-1 & NMPMTO{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMTO{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTHO{I}=.; 183 The SAS System 13:32 Friday, January 29, 2021 MPRINT(IMOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTHO{I}>0) THEN DO; MPRINT(TERMCON): NMYRO{I}=MAX(1,INT(.5+(TLMTHO{I}/12))); MPRINT(TERMCON): TLMTHO{I}=MAX(1,ROUND(TLMTHO{I})); MPRINT(TERMCON): END; MPRINT(TERMCON): IF (NMYRO{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMTO{I}= NMYRO{I}= TLMTHO{I}= REGPAYFO{I}= REGPAYO{I}= TYPAYFO{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAYO{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYFO{I}=1) THEN CMOPAYO{I}=REGPAYO{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=2) THEN CMOPAYO{I}=REGPAYO{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=3) THEN CMOPAYO{I}=REGPAYO{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=4) THEN CMOPAYO{I}=REGPAYO{I}; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=5) THEN CMOPAYO{I}=REGPAYO{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=6) THEN CMOPAYO{I}=REGPAYO{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=20) THEN CMOPAYO{I}=REGPAYO{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=21) THEN CMOPAYO{I}=REGPAYO{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=8) THEN CMOPAYO{I}=REGPAYO{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=11) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=12) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=23) THEN CMOPAYO{I}=REGPAYO{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=24) THEN CMOPAYO{I}=REGPAYO{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=25) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=31) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=18) THEN CMOPAYO{I}=REGPAYO{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=0) THEN CMOPAYO{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}>.Z & REGPAYFO{I}^=-1 & REGPAYFO{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAYO{I}= REGPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYO{I}>.Z & REGPAYO{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAYO{I}= REGPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYO{I}<=.Z) THEN CMOPAYO{I}=REGPAYO{I}; MPRINT(MOCONV): ELSE IF (REGPAYO{I}^=-1 & REGPAYO{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFO{I}= REGPAYO{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(MOCONV): IF (TYPAYFO{I}=1) THEN CMOPAYO{I}=TYPAYO{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=2) THEN CMOPAYO{I}=TYPAYO{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=3) THEN CMOPAYO{I}=TYPAYO{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=4) THEN CMOPAYO{I}=TYPAYO{I}; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=5) THEN CMOPAYO{I}=TYPAYO{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=6) THEN CMOPAYO{I}=TYPAYO{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=20) THEN CMOPAYO{I}=TYPAYO{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=21) THEN CMOPAYO{I}=TYPAYO{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=8) THEN CMOPAYO{I}=TYPAYO{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=11) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)/6; 184 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=12) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=23) THEN CMOPAYO{I}=TYPAYO{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=24) THEN CMOPAYO{I}=TYPAYO{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=25) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=31) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=18) THEN CMOPAYO{I}=TYPAYO{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=0) THEN CMOPAYO{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}>.Z & TYPAYFO{I}^=-1 & TYPAYFO{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYO{I}= TYPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYO{I}>.Z & TYPAYO{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYO{I}= TYPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYO{I}<=.Z) THEN CMOPAYO{I}=TYPAYO{I}; MPRINT(MOCONV): ELSE IF (TYPAYO{I}^=-1 & TYPAYO{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYFO{I}= TYPAYO{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF NMYRO{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFTO{I}=(TLMTHO{I}-((2013-LNSTYRO{I})*12)); MPRINT(TAXSCF): LNAGEO{I}=TLMTHO{I}-PAYLFTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFTO{I}=0; MPRINT(TAXSCF): LNAGEO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNO); MPRINT(TAXSCF): IF ((HAVELNO{I}=1) & (TAXINS{I} IN(1 2 3)) & TLMTHO{I} > 0 & INTRATEO{I} > 0) THEN DO; MPRINT(TAXSCF): IF (HBALLNO{I}=1) THEN DO; MPRINT(MORTPAY): AMOPAYO{I}=ROUND((MORT((AMTBORRO{I}),.,((INTRATEO{I}/10000)/12),(TLMTHO{I}))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (CMOPAYO{I} > AMOPAYO{I}) THEN CMOPAYO{I}=AMOPAYO{I}; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HBALLNO{I}=5) THEN DO; MPRINT(TAXSCF): IF (AMTBORRO{I} > BALLNO{I}) THEN ADJBORRO{I}=(AMTBORRO{I}-BALLNO{I}); MPRINT(TAXSCF): ELSE IF (AMTBORRO{I} < BALLNO{I}) THEN ADJBORRO{I}=AMTBORRO{I}; MPRINT(TAXSCF): IF ADJBORRO{I} > 0 THEN MPRINT(MORTPAY): AMOPAYO{I}=ROUND((MORT((ADJBORRO{I}),.,((INTRATEO{I}/10000)/12),(TLMTHO{I}))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (AMTBORRO{I}=BALLNO{I}) THEN AMOPAYO{I}=((AMTBORRO{I})*(INTRATEO{I}/10000))/12; MPRINT(TAXSCF): IF (CMOPAYO{I} > AMOPAYO{I}) THEN CMOPAYO{I}=AMOPAYO{I}; MPRINT(TAXSCF): ELSE IF (AMOPAYO{I} >= CMOPAYO{I}) & Y1=YY1*10+1 THEN PUT "ADJUSTED MONTHLY PAYMENT GREATER THAN 185 The SAS System 13:32 Friday, January 29, 2021 COMPUTED MONTHLY PAYMENT " Y1= AMTBORRO{I}= CMOPAYO{I}= AMOPAYO{I}= INTRATEO{I}= TAXINS{I}= TLMTHO{I}= HBALLNO{I}= BALLNO{I}= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * 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); MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNO); MPRINT(TAXSCF): IF (PROPTYPE{I} IN(12 13 14 21 22 25 40 49 999) & (HINCOMEO{I}=5 | INCOMEO{I}=-1)) | (PROPTYPE{I} IN(12 13 14 21 22 25 40 49 999) & HINCOMEO{I}=1 & INCOMEO{I} < (CMOPAYO{I}*12)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified properties; MPRINT(TAXSCF): QUALPROP{I}=(HAVELNO{I}=1); MPRINT(TAXSCF): QUALOTHPROP=QUALOTHPROP+QUALPROP{I}; MPRINT(TAXSCF): FMVOP=FMVOP+PROPVAL{I}*(HAVELNO{I}=1); MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & HBALLNO{I} IN(1 5) & NMYRO{I} NOT IN(0 -1 -7) & INTRATEO{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAYO{I} < AMTBORRO{I}*.005) THEN CMOPAYO{I}=MAX(REGPAYO{I},TYPAYO{I}); MPRINT(TAXSCF): 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})); MPRINT(TAXSCF): 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))); MPRINT(TAXSCF): IF LNSTYRO{I}^=2013 THEN AINTDCTO{I}=(CMOPAYO{I}*12)-(AMTOWE_1O{I}-AMTOWEO{I}); MPRINT(TAXSCF): ELSE IF LNSTYRO{I}=2013 THEN AINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | CMOPAYO{I} < 0 | PAYLFTO{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEO{I}=0; MPRINT(TAXSCF): AMTOWE_1O{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & AMTBORRO{I} > 0 & LNAGEO{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTDCTO{I}=(CMOPAYO{I}*12)-(CURBAL_1O{I}-CURBALO{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | AMTBORRO{I} < 0 | LNAGEO{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALO{I}=0; MPRINT(TAXSCF): CURBAL_1O{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): ELSE SINTDCTO{I}=0; MPRINT(TAXSCF): * 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 the home was not 186 The SAS System 13:32 Friday, January 29, 2021 purchased in the survey year. If the home was purchased in the survey year, set deduction to zero.; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I}=0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=2013 & PURCHYRO{I}=2013) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=2013) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & CURBALO{I} > 0 & CURBAL_1O{I} > 0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & (CURBALO{I} <= 0 & CURBAL_1O{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTO{I} > 0 & CINTDCTO{I} > 0) THEN DCTDIFFO{I}=CINTDCTO{I}-SINTDCTO{I}; MPRINT(TAXSCF): ELSE DCTDIFFO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (NMYRO{I} IN(-1 -7) & NMPMTO{I} IN(-1 -7)) & AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (INTRATEO{I}=-1)) THEN DO; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest deduction; MPRINT(TAXSCF): IF ((CINTDCTO{I} + AINTDCTO{I} + SINTDCTO{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=(CINTDCTO{I}+AINTDCTO{I}+SINTDCTO{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTDCTO{I}=0; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & CMOPAYO{I} > 0 & (AVINTDCTO{I} > CMOPAYO{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): SINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & AMTOUTO{I} > 0 & (AVINTDCTO{I} > .25*AMTOUTO{I})) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; 187 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): * Compute total deduction and total amount outstanding; MPRINT(TAXSCF): TOTDEDCTO=TOTDEDCTO+((AVINTDCTO{I})*PERPROP{I}/10000)*(HAVELNO{I}=1); MPRINT(TAXSCF): TOTAMTOUTO=TOTAMTOUTO+AMTOUTO{I}; MPRINT(TAXSCF): * Create flag for loans after 12/15/17, used in computing limits on mortgage interest deduction for home acquistion debt; MPRINT(TAXSCF): LIMFLAG{I}=(LNSTYRO{I}> 2017 | (LNSTYRO{I}=2017 & LNSTMNO{I}=12)); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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 hhs are rational and report the home/properties with the biggest deductions.; MPRINT(TAXSCF): ADJDEDCTO=0; MPRINT(TAXSCF): ADJAMTOUTO=0; MPRINT(TAXSCF): ADJ17AMTOUTO=0; MPRINT(TAXSCF): FMVOTHPROP=0; MPRINT(TAXSCF): IF (QUALOTHPROP > 0) THEN DO; MPRINT(TAXSCF): IF (QUALOTHPROP=1 & QPROP1=1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=1 & QPROP2=1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=2) THEN DO; MPRINT(TAXSCF): IF (AVINTDCTO1 >= AVINTDCTO2) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO2 >= AVINTDCTO1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (X701=-7 & X7133=1) THEN DO; MPRINT(TAXSCF): HOUSE=(X7134/10000)*X716; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE HOUSE=SUM(0,X604,X614,X623,X716,(X513+X526)); 188 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): IF (TOTEQDBTL > 0 & GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL+TOTEQDBTL > (HOUSE)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) > 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=MIN((HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL)),TOTEQDBTL,100000); MPRINT(TAXSCF): ADJDEDCTL=TOTDEDCTL*(ADJEQDBTL/TOTEQDBTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) <= 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=0; MPRINT(TAXSCF): ADJDEDCTL=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((FILESTAT=3) & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) > 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=MIN((HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL)),TOTEQDBTL,50000); MPRINT(TAXSCF): ADJDEDCTL=TOTDEDCTL*(ADJEQDBTL/TOTEQDBTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((FILESTAT=3) & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) <= 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=0; MPRINT(TAXSCF): ADJDEDCTL=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TOTEQDBTL ^=. & TOTDEDCTL ^=.) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=TOTEQDBTL; MPRINT(TAXSCF): ADJDEDCTL=TOTDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TOTEQDBTL > 0 & GRFAMTOUTM+A17AMTOUTM+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= /; MPRINT(TAXSCF): * 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), worksheet changed in 2018; MPRINT(TAXSCF): ADJDEDCT=0; MPRINT(TAXSCF): * case 1 - grandfathered debt, no home acquisition debt, maybe home equity; MPRINT(TAXSCF): IF (GRFAMTOUTM > 0 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & ADJEQDBTL <= 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & ADJEQDBTL > 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+100000)/(GRFAMTOUTM+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & ADJEQDBTL <= 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & ADJEQDBTL > 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+50000)/(GRFAMTOUTM+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * case 2 - some grandfathered debt, some home acquisition debt, maybe home equity; MPRINT(TAXSCF): ELSE IF (GRFAMTOUTM > 0 & (HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & (ADJEQDBTL=0 | ADJEQDBTL <= 100000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & ADJEQDBTL > 100000 & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+100000) 189 The SAS System 13:32 Friday, January 29, 2021 /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (ADJEQDBTL <= 100000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+ADJEQDBTL),(1000000+ADJEQDBTL))) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (ADJEQDBTL > 100000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+100000),1100000))/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (ADJEQDBTL=0 | ADJEQDBTL <= 50000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & ADJEQDBTL > 50000 & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+50000) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (ADJEQDBTL=0 | ADJEQDBTL <= 50000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+ADJEQDBTL),(500000+ADJEQDBTL))) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (ADJEQDBTL=0 | ADJEQDBTL > 50000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+50000),550000))/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * case 3 - no grandfathered debt, maybe home acquisition, maybe home equity; MPRINT(TAXSCF): ELSE IF (GRFAMTOUTM=0 & (HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | ADJEQDBTL > 0)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 0 & ADJEQDBTL <= 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((100000)/ADJEQDBTL)*ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL <= 1000000) & ADJEQDBTL <= 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL <= 1000000) & ADJEQDBTL > 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+100000)/ (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; 190 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL > 1000000) & (ADJEQDBTL <= 100000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((1000000+ADJEQDBTL)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL > 1000000) & (ADJEQDBTL > 100000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((1100000)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 0 & ADJEQDBTL <= 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((50000)/ADJEQDBTL)*ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000) & ADJEQDBTL <= 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000) & ADJEQDBTL > 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+50000)/ (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000) & (ADJEQDBTL <= 50000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((500000+ADJEQDBTL)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000) & (ADJEQDBTL > 50000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((550000)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * a few obs will come out here, but they either have -1 as the interest rate or are land contracts; MPRINT(TAXSCF): IF ((GRFAMTOUTM > 0 | HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | (ADJEQDBTL*(2013 LE 2016)) > 0 | A17AMTOUTM > 0 & ADJ17AMTOUTO > 0) & ADJDEDCT=0 & X5744 IN(1 5 6) & Y1=YY1*10+1 & X720^=2013) THEN PUT "MORTGAGE DEDUCTION SHOULD NOT BE ZERO " Y1= X5744= X5746= GRFAMTOUTM= HAAMTOUTM= ADJAMTOUTO= TOTAQDBTL= ADJEQDBTL= A17AMTOUTM= ADJ17AMTOUTO= TOTDEDCTM= ADJDEDCTO= ADJDEDCTL= OVERLIM= QUALOTHPROP= CINTDCTM1= CINTDCTM2= CINTDCTM3= CINTDCTO1= CINTDCTO2= X702= X714= X7135= X723=/; MPRINT(TAXSCF): IF ((GRFAMTOUTM > 0 | HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | ADJEQDBTL > 0 | A17AMTOUTM > 0 & ADJ17AMTOUTO > 0) & OVERLIM=. & Y1=YY1*10+1) THEN PUT "OVER LIMIT INDICATOR MISSING " Y1= X5744= X5746= GRFAMTOUTM= HAAMTOUTM= ADJAMTOUTO= TOTAQDBTL= ADJEQDBTL= A17AMTOUTM= ADJ17AMTOUTO= TOTDEDCTM= ADJDEDCTO= ADJDEDCTL= OVERLIM= ADJDEDCT=/; MPRINT(TAXSCF): IF ADJDEDCT >= 100000 & Y1=YY1*10+1 THEN PUT "HUGE MORTGAGE INTEREST DEDUCTION " Y1= TOTDEDCTM= GRFAMTOUTM= HAAMTOUTM= TOTAQDBTL= ADJDEDCTL= ADJEQDBTL= ADJDEDCTO= ADJAMTOUTO= A17AMTOUTM= ADJ17AMTOUTO= HOUSE= QUALOTHPROP= FMVOTHPROP= X5744= X5746= ADJDEDCT= /; MPRINT(TAXSCF): ************Real estate taxes; MPRINT(TAXSCF): * TAXSIM doesnt want local property taxes in amount of itemized deductions, listed as a separate variable; MPRINT(TAXSCF): * 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; MPRINT(TAXSCF): PROPTXRATE=0; MPRINT(TAXSCF): IF (HOUSE > 0 & RESTAXM1 > 0) THEN PROPTXRATE=(RESTAXM1/HOUSE)*100; MPRINT(TAXSCF): IF (PROPTXRATE > 10 & Y1=YY1*10+1) THEN PUT "HIGH PROPERTY TAX RATE " Y1= HOUSE= RESTAXM1= X721= 191 The SAS System 13:32 Friday, January 29, 2021 J721= X722= J722= X501= X601= X701= PROPTXRATE=/; MPRINT(TAXSCF): IF (PROPTXRATE > 10 & X722=4) THEN RESTAXM1=X721; MPRINT(TAXSCF): ************Investment interest expense; MPRINT(TAXSCF): * 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 need to add up dividend/interest income. Capital gains 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.; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * LOCs - only counting loans not secured by the residence and with asset or real estate investment as loan purpose.; MPRINT(TAXSCF): IF (X1101=1) THEN DO; MPRINT(TAXSCF): DO I=1 TO DIM(SBYHOME); MPRINT(TAXSCF): IF (SBYHOME{I}=5 & DOOWE{I}=1 & LNPURP{I} IN(76 78 79)) THEN DO; MPRINT(TAXSCF): IF (TYPAYL{I} > 0) THEN DO; MPRINT(MOCONV): IF (TYPAYLF{I}=1) THEN CMOPAYL{I}=TYPAYL{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=2) THEN CMOPAYL{I}=TYPAYL{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=3) THEN CMOPAYL{I}=TYPAYL{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=4) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=5) THEN CMOPAYL{I}=TYPAYL{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=6) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=20) THEN CMOPAYL{I}=TYPAYL{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=21) THEN CMOPAYL{I}=TYPAYL{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=8) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=11) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=12) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=23) THEN CMOPAYL{I}=TYPAYL{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=24) THEN CMOPAYL{I}=TYPAYL{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=25) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=31) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=18) THEN CMOPAYL{I}=TYPAYL{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=0) THEN CMOPAYL{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}>.Z & TYPAYLF{I}^=-1 & TYPAYLF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}>.Z & TYPAYL{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}<=.Z) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYL{I}^=-1 & TYPAYL{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYLF{I}= TYPAYL{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TYPAYL{I} IN(0 -1 -2)) THEN DO; MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (INTRATEL{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=((INTRATEL{I}/10000)*AMTOUTL{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEL{I} IN(0 -1)) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTL{I} > 0 & CMOPAYL{I} > 0 & SINTDCTL{I} > CMOPAYL{I}*12) THEN DO; 192 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): SINTDCTL{I}=CMOPAYL{I}*12; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTLOCINVEX=TOTLOCINVEX+SINTDCTL{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Other properties - only counting properties held for investment purposes, and hh must receive income from the property.; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNO); MPRINT(TAXSCF): IF (PROPTYPE{I} IN(41 42 43 44 45 46 47 48) & (INCOMEO{I} > 0)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified properties; MPRINT(TAXSCF): QUALPINV{I}=(HAVELNO{I}=1); MPRINT(TAXSCF): QUALINVPROP=QUALINVPROP+QUALPINV{I}; MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & HBALLNO{I} IN(1 5) & NMYRO{I} NOT IN(0 -1 -7) & INTRATEO{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAYO{I} < AMTBORRO{I}*.005) THEN CMOPAYO{I}=MAX(REGPAYO{I},TYPAYO{I}); MPRINT(TAXSCF): 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})); MPRINT(TAXSCF): 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))); MPRINT(TAXSCF): IF LNSTYRO{I}^=2013 THEN AINTDCTO{I}=(CMOPAYO{I}*12)-(AMTOWE_1O{I}-AMTOWEO{I}); MPRINT(TAXSCF): ELSE IF LNSTYRO{I}=2013 THEN AINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | CMOPAYO{I} < 0 | PAYLFTO{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEO{I}=0; MPRINT(TAXSCF): AMTOWE_1O{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & AMTBORRO{I} > 0 & LNAGEO{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTDCTO{I}=(CMOPAYO{I}*12)-(CURBAL_1O{I}-CURBALO{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | AMTBORRO{I} < 0 | LNAGEO{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALO{I}=0; MPRINT(TAXSCF): CURBAL_1O{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): ELSE SINTDCTO{I}=0; MPRINT(TAXSCF): * 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 the home was not purchased in the survey year. If the home was purchased in the survey year, set deduction to zero.; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I}=0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=2013 & PURCHYRO{I}=2013) THEN DO; 193 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=2013) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & CURBALO{I} > 0 & CURBAL_1O{I} > 0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & (CURBALO{I} <= 0 & CURBAL_1O{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTO{I} > 0 & CINTDCTO{I} > 0) THEN DCTDIFFO{I}=CINTDCTO{I}-SINTDCTO{I}; MPRINT(TAXSCF): ELSE DCTDIFFO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (NMYRO{I} IN(-1 -7) & NMPMTO{I} IN(-1 -7)) & AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (INTRATEO{I}=-1)) THEN DO; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest deduction; MPRINT(TAXSCF): IF ((CINTDCTO{I} + AINTDCTO{I} + SINTDCTO{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=(CINTDCTO{I}+AINTDCTO{I}+SINTDCTO{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTDCTO{I}=0; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & CMOPAYO{I} > 0 & (AVINTDCTO{I} > CMOPAYO{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): SINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & AMTOUTO{I} > 0 & (AVINTDCTO{I} > .25*AMTOUTO{I})) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): * Compute total investment interest expense; 194 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): TOTINVPDCT=TOTINVPDCT+((AVINTDCTO{I})*PERPROP{I}/10000)*(HAVELNO{I}=1); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Other loans - only counting loans for (non-business) investment purposes; MPRINT(TAXSCF): ARRAY TLMTHI {*} TLMTHI1 TLMTHI2 TLMTHI3 TLMTHI4 TLMTHI5 TLMTHI6; MPRINT(TAXSCF): ARRAY CMOPAYI {*} CMOPAYI1 CMOPAYI2 CMOPAYI3 CMOPAYI4 CMOPAYI5 CMOPAYI6; MPRINT(TAXSCF): ARRAY PAYLFTI {*} PAYLFTI1 PAYLFTI2 PAYLFTI3 PAYLFTI4 PAYLFTI5 PAYLFTI6; MPRINT(TAXSCF): ARRAY AMTOWEI {*} AMTOWEI1 AMTOWEI2 AMTOWEI3 AMTOWEI4 AMTOWEI5 AMTOWEI6; MPRINT(TAXSCF): ARRAY AMTOWE_1I {*} AMTOWE_1I1 AMTOWE_1I2 AMTOWE_1I3 AMTOWE_1I4 AMTOWE_1I5 AMTOWE_1I6; MPRINT(TAXSCF): ARRAY AINTEXPI {*} AINTEXPI1 AINTEXPI2 AINTEXPI3 AINTEXPI4 AINTEXPI5 AINTEXPI6; MPRINT(TAXSCF): ARRAY LNAGEI {*} LNAGEI1 LNAGEI2 LNAGEI3 LNAGEI4 LNAGEI5 LNAGEI6; MPRINT(TAXSCF): ARRAY CURBALI {*} CURBALI1 CURBALI2 CURBALI3 URBALI4 CURBALI5 CURBALI6; MPRINT(TAXSCF): ARRAY CURBAL_1I {*} CURBAL_1I1 CURBAL_1I2 CURBAL_1I3 CURBAL_1I4 CURBAL_1I5 CURBAL_1I6; MPRINT(TAXSCF): ARRAY CINTEXPI {*} CINTEXPI1 CINTEXPI2 CINTEXPI3 CINTEXPI4 CINTEXPI5 CINTEXPI6; MPRINT(TAXSCF): ARRAY DCTDIFFI {*} DCTDIFFI1 DCTDIFFI2 DCTDIFFI3 DCTDIFFI4 DCTDIFFI5 DCTDIFFI6; MPRINT(TAXSCF): ARRAY SINTEXPI {*} SINTEXPI1 SINTEXPI2 SINTEXPI3 SINTEXPI4 SINTEXPI5 SINTEXPI6; MPRINT(TAXSCF): ARRAY AVINTEXPI {*} AVINTEXPI1 AVINTEXPI2 AVINTEXPI3 AVINTEXPI4 AVINTEXPI5 AVINTEXPI6; MPRINT(TAXSCF): ARRAY QUALN {*} QLN1 QLN2 QLN3 QLN4 QLN5 QLN6; MPRINT(TAXSCF): ARRAY NMPMTI {*} X2716 X2733 X2816 X2833 X2916 X2933; MPRINT(TAXSCF): ARRAY NMYRI {*} X2717 X2734 X2817 X2834 X2917 X2934; MPRINT(TAXSCF): ARRAY REGPAYFI {*} X7527 X7526 X7525 X7524 X7523 X7522; MPRINT(TAXSCF): ARRAY REGPAYI {*} X2718 X2735 X2818 X2835 X2918 X2935; MPRINT(TAXSCF): ARRAY TYPAYFI {*} X2720 X2737 X2820 X2837 X2920 X2937; MPRINT(TAXSCF): ARRAY TYPAYI {*} X2719 X2736 X2819 X2836 X2919 X2936; MPRINT(TAXSCF): ARRAY LNSTYRI {*} X2713 X2730 X2813 X2830 X2913 X2930; MPRINT(TAXSCF): ARRAY AMTBORRI {*} X2714 X2731 X2814 X2831 X2914 X2931; MPRINT(TAXSCF): ARRAY JAMTBORRI {*} J2714 J2731 J2814 J2831 J2914 J2931; MPRINT(TAXSCF): ARRAY AMTOUTI {*} X2723 X2740 X2823 X2840 X2923 X2940; MPRINT(TAXSCF): ARRAY JAMTOUTI {*} J2723 J2740 J2823 J2840 J2923 J2940; MPRINT(TAXSCF): ARRAY INTRATEI {*} X2724 X2741 X2824 X2841 X2924 X2941; MPRINT(TAXSCF): ARRAY ONSCHEDI {*} X7521 X7520 X7519 X7518 X7517 X7516; MPRINT(TAXSCF): ; MPRINT(TAXSCF): ARRAY LNTYPE {*} X2710 X2727 X2810 X2827 X2910 X2927; MPRINT(TAXSCF): ARRAY BUSLN {*} X6842 X6843 X6844 X6845 X6846 X6847; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTHI); MPRINT(TAXSCF): TLMTHI{I}=0; MPRINT(TAXSCF): CMOPAYI{I}=0; MPRINT(TAXSCF): PAYLFTI{I}=0; MPRINT(TAXSCF): AMTOWEI{I}=0; MPRINT(TAXSCF): AMTOWE_1I{I}=0; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): LNAGEI{I}=0; MPRINT(TAXSCF): CURBALI{I}=0; MPRINT(TAXSCF): CURBAL_1I{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): DCTDIFFI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; MPRINT(TAXSCF): AVINTEXPI{I}=0; MPRINT(TAXSCF): QUALN{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTLNINVEX=0; MPRINT(TAXSCF): QUALOANINV=0; MPRINT(TAXSCF): DO I=1 TO DIM(NMPMTI); MPRINT(TERMCON): IF (NMYRI{I}=0 & NMPMTI{I}=0) THEN DO; MPRINT(TERMCON): TLMTHI{I}=0; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRI{I}^=0|NMPMTI{I}^=0) THEN DO; 195 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TERMCON): IF (NMYRI{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRI{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHI{I}=NMYRI{I}; MPRINT(TERMCON): IF (NMPMTI{I}=0) THEN DO; MPRINT(TERMCON): NMPMTI{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRI{I}>0) THEN DO; MPRINT(TERMCON): TLMTHI{I}=NMYRI{I}*12; MPRINT(TERMCON): IF (NMPMTI{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYFI{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMTI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFI{I}=-7) THEN DO; MPRINT(TERMCON): NMPMTI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFI{I}=8) THEN DO; MPRINT(TERMCON): NMPMTI{I}=1; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFI{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYFI{I}=1) THEN NMPMTI{I}=TLMTHI{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=2) THEN NMPMTI{I}=TLMTHI{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=3) THEN NMPMTI{I}=TLMTHI{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=4) THEN NMPMTI{I}=TLMTHI{I}; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=5) THEN NMPMTI{I}=TLMTHI{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=6) THEN NMPMTI{I}=TLMTHI{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=20) THEN NMPMTI{I}=TLMTHI{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=21) THEN NMPMTI{I}=TLMTHI{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=11) THEN NMPMTI{I}=TLMTHI{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=12) THEN NMPMTI{I}=TLMTHI{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=23) THEN NMPMTI{I}=TLMTHI{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=24) THEN NMPMTI{I}=TLMTHI{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=25) THEN NMPMTI{I}=TLMTHI{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=31) THEN NMPMTI{I}=TLMTHI{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=18) THEN NMPMTI{I}=TLMTHI{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=0) THEN NMPMTI{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}>.Z & REGPAYFI{I}^=-1 & REGPAYFI{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMTI{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTHI{I}= REGPAYFI{I}= NMPMTI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHI{I}>.Z & TLMTHI{I}<-2) THEN DO; MPRINT(MOCONV): NMPMTI{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTHI{I}= REGPAYFI{I}= NMPMTI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHI{I}<=.Z) THEN NMPMTI{I}=TLMTHI{I}; MPRINT(MOCONV): ELSE IF (TLMTHI{I}^=-1 & TLMTHI{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFI{I}= TLMTHI{I}= "SETTING AMT=."; MPRINT(MOCONV): NMPMTI{I}=.; MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTI{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHI{I}=-1; MPRINT(TERMCON): IF (NMYRI{I}=0) THEN DO; MPRINT(TERMCON): NMYRI{I}=-1; 196 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTI{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYFI{I}; MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYFI{I}>0) THEN PFREQ=TYPAYFI{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTHI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; MPRINT(TERMCON): TLMTHI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): IF (NMPMTI{I}>0) THEN DO; MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTHI{I}=NMPMTI{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}))); MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12))); MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTHI{I}=NMPMTI{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTHI{I}=NMPMTI{I}*2/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTHI{I}=NMPMTI{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTHI{I}=NMPMTI{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTHI{I}=NMPMTI{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTHI{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): TLMTHI{I}=NMPMTI{I}; MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMTI{I}= PFREQ= TLMTHI{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}>.Z & NMPMTI{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTHI{I}=NMPMTI{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMTI{I}= PFREQ= TLMTHI{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}=0) THEN TLMTHI{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}<=.Z) THEN TLMTHI{I}=NMPMTI{I}; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}^=-1 & NMPMTI{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMTI{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTHI{I}=.; MPRINT(IMOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTHI{I}>0) THEN DO; MPRINT(TERMCON): NMYRI{I}=MAX(1,INT(.5+(TLMTHI{I}/12))); MPRINT(TERMCON): TLMTHI{I}=MAX(1,ROUND(TLMTHI{I})); MPRINT(TERMCON): END; MPRINT(TERMCON): IF (NMYRI{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMTI{I}= NMYRI{I}= TLMTHI{I}= REGPAYFI{I}= REGPAYI{I}= TYPAYFI{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAYI{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYFI{I}=1) THEN CMOPAYI{I}=REGPAYI{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=2) THEN CMOPAYI{I}=REGPAYI{I}*52/12; 197 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=3) THEN CMOPAYI{I}=REGPAYI{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=4) THEN CMOPAYI{I}=REGPAYI{I}; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=5) THEN CMOPAYI{I}=REGPAYI{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=6) THEN CMOPAYI{I}=REGPAYI{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=20) THEN CMOPAYI{I}=REGPAYI{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=21) THEN CMOPAYI{I}=REGPAYI{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=8) THEN CMOPAYI{I}=REGPAYI{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=11) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=12) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=23) THEN CMOPAYI{I}=REGPAYI{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=24) THEN CMOPAYI{I}=REGPAYI{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=25) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=31) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=18) THEN CMOPAYI{I}=REGPAYI{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=0) THEN CMOPAYI{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}>.Z & REGPAYFI{I}^=-1 & REGPAYFI{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAYI{I}= REGPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYI{I}>.Z & REGPAYI{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAYI{I}= REGPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYI{I}<=.Z) THEN CMOPAYI{I}=REGPAYI{I}; MPRINT(MOCONV): ELSE IF (REGPAYI{I}^=-1 & REGPAYI{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFI{I}= REGPAYI{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(MOCONV): IF (TYPAYFI{I}=1) THEN CMOPAYI{I}=TYPAYI{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=2) THEN CMOPAYI{I}=TYPAYI{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=3) THEN CMOPAYI{I}=TYPAYI{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=4) THEN CMOPAYI{I}=TYPAYI{I}; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=5) THEN CMOPAYI{I}=TYPAYI{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=6) THEN CMOPAYI{I}=TYPAYI{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=20) THEN CMOPAYI{I}=TYPAYI{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=21) THEN CMOPAYI{I}=TYPAYI{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=8) THEN CMOPAYI{I}=TYPAYI{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=11) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=12) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=23) THEN CMOPAYI{I}=TYPAYI{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=24) THEN CMOPAYI{I}=TYPAYI{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=25) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=31) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=18) THEN CMOPAYI{I}=TYPAYI{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=0) THEN CMOPAYI{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}>.Z & TYPAYFI{I}^=-1 & TYPAYFI{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYI{I}= TYPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYI{I}>.Z & TYPAYI{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYI{I}= TYPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYI{I}<=.Z) THEN CMOPAYI{I}=TYPAYI{I}; MPRINT(MOCONV): ELSE IF (TYPAYI{I}^=-1 & TYPAYI{I}^=-2) THEN DO; 198 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYFI{I}= TYPAYI{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF NMYRI{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFTI{I}=(TLMTHI{I}-((2013-LNSTYRI{I})*12)); MPRINT(TAXSCF): LNAGEI{I}=TLMTHI{I}-PAYLFTI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFTI{I}=0; MPRINT(TAXSCF): LNAGEI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): DO I=1 TO MIN(6,X2709); MPRINT(TAXSCF): IF (LNTYPE{I} IN(76 78 79) & BUSLN{I} IN(0 5 8)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified loans; MPRINT(TAXSCF): QUALN{I}=1; MPRINT(TAXSCF): QUALOANINV=QUALOANINV+QUALN{I}; MPRINT(TAXSCF): IF (NMYRI{I} NOT IN(0 -1 -7) & INTRATEI{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & PAYLFTI{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAYI{I} < AMTBORRI{I}*.005) THEN CMOPAYI{I}=MAX(REGPAYI{I},TYPAYI{I}); MPRINT(TAXSCF): AMTOWEI{I}=CMOPAYI{I}*((1-1/(1+(INTRATEI{I}/10000)/12)**PAYLFTI{I})/ ((INTRATEI{I}/10000)/12)); MPRINT(TAXSCF): AMTOWE_1I{I}=CMOPAYI{I}*((1-1/(1+(INTRATEI{I}/10000)/12)**(PAYLFTI{I}+12))/ ((INTRATEI{I}/10000)/12)); MPRINT(TAXSCF): IF LNSTYRI{I}^=2013 THEN AINTEXPI{I}=(CMOPAYI{I}*12)-(AMTOWE_1I{I}-AMTOWEI{I}); MPRINT(TAXSCF): ELSE IF LNSTYRI{I}=2013 THEN AINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHI{I} < 0 | CMOPAYI{I} < 0 | PAYLFTI{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEI{I}=0; MPRINT(TAXSCF): AMTOWE_1I{I}=0; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & AMTBORRI{I} > 0 & LNAGEI{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTEXPI{I}=(CMOPAYI{I}*12)-(CURBAL_1I{I}-CURBALI{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHI{I} < 0 | AMTBORRI{I} < 0 | LNAGEI{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALI{I}=0; MPRINT(TAXSCF): CURBAL_1I{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUTI{I} > 0 & INTRATEI{I} > 0) THEN SINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): ELSE SINTEXPI{I}=0; MPRINT(TAXSCF): * 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, set the interest expense to zero.; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & PAYLFTI{I}=0) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=CURBAL_1I{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=CINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & LNSTYRI{I}=2013) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; 199 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTEXPI{I} < 0 | CINTEXPI{I} < 0) & CURBALI{I} > 0 & CURBAL_1I{I} > 0) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=CURBAL_1I{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=CINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTEXPI{I} < 0 | CINTEXPI{I} < 0) & (CURBALI{I} <= 0 & CURBAL_1I{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTEXPI{I} > 0 & CINTEXPI{I} > 0) THEN DCTDIFFI{I}=CINTEXPI{I}-SINTEXPI{I}; MPRINT(TAXSCF): ELSE DCTDIFFI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): CINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEI{I}=-1) THEN DO; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest expense; MPRINT(TAXSCF): IF ((CINTEXPI{I} + AINTEXPI{I} + SINTEXPI{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=(CINTEXPI{I}+AINTEXPI{I}+SINTEXPI{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTEXPI{I}=0; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (AVINTEXPI{I} > 0 & CMOPAYI{I} > 0 & (AVINTEXPI{I} > CMOPAYI{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=CMOPAYI{I}*12; MPRINT(TAXSCF): CINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): SINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AVINTEXPI{I} > 0 & AMTOUTI{I} > 0 & (AVINTEXPI{I} > .25*AMTOUTI{I})) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): CINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): * Compute loan investment interest expense; MPRINT(TAXSCF): TOTLNINVEX=TOTLNINVEX+AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Total investment interest expense, if investment interest expense is greater than interest/dividend income, then expense is limited to income amount; 200 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): TOTINTINC=X5708+X5710; MPRINT(TAXSCF): TOTINVEX=0; MPRINT(TAXSCF): TOTINVEX=TOTLOCINVEX+TOTINVPDCT+TOTLNINVEX; MPRINT(TAXSCF): IF TOTINVEX > 0 THEN HINVEX=1; MPRINT(TAXSCF): ELSE HINVEX=0; MPRINT(TAXSCF): IF TOTINVEX > TOTINTINC & Y1=YY1*10+1 THEN PUT "TOO MUCH INVESTMENT INTEREST EXPENSES " Y1= TOTINVEX= TOTLOCINVEX= TOTINVPDCT= TOTLNINVEX= TOTINTINC=/; MPRINT(TAXSCF): IF (TOTINVEX > TOTINTINC) THEN TOTINVEX=TOTINTINC; MPRINT(TAXSCF): * In 1988, 40% of personal interest is deductible, this includes credit cards, car/other vehicle loans, other consumer loans, loans against life insurance policies, home improvement loans, and non-HELOC LOCs.; MPRINT(TAXSCF): TOTPINEX=0; MPRINT(TAXSCF): **************Charitable Contributions; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): GCHARITY=(X5822=1); MPRINT(TAXSCF): CHARITYAMT=0; MPRINT(TAXSCF): IF (X5822=1 & X5823 > 0) THEN DO; MPRINT(TAXSCF): IF (X5823 > .5*AGI) & (AGI>0) THEN CHARITYAMT=.5*AGI; MPRINT(TAXSCF): ELSE CHARITYAMT=X5823; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF X5822=1 & X5823 > 0 & AGI < 0 & Y1=YY1*10+1 THEN PUT "NEGATIVE AGI BUT CHARITYAMT > 0 " Y1= X5823= CHARITYAMT= X5744= X5746= AGI=; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ITEMDEDCT_FLAG=0 THEN DO; MPRINT(TAXSCF): ADJDEDCT=0; MPRINT(TAXSCF): RESTAXM1=0; MPRINT(TAXSCF): TOTINVEX=0; MPRINT(TAXSCF): CHARITYAMT=0; MPRINT(TAXSCF): TOTPINEX=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): **********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.; MPRINT(TAXSCF): TOTITEMDCT=0; MPRINT(TAXSCF): * no limits on itemized deductions in 1988, 2012 and 2018; MPRINT(TAXSCF): * starting in 2015, itemized deduction phaseout limit for AGI are the same as for personal exemptions, so using EXLIM1-4 in this code; MPRINT(TAXSCF): TOTITEMDCT=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); MPRINT(TAXSCF): DEDCTLIM=0; MPRINT(TAXSCF): * NOTE: Change in worksheet for 2006; MPRINT(TAXSCF): * no limits on exemptions in 1988 and 2012, no exemptions in 2018; MPRINT(TAXSCF): TOTEXPTAMT=0; MPRINT(TAXSCF): EXPTLIM=0; MPRINT(TAXSCF): TOTEXPTAMT=TOTEXPT*3800; MPRINT(TAXSCF): * Standard deduction by filing status, including addition deduction amount for over 65, dont have any info on blindness. Also compute number of age exemptions and flag nonfilers based on IRS filing thresholds and a few other assumptions. Nonfilers also cannot have negative AGI, losses from business or capital gains or more than 1/3 of the lowest filing threshold, which is married, filing separately; MPRINT(TAXSCF): BUSRENTCAPLOSS=(TBUSINC < 0 | RENTINC < 0 | CAPGLINC < 0); MPRINT(TAXSCF): HWSINCSE=(WSINCOME >= (.33*3800) | WSINCSP >= (.33*3800) | TBUSINC >= (.33*3800)); MPRINT(TAXSCF): STDDCT=0; MPRINT(TAXSCF): IF (FILESTAT=1 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=5950; MPRINT(TAXSCF): NONFILER=(0 < AGI < 9750)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=1 & TUAGE >= 65) THEN DO; 201 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): STDDCT=7400; MPRINT(TAXSCF): NONFILER=(0 < AGI < 11200)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=2 & TUAGE < 65 & SPAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=11900; MPRINT(TAXSCF): NONFILER=(0 < AGI < 19500)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=2 & TUAGE >= 65 & SPAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=14200; MPRINT(TAXSCF): NONFILER=(0 < AGI < 21800)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=2 & (TUAGE >= 65 | SPAGE >= 65)) THEN DO; MPRINT(TAXSCF): STDDCT=13050; MPRINT(TAXSCF): NONFILER=(0 < AGI < 20650)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=5950; MPRINT(TAXSCF): NONFILER=(AGI < 3800)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=7400; MPRINT(TAXSCF): NONFILER=(AGI < 3800)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=4 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=8700; MPRINT(TAXSCF): NONFILER=(0 < AGI < 12500)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=4 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=10150; MPRINT(TAXSCF): NONFILER=(0 < AGI < 13950)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=5 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=11900; MPRINT(TAXSCF): NONFILER=(AGI < 15700)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=5 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=13050; MPRINT(TAXSCF): NONFILER=(0 < AGI < 16850)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): AGEXMP=(TUAGE > 65) + (SPAGE > 65)*(FILESTAT=2); MPRINT(TAXSCF): * Did the hh itemize; MPRINT(TAXSCF): * No itemization question in 1989 or 1992, so itemize will be zero; MPRINT(TAXSCF): ITEMIZE=(TAXUNIT=0)*(X7367=1 | X7368=1 | X7369=1)+(TAXUNIT=1)*(X7368=1)+(TAXUNIT=2)*(X7369=1); MPRINT(TAXSCF): CITEMIZE=(TOTITEMDCT => STDDCT); MPRINT(TAXSCF): * Construct other variables needed for TAXSIM; MPRINT(TAXSCF): TAXUNITID=Y1*100+TAXUNIT; MPRINT(TAXSCF): YEAR=2012; MPRINT(TAXSCF): AGECL=1*(TUAGE < 26)+2*(26<=TUAGE<35)+3*(35<=TUAGE<45) +4*(45<=TUAGE<55)+5*(55<=TUAGE<65)+6*(TUAGE>=65); MPRINT(TAXSCF): * 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).; MPRINT(TAXSCF): STCAPINC=0; MPRINT(TAXSCF): LTCAPINC=0; MPRINT(TAXSCF): IF (AGICL IN(1)) THEN DO; MPRINT(TAXSCF): IF (CAPGLINC > 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.87; 202 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.87); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (CAPGLINC < 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.62; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.62); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AGICL IN(2)) THEN DO; MPRINT(TAXSCF): IF (CAPGLINC > 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.86; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.86); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (CAPGLINC < 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.66; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.66); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AGICL IN(3)) THEN DO; MPRINT(TAXSCF): IF (CAPGLINC > 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.94; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.94); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (CAPGLINC < 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.87; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.87); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ARRAY NEG_1 {*} TBUSINC OTHINC RENTINC OTHPINC; MPRINT(TAXSCF): DO I=1 TO DIM(NEG_1); MPRINT(TAXSCF): IF NEG_1{I}=-1 THEN NEG_1{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): UNADJTOTDEDCT=MAX(0,(ADJDEDCT+TOTINVEX+CHARITYAMT)); MPRINT(TAXSCF): CHCAREXP=0; MPRINT(TAXSCF): TINCOME=WSINCOME+WSINCSP+TBUSINC+INTINC+NTAXINC+DIVINC+CAPGLINC+RENTINC +UNEMPINC+GSSINC+PENINC+AFDCINC+OTHINC; MPRINT(TAXSCF): TOTXINC=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC +UNEMPINC+GSSINC+PENINC+OTHINC; MPRINT(TAXSCF): *set 3000 max loss for capital gains for comparison with IRS estimates; MPRINT(TAXSCF): IF CAPGLINC < -3000 THEN CAPGL3K=-3000; MPRINT(TAXSCF): ELSE CAPGL3K=CAPGLINC; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (TOTXINC=0 & TINCOME > 0 & AFDCINC=0 & NTAXINC=0 & TAXUNIT < 3 & Y1=YY1*10+1) THEN PUT "TOTXINC IS ZERO BUT TINCOME > 0 " YY1= Y1= TOTXINC= TINCOME= WSINCOME= WSINCSP= TBUSINC= INTINC= NTAXINC= DIVINC= RENTINC= UNEMPINC= AFDCINC= GSSINC= PENINC= OTHINC= CAPGLINC= RAGE= SPAGE= FILESTAT= TAXUNIT= X4100= X4700=/; MPRINT(TAXSCF): * Adding in payroll tax liability and mtr, assuming employee pays both employee and employer share, and 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 earning 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 tax year, 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 caculate the payroll liability and mtr. Computing the payroll atr in a similar fashion. NOTE: Need to adjust for different amounts used to compute the mtr, initially computing payroll mtr for adding $1 to earnings.; MPRINT(TAXSCF): * Need to adjust for 1988, 2% credit for SE, in 1991, limit on medicare tax; 203 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ** earnings from wages and businesses for head and spouse/parnter; MPRINT(TAXSCF): REARN=R_LABORINC+R_BUSINC; MPRINT(TAXSCF): SPEARN=SP_LABORINC+SP_BUSINC; MPRINT(TAXSCF): HHEARN=REARN+SPEARN; MPRINT(TAXSCF): TWSINC=WSINCOME+WSINCSP; MPRINT(TAXSCF): PAYROLLIAB=0; MPRINT(TAXSCF): PAYROLLMTR=0; MPRINT(TAXSCF): PAYROLLATR=0; MPRINT(TAXSCF): IF TAXUNIT=0 THEN DO; MPRINT(TAXSCF): IF (X4106 IN(1 2 3 4 -7) & X4706=0) | (X4106=0 & X4706 IN(1 2 3 4 -7)) | (X4106=0 & X4706=0 & X102=0 & (TWSINC > 0 | TBUSINC > 0)) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(110100,(TWSINC+TBUSINC*(TBUSINC >0)))*.104 + ((TWSINC+TBUSINC*(TBUSINC >0))*.029)*(2013 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*.029)*(2013 EQ 1992); MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 110100)*(100*.104))+ (100*.029)*(2013 GE 1995)+ (100*.029)*(2013 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB >0) THEN PAYROLLATR=100*(PAYROLLIAB/(TWSINC+TBUSINC*(TBUSINC > 0))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X4106 IN(1 2 3 4 -7) & X4706 IN(1 2 3 4 -7)) THEN DO; MPRINT(TAXSCF): IF (X4115 >=1 & X4715 >=1 & HHEARN > 0) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(110100,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*.104 + ((TWSINC+TBUSINC*(TBUSINC >0))*(REARN/HHEARN))*.029*(2013 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*(REARN/HHEARN))*.029*(2013 EQ 1992)+ MIN(110100,((TWSINC+TBUSINC*(TBUSINC >0))*(SPEARN/HHEARN)))*.104 + ((TWSINC+TBUSINC*(TBUSINC >0))*(SPEARN/HHEARN))*.029*(2013 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*(SPEARN/HHEARN))*.029*(2013 EQ 1992); MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(REARN/HHEARN) <= 110100)*(100*.104))+(100*.029)*(2013 GE 1995)+ (100*.029)*(2013 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1)*(REARN/HHEARN) <= 125000); MPRINT(TAXSCF): IF ((MIN(110100,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*.104 + ((TWSINC+TBUSINC*(TBUSINC >0))*(REARN/HHEARN))*.029) > 0) THEN PAYROLLATR=100*((MIN(110100,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*.104 + ((2013 GE 1995)*((TWSINC+TBUSINC*(TBUSINC >0))*(REARN/HHEARN))*.029)+ ((2013 EQ 1992)*(MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*(REARN/HHEARN))*.029))/ ((TWSINC+TBUSINC*(TBUSINC > 0))*(REARN/HHEARN))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X4115 =-1 & X4715=-1) | (X4115 >=1 & X4715=-1) | (X4115=-1 & X4715 >=1) | (HHEARN=0) THEN DO; MPRINT(TAXSCF): IF ((TWSINC+TBUSINC*(TBUSINC >0)) <= 110100) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=(TWSINC+TBUSINC*(TBUSINC >0))*.104+ (TWSINC+TBUSINC*(TBUSINC >0))*.029; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((TWSINC+TBUSINC*(TBUSINC >0)) > 110100) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(2*110100,((TWSINC+TBUSINC*(TBUSINC >0))))*.104+ (TWSINC+TBUSINC*(TBUSINC >0))*.029*(2013 GE 1995)+ MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*.029*(2013 EQ 1992); MPRINT(TAXSCF): END; MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(.5) <= 110100)*(100*.104))+(100*.029)*(2013 GE 1995)+ (100*.029)*(2013 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB*.5 > 0) THEN PAYROLLATR=100*((PAYROLLIAB*.5)/((TWSINC+TBUSINC*(TBUSINC >0))*(.5))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X4106=0 & X4706=0 & X102^=0 & (TWSINC > 0 | TBUSINC > 0)) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=2*(MIN(110100,((TWSINC+TBUSINC*(TBUSINC >0))*(.5)))*.104 + ((TWSINC+TBUSINC*(TBUSINC >0))*(.5))*.029*(2013 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)*(.5)))*.029)*(2013 EQ 1992)); MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(.5) <= 110100)*(100*.104))+(100*.029)*(2013 GE 1995)+ (100*.029)*(2013 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB*.5 > 0) THEN PAYROLLATR=100*((PAYROLLIAB*.5)/((TWSINC+TBUSINC*(TBUSINC >0))*(.5))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TAXUNIT >= 1 THEN DO; MPRINT(TAXSCF): IF (WSINCOME > 0 | TBUSINC > 0) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(110100,(WSINCOME+TBUSINC*(TBUSINC >0)))*.104 + ((WSINCOME+TBUSINC*(TBUSINC >0))*.029)*(2013 GE 1995)+ (MIN(125000,(WSINCOME+TBUSINC*(TBUSINC >0)))*.029)*(2013 EQ 1992); MPRINT(TAXSCF): PAYROLLMTR=(((WSINCOME+TBUSINC*(TBUSINC > 0)+1)<=110100)*(100*.104))+ (100*.029)*(2013 GE 1995)+ 204 The SAS System 13:32 Friday, January 29, 2021 (100*.029)*(2013 EQ 1992)*((WSINCOME+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB >0) THEN PAYROLLATR=100*(PAYROLLIAB/(WSINCOME+TBUSINC*(TBUSINC > 0))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF PAYROLLIAB=0 & PAYROLLMTR=0 & PAYROLLATR=0 & (TWSINC > 0 | TBUSINC > 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= TWSINC= TBUSINC= R_LABORINC= R_BUSINC= R_SOLEPROP= SP_LABORINC= SP_BUSINC= SP_SOLEPROP= REARN= SPEARN= HHEARN= TAXUNIT=/; MPRINT(TAXSCF): * Check for missing variables; MPRINT(TAXSCF): ARRAY CHVARS {*} YY1 Y1 CHARITYAMT X5823 TOTITEMDCT STDDCT AGI AGICL AGIGE50K DEDCTLIM X7372 X7018 X8023 X105 PERSEXP KIDS TOTEXPT FILESTAT TOTEXPTAMT EXPTLIM RAGE SPAGE TUAGE YEAR STATE TAXUNIT WSINCOME WSINCSP TBUSINC NTAXINC INTINC DIVINC CAPGLINC RENTINC UNEMPINC CHSPALINC AFDCINC PENINC OTHINC GSSINC OTHPINC NONTAX RENT UNADJTOTDEDCT CHCAREXP TINCOME TOTXINC STCAPINC LTCAPINC PAYROLLIAB PAYROLLMTR PAYROLLATR LWP KIDSU17 KIDSU18 KIDSU13; MPRINT(TAXSCF): DO I=1 TO DIM(CHVARS); MPRINT(TAXSCF): IF CHVARS{I}=. THEN PUT "MISSING VALUE FOR " Y1= CHVARS{I}=; MPRINT(TAXSCF): END; MPRINT(TAXSCF): RUN; NOTE: The file "null.txt" is: Filename=/disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code/null.txt, Owner Name=taxsim,Group Name=taxsim, Access Permission=-rw-r--r--, Last Modified=29Jan2021:13:33:21 NOTE: 710 records were written to the file "null.txt". The minimum record length was 0. The maximum record length was 372. NOTE: There were 37323 observations read from the data set WORK.SCF. NOTE: The data set WORK.SCF has 37323 observations and 5724 variables. NOTE: DATA statement used (Total process time): real time 1.05 seconds cpu time 1.04 seconds MPRINT(TAXSCF): * Create a dataset for full TAXSIM. Breaking out total itemized deductions into its parts - have applied the limits for the mortgage interest deduction and investment interest expense, but not for charitable contributions.; MPRINT(TAXSCF): PROC SORT DATA=SCF; MPRINT(TAXSCF): BY TAXUNITID; MPRINT(TAXSCF): RUN; NOTE: There were 37323 observations read from the data set WORK.SCF. NOTE: The data set WORK.SCF has 37323 observations and 5724 variables. NOTE: PROCEDURE SORT used (Total process time): real time 0.69 seconds cpu time 0.70 seconds MPRINT(TAXSCF): proc means; MPRINT(TAXSCF): var y1 yy1 year year; MPRINT(TAXSCF): run; NOTE: There were 37323 observations read from the data set WORK.SCF. NOTE: The PROCEDURE MEANS printed page 229. NOTE: PROCEDURE MEANS used (Total process time): real time 0.09 seconds cpu time 0.09 seconds 205 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): * Rename variables to TAXSIM names, use lowercase for TAXSIM file names; MPRINT(TAXSCF): libname swt "../swt/sas"; NOTE: Libref SWT was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/swt/sas MPRINT(TAXSCF): DATA swt.swt13; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): rep=mod(y1,10); MPRINT(TAXSCF): * IF FILESTAT > 0; MPRINT(TAXSCF): mstat=1*(FILESTAT IN(1 4))+2*(FILESTAT IN(2 5))+6*(FILESTAT IN(3)); MPRINT(TAXSCF): otherprop=RENTINC+TBUSINC; MPRINT(TAXSCF): nonprop=CHSPALINC+OTHINC; MPRINT(TAXSCF): otheritem=TOTINVEX+TOTPINEX; MPRINT(TAXSCF): mortgage=ADJDEDCT+X5823; MPRINT(TAXSCF): scorp=0; MPRINT(TAXSCF): pbusinc=0; MPRINT(TAXSCF): pprofinc=0; MPRINT(TAXSCF): sbusinc=0; MPRINT(TAXSCF): sprofinc=0; MPRINT(TAXSCF): tyear=YEAR; MPRINT(TAXSCF): tstate=STATE; MPRINT(TAXSCF): * set idtl=2 to get detailed output from TAXSIM; MPRINT(TAXSCF): idtl=2; MPRINT(TAXSCF): DROP STATE; MPRINT(TAXSCF): RENAME TAXUNITID=taxsimid TUAGE=page SPAGE=sage KIDS=depx KIDSU13=dep13 KIDSU17=dep17 KIDSU18=dep18 WSINCOME=pwages WSINCSP=swages DIVINC=dividends INTINC=intrec STCAPINC=stcg LTCAPINC=ltcg PENINC=pensions GSSINC=gssi UNEMPINC=ui AFDCINC=transfers RENT=rentpaid RESTAXM1=proptax CHCAREXP=childcare tyear=year; MPRINT(TAXSCF): RUN; WARNING: Variable tyear cannot be renamed to year because year already exists. NOTE: There were 37323 observations read from the data set WORK.SCF. NOTE: The data set SWT.SWT13 has 37323 observations and 5737 variables. NOTE: DATA statement used (Total process time): real time 9.70 seconds cpu time 1.37 seconds MPRINT(TAXSCF): proc means; MPRINT(TAXSCF): var y1 yy1 year; MPRINT(TAXSCF): run; NOTE: There were 37323 observations read from the data set SWT.SWT13. NOTE: The PROCEDURE MEANS printed page 230. NOTE: PROCEDURE MEANS used (Total process time): real time 8.41 seconds cpu time 0.54 seconds MPRINT(TAXSCF): libname taxsim "../txpydata/sas"; NOTE: Libref TAXSIM was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/txpydata/sas MPRINT(TAXSCF): proc contents data=swt.swt13; MPRINT(TAXSCF): run; NOTE: PROCEDURE CONTENTS used (Total process time): real time 0.01 seconds 206 The SAS System 13:32 Friday, January 29, 2021 cpu time 0.01 seconds NOTE: The PROCEDURE CONTENTS printed pages 231-341. MPRINT(TAXSCF): DATA taxsim.txpydata13; MPRINT(TAXSCF): SET swt.swt13(KEEP=taxsimid year mstat page sage depx dep13 dep17 dep18 pwages swages dividends intrec stcg ltcg otherprop nonprop pensions gssi ui transfers rentpaid proptax otheritem childcare mortgage scorp pbusinc pprofinc sbusinc sprofinc Y1 YY1 taxunit rep); MPRINT(TAXSCF): y1=Y1; MPRINT(TAXSCF): yy1=YY1; MPRINT(TAXSCF): RUN; NOTE: There were 37323 observations read from the data set SWT.SWT13. NOTE: The data set TAXSIM.TXPYDATA13 has 37323 observations and 35 variables. NOTE: DATA statement used (Total process time): real time 0.34 seconds cpu time 0.12 seconds MPRINT(TAXSCF): proc contents data=taxsim.txpydata13; MPRINT(TAXSCF): run; NOTE: PROCEDURE CONTENTS used (Total process time): real time 0.19 seconds cpu time 0.02 seconds NOTE: The PROCEDURE CONTENTS printed pages 342-343. 3867 3868 %TAXSCF(SYEAR=2010,TYEAR=2009,WYEAR=2007,ITDLIM1=166800,ITDLIM2=83400,ITDL10=1.5,EXPAMT=3650, 3869 EXPAMT2=2433,EXDL9=3,EXPAGIT1=122500,EXPAGIT2=61250,EXLIM1=166800,EXLIM2=250200, 3870 EXLIM3=125100,EXLIM4=208500,STDAMT1=5700,STDAMT2=7100,STDAMT3=11400,STDAMT4=12500, 3871 STDAMT5=13600,STDAMT6=8350,STDAMT7=9750,FILELIM1=9350,FILELIM2=10750,FILELIM3=18700,FILELIM4=19800, 3872 FILELIM5=20900,FILELIM6=3650,FILELIM7=12000,FILELIM8=13400,FILELIM9=15050,FILELIM10=16150,LCGAGI1=.76, 3873 LCLAGI1=.63,LCGAGI2=.76,LCLAGI2=.65,LCGAGI3=.82,LCLAGI3=.59, MPRINT(TAXSCF): * define libraries for SCF public datasets; 3874 PAYTAX=.124,MEDHI=.029,PTLIM=106800,HTAXFILE=HTAXFILE=&SYSPARM); MPRINT(TAXSCF): LIBNAME SCF10 "../orig/sas7bdat" ACCESS=READONLY; NOTE: Libref SCF10 refers to the same physical library as SCF13. NOTE: Libref SCF10 was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/orig/sas7bdat MPRINT(TAXSCF): * directory for datasets created by the program; MPRINT(TAXSCF): LIBNAME OUT "."; NOTE: Libref OUT was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code MPRINT(TAXSCF): * csv file for TAXSIM v32; MPRINT(TAXSCF): FILENAME SCFTAX "txpydata10.csv"; MPRINT(TAXSCF): * csv from TAXSIM v32; MPRINT(TAXSCF): FILENAME TAXSIM "results10.csv"; MPRINT(TAXSCF): * read in public SCF data, assumes dataset name is pXXiY.sas7bdat; MPRINT(TAXSCF): * NOTE: Any changes to the libname or data set name must also be made in this data step; MPRINT(TAXSCF): DATA MAIN; MPRINT(TAXSCF): SET SCF10.P10I6; NOTE: Data file SCF10.P10I6.DATA is in a format that is native to another host, or the file encoding does not match the session encoding. Cross Environment Data Access will be used, which might require additional CPU resources and might reduce performance. 207 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): RUN; NOTE: There were 32410 observations read from the data set SCF10.P10I6. NOTE: The data set WORK.MAIN has 32410 observations and 5351 variables. NOTE: DATA statement used (Total process time): real time 8.37 seconds cpu time 8.37 seconds MPRINT(TAXSCF): PROC SORT DATA=MAIN; MPRINT(TAXSCF): BY Y1; MPRINT(TAXSCF): RUN; NOTE: There were 32410 observations read from the data set WORK.MAIN. NOTE: The data set WORK.MAIN has 32410 observations and 5351 variables. NOTE: PROCEDURE SORT used (Total process time): real time 0.53 seconds cpu time 0.53 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET MAIN; MPRINT(TAXSCF): file "null.txt"; MPRINT(TAXSCF): WGT=(X42001/5); MPRINT(TAXSCF): POP=1; MPRINT(TAXSCF): * setting STATE variable to zero, set to -1 if you want TAXSIM to compute state tax for all 51 states; MPRINT(TAXSCF): STATE=0; MPRINT(TAXSCF): * Small data fix for one case in 1992; MPRINT(TAXSCF): * Small data fix for one case in 1998; MPRINT(TAXSCF): * Small data fix for one case in 2007; MPRINT(TAXSCF): * Small data fix for one case in 2013; MPRINT(TAXSCF): * Payment frequency on other loans not asked in 1989, assumed to be monthly; MPRINT(TAXSCF): * Only one other income variable after 1992, set to zero for 1992 forward; MPRINT(TAXSCF): X5726=0; MPRINT(TAXSCF): X5727=0; MPRINT(TAXSCF): * Spouse/partner in PEU, need to create X7020 for 1989 to 1998; MPRINT(TAXSCF): * A few other recodes to construct variables not asked in 1989 and 1992; MPRINT(TAXSCF): * Number of years with spouse/partner; MPRINT(TAXSCF): IF 2010=X8005 THEN X7370=-1; MPRINT(TAXSCF): ELSE X7370=2010-X8005; MPRINT(TAXSCF): * Number of people in NPEU, need to compute for 1989 to 2004, variable exists for 2007 forward; MPRINT(TAXSCF): * Absent spouse/partner indicator; MPRINT(TAXSCF): IF (X100=5) | (X106=5 & X107 IN(2 5 12)) THEN ABSP_P=1; MPRINT(TAXSCF): ELSE ABSP_P=0; MPRINT(TAXSCF): PERSEXP=1+(X105 IN(1 2))*(ABSP_P=0); MPRINT(TAXSCF): * Including children living elsewhere that are under 18, max of one extra as there is uncertainty about dependent status; MPRINT(TAXSCF): 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) + (X226 IN(4 13))*(X228 < 19) + (X5912 > 0 | X5912=-2); MPRINT(TAXSCF): * For the child tax credit - must be under 17; MPRINT(TAXSCF): 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) + (X226 IN(4 13))*(X228 < 17); MPRINT(TAXSCF): KIDSU18=(X108 IN(4 13))*(X110 < 18) + (X114 IN(4 13))*(X116 < 18) + (X120 IN(4 13))*(X122 < 18) + (X126 IN(4 13))*(X128 < 18) + (X132 IN(4 13))*(X134 < 18) + (X202 IN(4 13))*(X204 < 18) + (X208 IN(4 13))*(X210 < 18) + (X214 IN(4 13))*(X216 < 18) + (X220 IN(4 13))*(X222 < 18) + (X226 IN(4 13))*(X228 < 18); MPRINT(TAXSCF): KIDSU13=(X108 IN(4 13))*(X110 < 13) + (X114 IN(4 13))*(X116 < 13) + (X120 IN(4 13))*(X122 < 13) + 208 The SAS System 13:32 Friday, January 29, 2021 (X126 IN(4 13))*(X128 < 13) + (X132 IN(4 13))*(X134 < 13) + (X202 IN(4 13))*(X204 < 13) + (X208 IN(4 13))*(X210 < 13) + (X214 IN(4 13))*(X216 < 13) + (X220 IN(4 13))*(X222 < 13) + (X226 IN(4 13))*(X228 < 13); MPRINT(TAXSCF): * Indicator for R living with a partner; MPRINT(TAXSCF): LWP=(X8023=2); MPRINT(TAXSCF): RAGE=X14; MPRINT(TAXSCF): * Set spouse/parnter age to zero if absent spouse/partner; MPRINT(TAXSCF): SPAGE=X19*(X7020=2); MPRINT(TAXSCF): * Possible scenarios, not considering NPEU right now, will create those tax units last 1. Married filing jointly households = tax unit 2. Single person households = tax unit 3. Filing separately households = split into two tax units, need to determine if single or married filing separately filing status 4. LWP households = split into two tax units even if one person is a nonfiler For 3. and 4., one of the tax units may have head of household status depending on presence of children For each new tax unit, start with replicate of household data and parse out income, deductions, exemptions; MPRINT(TAXSCF): * Create new observations from married filing separately households or LWP households. 0. Tax unit = household 1. Created tax unit for household head 2. Created tax unit for spouse/parnter 3-8. Created tax unit for NPEU member Note: If R and Sp are legally married for more than one year, treat as married filing joint even if x5746=3,4. If R and Sp LWP and report filing jointly treat as two tax units. If R and Sp married and report filing separately, treat as filing jointly unless either R or Sp has a past marriage. Inspection of the data reveals that too many married couples report filing separately when compared to the IRS data. The past marriage condition put the number closer to the IRS data.; MPRINT(TAXSCF): MARRIED=(X8023=1 & X105=1 & X7370 >= 1 & X7020=2); MPRINT(TAXSCF): IF (X5744 IN(1 6) & X5746=1 & MARRIED=1) | (MARRIED=1 & ((X5744=5 | X5746 IN(3 4)) | (X5746=2 & X7377^=2 & X7392^=2))) | (X8023 > 0 & X105=0 & (X5744=5 | (X5744 IN(1 6) & X5746=0))) | (X8023 > 0 & X105 > 0 & X5744 IN(1 5 6) & X5746=0 & X7020=1) | (X8023=8 & X105=0 & X5744=1 & X5746=1) THEN TAXUNIT=0; MPRINT(TAXSCF): ELSE IF (X5744 IN(1 6) & X5746 IN(2 3 4)) | (X8023 > 0 & X105 > 0 & (X5744=5 | (X5744 IN(1 6) & X5746 IN(0 1)))) | (X8023=1 & X105=1 & X7370=-1 & X5744=1) THEN TAXUNIT=1; MPRINT(TAXSCF): ELSE PUT "MISSING TAXUNIT STATUS " YY1= X5744= X5746= X8023= X105= X7020= MARRIED= X7372= X7018= X7370=; MPRINT(TAXSCF): TUAGE=RAGE; MPRINT(TAXSCF): RUN; NOTE: The file "null.txt" is: Filename=/disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code/null.txt, Owner Name=taxsim,Group Name=taxsim, Access Permission=-rw-r--r--, Last Modified=29Jan2021:13:33:50 NOTE: 0 records were written to the file "null.txt". NOTE: There were 32410 observations read from the data set WORK.MAIN. NOTE: The data set WORK.SCF has 32410 observations and 5369 variables. NOTE: DATA statement used (Total process time): real time 0.70 seconds cpu time 0.70 seconds MPRINT(TAXSCF): DATA NEWUNITS; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): IF TAXUNIT=1; MPRINT(TAXSCF): TAXUNIT=2; MPRINT(TAXSCF): TUAGE=SPAGE; MPRINT(TAXSCF): SPAGE=0; MPRINT(TAXSCF): RUN; NOTE: There were 32410 observations read from the data set WORK.SCF. NOTE: The data set WORK.NEWUNITS has 3393 observations and 5369 variables. NOTE: DATA statement used (Total process time): real time 0.31 seconds cpu time 0.33 seconds 209 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF NEWUNITS; MPRINT(TAXSCF): RUN; NOTE: There were 32410 observations read from the data set WORK.SCF. NOTE: There were 3393 observations read from the data set WORK.NEWUNITS. NOTE: The data set WORK.SCF has 35803 observations and 5369 variables. NOTE: DATA statement used (Total process time): real time 0.71 seconds cpu time 0.71 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): * Codes for filestat, assigning status even if did not file, will determine non-filer status later, filing status for split tax units done after splitting up income 1= Single 2= Married filing jointly 3= Married filing separately 4= Head of HH 5= Qualified widower; MPRINT(TAXSCF): FILESTAT=0; MPRINT(TAXSCF): IF TAXUNIT=0 THEN DO; MPRINT(TAXSCF): IF (MARRIED=1) THEN FILESTAT=2; MPRINT(TAXSCF): ELSE IF MARRIED=0 THEN DO; MPRINT(TAXSCF): IF PERSEXP=1 & KIDS=0 THEN FILESTAT=1; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS > 0 & X8023=5 & X7372=5 & X8007>=2007 THEN FILESTAT=5; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS > 0 THEN FILESTAT=4; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTEXPT=PERSEXP+KIDS; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * No AGI variables starting in 2010; MPRINT(TAXSCF): * Coding income variables with -1 and -2 to zero; MPRINT(TAXSCF): ARRAY NEG {*} X5704 X5714 X5724 X5726 X5729; MPRINT(TAXSCF): DO I=1 TO DIM(NEG); MPRINT(TAXSCF): IF NEG{I} IN(-2 -1) THEN NEG{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Income from wages and business; MPRINT(TAXSCF): R_LABORINC=MAX(0,X4112) MPRINT(ACONV): *((X4113=2)*52.18+(X4113=3)*26.09+(X4113=4)*12+(X4113=5)*4+(X4113=6)+(X4113=8)+ (X4113=11)*2+(X4113=12)*6+(X4113=31)*24+(X4113=14)+(X4113=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): SP_LABORINC=MAX(0,X4712) MPRINT(ACONV): *((X4713=2)*52.18+(X4713=3)*26.09+(X4713=4)*12+(X4713=5)*4+(X4713=6)+(X4713=8)+ (X4713=11)*2+(X4713=12)*6+(X4713=31)*24+(X4713=14)+(X4713=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): R_BUSINC=MAX(0,X4131) MPRINT(ACONV): *((X4132=2)*52.18+(X4132=3)*26.09+(X4132=4)*12+(X4132=5)*4+(X4132=6)+(X4132=8)+ (X4132=11)*2+(X4132=12)*6+(X4132=31)*24+(X4132=14)+(X4132=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): SP_BUSINC=MAX(0,X4731) MPRINT(ACONV): *((X4732=2)*52.18+(X4732=3)*26.09+(X4732=4)*12+(X4732=5)*4+(X4732=6)+(X4732=8)+ (X4732=11)*2+(X4732=12)*6+(X4732=31)*24+(X4732=14)+(X4732=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): * Income from pensions and tax-deferred account withdrawals. No withdrawal information for IRAs or future pensions prior to 2004. No withdrawal information for any tax-deferred accounts, aside from other income, prior to 2001; MPRINT(TAXSCF): R_REGPEN=MAX(0,(X5318 MPRINT(ACONV): *((X5319=2)*52.18+(X5319=3)*26.09+(X5319=4)*12+(X5319=5)*4+(X5319=6)+(X5319=8)+ (X5319=11)*2+(X5319=12)*6+(X5319=31)*24+(X5319=14)+(X5319=22)) 210 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): *(X5315=1)*(X5317>=1))) +MAX(0,(X5326 MPRINT(ACONV): *((X5327=2)*52.18+(X5327=3)*26.09+(X5327=4)*12+(X5327=5)*4+(X5327=6)+(X5327=8)+ (X5327=11)*2+(X5327=12)*6+(X5327=31)*24+(X5327=14)+(X5327=22)) MPRINT(TAXSCF): *(X5323=1)*(X5325>=1))) +MAX(0,(X5334 MPRINT(ACONV): *((X5335=2)*52.18+(X5335=3)*26.09+(X5335=4)*12+(X5335=5)*4+(X5335=6)+(X5335=8)+ (X5335=11)*2+(X5335=12)*6+(X5335=31)*24+(X5335=14)+(X5335=22)) MPRINT(TAXSCF): *(X5331=1)*(X5333>=1))) +MAX(0,(X5418 MPRINT(ACONV): *((X5419=2)*52.18+(X5419=3)*26.09+(X5419=4)*12+(X5419=5)*4+(X5419=6)+(X5419=8)+ (X5419=11)*2+(X5419=12)*6+(X5419=31)*24+(X5419=14)+(X5419=22)) MPRINT(TAXSCF): *(X5415=1)*(X5417>=1))); MPRINT(TAXSCF): R_WITHDRAW=X6558+(X6574*.5)+MAX(0,(X6464 MPRINT(ACONV): *((X6465=2)*52.18+(X6465=3)*26.09+(X6465=4)*12+(X6465=5)*4+(X6465=6)+(X6465=8)+ (X6465=11)*2+(X6465=12)*6+(X6465=31)*24+(X6465=14)+(X6465=22)) MPRINT(TAXSCF): *(X5315=1))) +MAX(0,(X6469 MPRINT(ACONV): *((X6470=2)*52.18+(X6470=3)*26.09+(X6470=4)*12+(X6470=5)*4+(X6470=6)+(X6470=8)+ (X6470=11)*2+(X6470=12)*6+(X6470=31)*24+(X6470=14)+(X6470=22)) MPRINT(TAXSCF): *(X5323=1)))+MAX(0,(X6474 MPRINT(ACONV): *((X6475=2)*52.18+(X6475=3)*26.09+(X6475=4)*12+(X6475=5)*4+(X6475=6)+(X6475=8)+ (X6475=11)*2+(X6475=12)*6+(X6475=31)*24+(X6475=14)+(X6475=22)) MPRINT(TAXSCF): *(X5331=1))) +MAX(0,(X6479 MPRINT(ACONV): *((X6480=2)*52.18+(X6480=3)*26.09+(X6480=4)*12+(X6480=5)*4+(X6480=6)+(X6480=8)+ (X6480=11)*2+(X6480=12)*6+(X6480=31)*24+(X6480=14)+(X6480=22)) MPRINT(TAXSCF): *(X5415=1)))+MAX(0,(X6965 MPRINT(ACONV): *((X6966=2)*52.18+(X6966=3)*26.09+(X6966=4)*12+(X6966=5)*4+(X6966=6)+(X6966=8)+ (X6966=11)*2+(X6966=12)*6+(X6966=31)*24+(X6966=14)+(X6966=22)) MPRINT(TAXSCF): *(X5606=1))) +MAX(0,(X6971 MPRINT(ACONV): *((X6972=2)*52.18+(X6972=3)*26.09+(X6972=4)*12+(X6972=5)*4+(X6972=6)+(X6972=8)+ (X6972=11)*2+(X6972=12)*6+(X6972=31)*24+(X6972=14)+(X6972=22)) MPRINT(TAXSCF): *(X5614=1)))+MAX(0,(X6977 MPRINT(ACONV): *((X6978=2)*52.18+(X6978=3)*26.09+(X6978=4)*12+(X6978=5)*4+(X6978=6)+(X6978=8)+ (X6978=11)*2+(X6978=12)*6+(X6978=31)*24+(X6978=14)+(X6978=22)) MPRINT(TAXSCF): *(X5622=1))) +MAX(0,(X6983 MPRINT(ACONV): *((X6984=2)*52.18+(X6984=3)*26.09+(X6984=4)*12+(X6984=5)*4+(X6984=6)+(X6984=8)+ (X6984=11)*2+(X6984=12)*6+(X6984=31)*24+(X6984=14)+(X6984=22)) MPRINT(TAXSCF): *(X5630=1)))+(X5724)*(X5725=11)*.5; MPRINT(TAXSCF): SP_REGPEN=MAX(0,(X5318 MPRINT(ACONV): *((X5319=2)*52.18+(X5319=3)*26.09+(X5319=4)*12+(X5319=5)*4+(X5319=6)+(X5319=8)+ (X5319=11)*2+(X5319=12)*6+(X5319=31)*24+(X5319=14)+(X5319=22)) MPRINT(TAXSCF): *(X5315=2)*(X5317>=1))) +MAX(0,(X5326 MPRINT(ACONV): *((X5327=2)*52.18+(X5327=3)*26.09+(X5327=4)*12+(X5327=5)*4+(X5327=6)+(X5327=8)+ (X5327=11)*2+(X5327=12)*6+(X5327=31)*24+(X5327=14)+(X5327=22)) MPRINT(TAXSCF): *(X5323=2)*(X5325>=1))) +MAX(0,(X5334 MPRINT(ACONV): *((X5335=2)*52.18+(X5335=3)*26.09+(X5335=4)*12+(X5335=5)*4+(X5335=6)+(X5335=8)+ (X5335=11)*2+(X5335=12)*6+(X5335=31)*24+(X5335=14)+(X5335=22)) MPRINT(TAXSCF): *(X5331=2)*(X5333>=1))) +MAX(0,(X5418 MPRINT(ACONV): *((X5419=2)*52.18+(X5419=3)*26.09+(X5419=4)*12+(X5419=5)*4+(X5419=6)+(X5419=8)+ (X5419=11)*2+(X5419=12)*6+(X5419=31)*24+(X5419=14)+(X5419=22)) MPRINT(TAXSCF): *(X5415=2)*(X5417>=1))); MPRINT(TAXSCF): SP_WITHDRAW=X6566+(X6574*.5)+MAX(0,(X6464 MPRINT(ACONV): *((X6465=2)*52.18+(X6465=3)*26.09+(X6465=4)*12+(X6465=5)*4+(X6465=6)+(X6465=8)+ (X6465=11)*2+(X6465=12)*6+(X6465=31)*24+(X6465=14)+(X6465=22)) MPRINT(TAXSCF): *(X5315=2))) +MAX(0,(X6469 MPRINT(ACONV): *((X6470=2)*52.18+(X6470=3)*26.09+(X6470=4)*12+(X6470=5)*4+(X6470=6)+(X6470=8)+ (X6470=11)*2+(X6470=12)*6+(X6470=31)*24+(X6470=14)+(X6470=22)) MPRINT(TAXSCF): *(X5323=2)))+MAX(0,(X6474 MPRINT(ACONV): *((X6475=2)*52.18+(X6475=3)*26.09+(X6475=4)*12+(X6475=5)*4+(X6475=6)+(X6475=8)+ (X6475=11)*2+(X6475=12)*6+(X6475=31)*24+(X6475=14)+(X6475=22)) MPRINT(TAXSCF): *(X5331=2))) +MAX(0,(X6479 211 The SAS System 13:32 Friday, January 29, 2021 MPRINT(ACONV): *((X6480=2)*52.18+(X6480=3)*26.09+(X6480=4)*12+(X6480=5)*4+(X6480=6)+(X6480=8)+ (X6480=11)*2+(X6480=12)*6+(X6480=31)*24+(X6480=14)+(X6480=22)) MPRINT(TAXSCF): *(X5415=2)))+MAX(0,(X6965 MPRINT(ACONV): *((X6966=2)*52.18+(X6966=3)*26.09+(X6966=4)*12+(X6966=5)*4+(X6966=6)+(X6966=8)+ (X6966=11)*2+(X6966=12)*6+(X6966=31)*24+(X6966=14)+(X6966=22)) MPRINT(TAXSCF): *(X5606=2))) +MAX(0,(X6971 MPRINT(ACONV): *((X6972=2)*52.18+(X6972=3)*26.09+(X6972=4)*12+(X6972=5)*4+(X6972=6)+(X6972=8)+ (X6972=11)*2+(X6972=12)*6+(X6972=31)*24+(X6972=14)+(X6972=22)) MPRINT(TAXSCF): *(X5614=2)))+MAX(0,(X6977 MPRINT(ACONV): *((X6978=2)*52.18+(X6978=3)*26.09+(X6978=4)*12+(X6978=5)*4+(X6978=6)+(X6978=8)+ (X6978=11)*2+(X6978=12)*6+(X6978=31)*24+(X6978=14)+(X6978=22)) MPRINT(TAXSCF): *(X5622=2))) +MAX(0,(X6983 MPRINT(ACONV): *((X6984=2)*52.18+(X6984=3)*26.09+(X6984=4)*12+(X6984=5)*4+(X6984=6)+(X6984=8)+ (X6984=11)*2+(X6984=12)*6+(X6984=31)*24+(X6984=14)+(X6984=22)) MPRINT(TAXSCF): *(X5630=2)))+(X5724)*(X5725=11)*.5; MPRINT(TAXSCF): * For new tax units need to split up income and determine which new tax unit is assigned which deductions and exemptions. Also need to zero out any variables not relevant to the new tax unit (ex. spouses wages); MPRINT(TAXSCF): IF TAXUNIT IN(1 2) THEN DO; MPRINT(TAXSCF): * age; MPRINT(TAXSCF): IF (TAXUNIT=1) THEN SPAGE=0; MPRINT(TAXSCF): * wages; MPRINT(TAXSCF): IF (TAXUNIT=1 & (R_LABORINC+SP_LABORINC>0)) THEN WSINCOME=MAX(0,X5702)*(R_LABORINC/(R_LABORINC+SP_LABORINC))*(R_LABORINC>0); MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & (R_LABORINC+SP_LABORINC>0)) THEN WSINCOME=MAX(0,X5702)*(SP_LABORINC/(R_LABORINC+SP_LABORINC))*(SP_LABORINC>0); MPRINT(TAXSCF): ELSE WSINCOME=MAX(0,X5702)*.5; MPRINT(TAXSCF): WSINCSP=0; MPRINT(TAXSCF): * business income; MPRINT(TAXSCF): R_SOLEPROP=(X4106 IN(2 3 4) | (X3113=1 & X3119=2) | (X3213=1 & X3219=2)); MPRINT(TAXSCF): SP_SOLEPROP=(X4706 IN(2 3 4) | (X3114=1 & X3119=2) | (X3214=1 & X3219=2)); MPRINT(TAXSCF): IF (TAXUNIT=1 & (R_BUSINC+SP_BUSINC>0) & (R_SOLEPROP=1 | SP_SOLEPROP=1)) THEN DO; MPRINT(TAXSCF): IF (R_SOLEPROP=1 & SP_SOLEPROP=1) THEN TBUSINC=X5704*(R_BUSINC/(R_BUSINC+SP_BUSINC))*(R_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=1 & SP_SOLEPROP=0) THEN TBUSINC=X5704; MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=0 & SP_SOLEPROP=1) THEN TBUSINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & (R_BUSINC+SP_BUSINC>0) & (R_SOLEPROP=1 | SP_SOLEPROP=1)) THEN DO; MPRINT(TAXSCF): IF (R_SOLEPROP=1 & SP_SOLEPROP=1) THEN TBUSINC=X5704*(SP_BUSINC/(R_BUSINC+SP_BUSINC))*(SP_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=0 & SP_SOLEPROP=1) THEN TBUSINC=X5704; MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=1 & SP_SOLEPROP=0) THEN TBUSINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE TBUSINC=X5704*.5; MPRINT(TAXSCF): * interest, dividends, and capital gains - just split 50-50; MPRINT(TAXSCF): NTAXINC= MAX(0,X5706)*.5; MPRINT(TAXSCF): INTINC= MAX(0,X5708)*.5; MPRINT(TAXSCF): DIVINC= MAX(0,X5710)*.5; MPRINT(TAXSCF): IF X5712=-1 THEN CAPGLINC=0; MPRINT(TAXSCF): ELSE CAPGLINC=X5712*.5; MPRINT(TAXSCF): * rent, royalties, partnership and scorp income; MPRINT(TAXSCF): R_PARTNER_SCORP=(X4106 IN(2 3 4) | (X3113=1 & X3119 IN(1 3 6 11 12 15)) | (X3213=1 & X3219 IN(1 3 6 11 12 15))); MPRINT(TAXSCF): SP_PARTNER_SCORP=(X4106 IN(2 3 4) | (X3114=1 & X3119 IN(1 3 6 11 12 15)) | (X3214=1 & X3219 IN(1 3 6 11 12 15))); MPRINT(TAXSCF): IF (TAXUNIT=1 & (R_BUSINC+SP_BUSINC>0) & (R_PARTNER_SCORP=1 | SP_PARTNER_SCORP=1)) THEN DO; MPRINT(TAXSCF): IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=1) THEN RENTINC=X5714*(R_BUSINC/(R_BUSINC+SP_BUSINC))*(R_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=0) THEN RENTINC=X5714; MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=0 & SP_PARTNER_SCORP=1) THEN RENTINC=0; MPRINT(TAXSCF): END; 212 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & (R_BUSINC+SP_BUSINC>0) & (R_PARTNER_SCORP=1 | SP_PARTNER_SCORP=1)) THEN DO; MPRINT(TAXSCF): IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=1) THEN RENTINC=X5714*(SP_BUSINC/(R_BUSINC+SP_BUSINC))*(SP_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=0 & SP_PARTNER_SCORP=1) THEN RENTINC=X5714; MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=0) THEN RENTINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE RENTINC=X5714*.5; MPRINT(TAXSCF): * unemployment income, no questions about unemployed in past 12 months prior to 1998; MPRINT(TAXSCF): IF (TAXUNIT=1) THEN DO; MPRINT(TAXSCF): IF (X6780=1) THEN UNEMPINC=MAX(0,X5716)*(X6784 IN(0 5))+MAX(0,X5716)*(X6784=1)*.5; MPRINT(TAXSCF): ELSE IF (X6780=5 & X6784=1) THEN UNEMPINC=0; MPRINT(TAXSCF): ELSE UNEMPINC=MAX(0,X5716)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2) THEN DO; MPRINT(TAXSCF): IF (X6784=1) THEN UNEMPINC=MAX(0,X5716)*(X6780 IN(0 5))+MAX(0,X5716)*(X6780=1)*.5; MPRINT(TAXSCF): ELSE IF (X6784=5 & X6780=1) THEN UNEMPINC=0; MPRINT(TAXSCF): ELSE UNEMPINC=MAX(0,X5716)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * child support and alimony income; MPRINT(TAXSCF): IF (TAXUNIT=1 & X7377=2) THEN DO; MPRINT(TAXSCF): CHSPALINC=MAX(0,X5718)*(X7392^=2)+MAX(0,X5718)*(X7392=2)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & X7392=2) THEN DO; MPRINT(TAXSCF): CHSPALINC=MAX(0,X5718)*(X7377^=2)+MAX(0,X5718)*(X7377=2)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE CHSPALINC=MAX(0,X5718)*.5; MPRINT(TAXSCF): * government transfers, split 50/50; MPRINT(TAXSCF): AFDCINC=MAX(0,X5720)*.5; MPRINT(TAXSCF): * other income, split 50/50 - remove other income that is non-taxable, such as scholarships/grants, inheritances/gifts/, support from family or others, also remove IRA/Keogh income; MPRINT(TAXSCF): * special fix for 1992, removing other income coded 14, repayment of debts, it appears the total amount of the debt was reported, not just the interest on the debt; MPRINT(TAXSCF): OTHINC= (X5724)*(X5725 NOT IN(3 11 12 13 28))*.5+(X5726)*(X5727 NOT IN(3 11 12 13 28))*.5; MPRINT(TAXSCF): * social security and pension income, adding in withdrawals from IRA/Keogh/401ks; MPRINT(TAXSCF): R_GSSINC=MAX(0,(X5306 MPRINT(ACONV): *((X5307=2)*52.18+(X5307=3)*26.09+(X5307=4)*12+(X5307=5)*4+(X5307=6)+(X5307=8)+ (X5307=11)*2+(X5307=12)*6+(X5307=31)*24+(X5307=14)+(X5307=22)) MPRINT(TAXSCF): *(X5305>=1))); MPRINT(TAXSCF): SP_GSSINC=MAX(0,(X5311 MPRINT(ACONV): *((X5312=2)*52.18+(X5312=3)*26.09+(X5312=4)*12+(X5312=5)*4+(X5312=6)+(X5312=8)+ (X5312=11)*2+(X5312=12)*6+(X5312=31)*24+(X5312=14)+(X5312=22)) MPRINT(TAXSCF): *(X5310>=1))); MPRINT(TAXSCF): T_GSSINC=MAX(0,((X5306 MPRINT(ACONV): *((X5307=2)*52.18+(X5307=3)*26.09+(X5307=4)*12+(X5307=5)*4+(X5307=6)+(X5307=8)+ (X5307=11)*2+(X5307=12)*6+(X5307=31)*24+(X5307=14)+(X5307=22)) MPRINT(TAXSCF): *(X5305>=1))+(X5311 MPRINT(ACONV): *((X5312=2)*52.18+(X5312=3)*26.09+(X5312=4)*12+(X5312=5)*4+(X5312=6)+(X5312=8)+ (X5312=11)*2+(X5312=12)*6+(X5312=31)*24+(X5312=14)+(X5312=22)) MPRINT(TAXSCF): *(X5310>=1)))); MPRINT(TAXSCF): NOSS_X5722=MAX(0,(X5722-T_GSSINC)); MPRINT(TAXSCF): IF (TAXUNIT=1) THEN DO; MPRINT(TAXSCF): IF (R_REGPEN > 0) THEN PENINC=NOSS_X5722*(R_REGPEN/(R_REGPEN+SP_REGPEN))+R_WITHDRAW; MPRINT(TAXSCF): ELSE IF (R_REGPEN=0 & R_WITHDRAW > 0) THEN PENINC=R_WITHDRAW; MPRINT(TAXSCF): ELSE IF (R_REGPEN=0 & R_WITHDRAW=0 & SP_REGPEN > 0) THEN PENINC=0; MPRINT(TAXSCF): ELSE IF (R_REGPEN=0 & R_WITHDRAW=0 & SP_REGPEN=0) THEN PENINC=NOSS_X5722*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2) THEN DO; MPRINT(TAXSCF): IF (SP_REGPEN > 0) THEN PENINC=NOSS_X5722*(SP_REGPEN/(R_REGPEN+SP_REGPEN))+SP_WITHDRAW; 213 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE IF (SP_REGPEN=0 & SP_WITHDRAW > 0) THEN PENINC=SP_WITHDRAW; MPRINT(TAXSCF): ELSE IF (SP_REGPEN=0 & SP_WITHDRAW=0 & R_REGPEN > 0) THEN PENINC=0; MPRINT(TAXSCF): ELSE IF (SP_REGPEN=0 & SP_WITHDRAW=0 & R_REGPEN=0) THEN PENINC=NOSS_X5722*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): GSSINC=MAX(0,R_GSSINC)*(TAXUNIT=1)+MAX(0,SP_GSSINC)*(TAXUNIT=2); MPRINT(TAXSCF): OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; MPRINT(TAXSCF): NONTAX=NTAXINC+AFDCINC; MPRINT(TAXSCF): RENT=MAX(0,(X602 MPRINT(ACONV): *((X603=2)*52.18+(X603=3)*26.09+(X603=4)*12+(X603=5)*4+(X603=6)+(X603=8)+ (X603=11)*2+(X603=12)*6+(X603=31)*24+(X603=14)+(X603=22)) MPRINT(TAXSCF): ),(X612 MPRINT(ACONV): *((X613=2)*52.18+(X613=3)*26.09+(X613=4)*12+(X613=5)*4+(X613=6)+(X613=8)+ (X613=11)*2+(X613=12)*6+(X613=31)*24+(X613=14)+(X613=22)) MPRINT(TAXSCF): ),(X619 MPRINT(ACONV): *((X620=2)*52.18+(X620=3)*26.09+(X620=4)*12+(X620=5)*4+(X620=6)+(X620=8)+ (X620=11)*2+(X620=12)*6+(X620=31)*24+(X620=14)+(X620=22)) MPRINT(TAXSCF): ), (X708 MPRINT(ACONV): *((X709=2)*52.18+(X709=3)*26.09+(X709=4)*12+(X709=5)*4+(X709=6)+(X709=8)+ (X709=11)*2+(X709=12)*6+(X709=31)*24+(X709=14)+(X709=22)) MPRINT(TAXSCF): ))*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TAXUNIT=0 THEN DO; MPRINT(TAXSCF): R_SOLEPROP=(X4106 IN(2 3 4) | (X3113=1 & X3119=2) | (X3213=1 & X3219=2)); MPRINT(TAXSCF): SP_SOLEPROP=(X4706 IN(2 3 4) | (X3114=1 & X3119=2) | (X3214=1 & X3219=2)); MPRINT(TAXSCF): * Split wages across primary and secondary earner for married filing jointly households; MPRINT(TAXSCF): IF FILESTAT^=2 THEN DO; MPRINT(TAXSCF): WSINCOME=MAX(0,X5702); MPRINT(TAXSCF): WSINCSP=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF FILESTAT=2 THEN DO; MPRINT(TAXSCF): IF ((R_LABORINC > 0 & SP_LABORINC=0) | (R_LABORINC=0 & SP_LABORINC > 0) | (R_LABORINC=0 & SP_LABORINC=0)) THEN DO; MPRINT(TAXSCF): WSINCOME=MAX(0,X5702); MPRINT(TAXSCF): WSINCSP=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (R_LABORINC > 0 & SP_LABORINC > 0) THEN DO; MPRINT(TAXSCF): WSINCOME=MAX(0,X5702)*(R_LABORINC/(R_LABORINC+SP_LABORINC)); MPRINT(TAXSCF): WSINCSP=MAX(0,X5702)*(SP_LABORINC/(R_LABORINC+SP_LABORINC)); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TBUSINC = X5704; MPRINT(TAXSCF): NTAXINC= MAX(0,X5706); MPRINT(TAXSCF): INTINC= MAX(0,X5708); MPRINT(TAXSCF): DIVINC= MAX(0,X5710); MPRINT(TAXSCF): IF X5712=-1 THEN CAPGLINC=0; MPRINT(TAXSCF): ELSE CAPGLINC=X5712; MPRINT(TAXSCF): RENTINC= X5714; MPRINT(TAXSCF): UNEMPINC = MAX(0,X5716); MPRINT(TAXSCF): CHSPALINC=MAX(0,X5718); MPRINT(TAXSCF): AFDCINC = MAX(0,X5720); MPRINT(TAXSCF): * Starting in 2004, IRA/Keogh/401K type income is not reported in other income, instead withdrawals are reported separately during the questions about the assets, so need to add the withdrawals to pension income. There may be a few withdrawals still reported as other income if the asset account was closed or emptied out during the year prior to the survey.; MPRINT(TAXSCF): * also remove other income that is non-taxable, such as scholarships/grants, inheritances/gifts/, support from family or others; MPRINT(TAXSCF): * special fix for 1992, removing other income coded 14, repayment of debts, it appears the total amount of the debt was report, not just the interest on the debt; 214 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): OTHINC= (X5724)*(X5725 NOT IN(3 11 12 13 28))+(X5726)*(X5727 NOT IN(3 11 12 13 28)); MPRINT(TAXSCF): GSSINC=MAX(0,((X5306 MPRINT(ACONV): *((X5307=2)*52.18+(X5307=3)*26.09+(X5307=4)*12+(X5307=5)*4+(X5307=6)+(X5307=8)+ (X5307=11)*2+(X5307=12)*6+(X5307=31)*24+(X5307=14)+(X5307=22)) MPRINT(TAXSCF): *(X5305>=1))+(X5311 MPRINT(ACONV): *((X5312=2)*52.18+(X5312=3)*26.09+(X5312=4)*12+(X5312=5)*4+(X5312=6)+(X5312=8)+ (X5312=11)*2+(X5312=12)*6+(X5312=31)*24+(X5312=14)+(X5312=22)) MPRINT(TAXSCF): *(X5310>=1)))); MPRINT(TAXSCF): IF GSSINC=0 THEN PENINC= MAX(0,X5722)+R_WITHDRAW+SP_WITHDRAW; MPRINT(TAXSCF): ELSE IF (GSSINC > 0) THEN PENINC=MAX(0,(X5722-GSSINC)) +R_WITHDRAW+SP_WITHDRAW; MPRINT(TAXSCF): OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; MPRINT(TAXSCF): NONTAX=NTAXINC+AFDCINC; MPRINT(TAXSCF): RENT=MAX(0,(X602 MPRINT(ACONV): *((X603=2)*52.18+(X603=3)*26.09+(X603=4)*12+(X603=5)*4+(X603=6)+(X603=8)+ (X603=11)*2+(X603=12)*6+(X603=31)*24+(X603=14)+(X603=22)) MPRINT(TAXSCF): ),(X612 MPRINT(ACONV): *((X613=2)*52.18+(X613=3)*26.09+(X613=4)*12+(X613=5)*4+(X613=6)+(X613=8)+ (X613=11)*2+(X613=12)*6+(X613=31)*24+(X613=14)+(X613=22)) MPRINT(TAXSCF): ),(X619 MPRINT(ACONV): *((X620=2)*52.18+(X620=3)*26.09+(X620=4)*12+(X620=5)*4+(X620=6)+(X620=8)+ (X620=11)*2+(X620=12)*6+(X620=31)*24+(X620=14)+(X620=22)) MPRINT(TAXSCF): ), (X708 MPRINT(ACONV): *((X709=2)*52.18+(X709=3)*26.09+(X709=4)*12+(X709=5)*4+(X709=6)+(X709=8)+ (X709=11)*2+(X709=12)*6+(X709=31)*24+(X709=14)+(X709=22)) MPRINT(TAXSCF): )); MPRINT(TAXSCF): END; MPRINT(TAXSCF): * AGI - note that starting in 2010, AGI questions no longer asked, so using total income minus non-taxable income plus IRA/401k withdrawals as a proxy. No information on adjustments to AGI; MPRINT(TAXSCF): AGI=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC+UNEMPINC+CHSPALINC+OTHINC+PENINC+GSSINC; MPRINT(TAXSCF): IF AGI=-1 THEN AGI=0; MPRINT(TAXSCF): AGIGE50K=(AGI>=50000); MPRINT(TAXSCF): AGICL=1*(AGI < 50000)+2*(50000 <= AGI < 100000)+3*(AGI >= 100000); MPRINT(TAXSCF): * For allocating itemized deductions - mortgage interest, investment interest expense, property taxes, and charitable contributions - between new tax units, assume tax unit with higher income assigned all itemized deductions. Creating a flag here for use in computing deductions later in the program. Using wages, business, and pension income as income measure (all other income components are split 50/50 between the new tax units).; MPRINT(TAXSCF): IF (TAXUNIT IN(1 2)) THEN DO; MPRINT(TAXSCF): R_TINCOME=R_LABORINC+R_BUSINC+R_REGPEN+R_WITHDRAW; MPRINT(TAXSCF): SP_TINCOME=SP_LABORINC+SP_BUSINC+SP_REGPEN+SP_WITHDRAW; MPRINT(TAXSCF): ITEMDEDCT_FLAG=(TAXUNIT=1 & R_TINCOME >= SP_TINCOME) +(TAXUNIT=2 & SP_TINCOME > R_TINCOME); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TAXUNIT=0 THEN ITEMDEDCT_FLAG=1; MPRINT(TAXSCF): * Set personal exemption to one for split households, divide kids among split households, if one, give to both tax units, if even number, split evenly between tax units, if odd number, give more to higher income tax unit; MPRINT(TAXSCF): IF TAXUNIT IN(1 2) THEN DO; MPRINT(TAXSCF): PERSEXP=1; MPRINT(TAXSCF): IF KIDS>1 THEN DO; MPRINT(TAXSCF): IF (KIDSU13>0 & MOD(KIDSU13,2)=0) THEN KIDSU13=KIDSU13/2; MPRINT(TAXSCF): ELSE IF (KIDSU13>0 & MOD(KIDSU13,2)^=0) THEN DO; MPRINT(TAXSCF): KIDSU13=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU13/2,1))+ (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU13/2)-.5); MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (KIDSU17>0 & MOD(KIDSU17,2)=0) THEN KIDSU17=KIDSU17/2; MPRINT(TAXSCF): ELSE IF (KIDSU17>0 & MOD(KIDSU17,2)^=0) THEN DO; MPRINT(TAXSCF): KIDSU17=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU17/2,1))+ (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU17/2)-.5); MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (KIDSU18>0 & MOD(KIDSU18,2)=0) THEN KIDSU18=KIDSU18/2; MPRINT(TAXSCF): ELSE IF (KIDSU18>0 & MOD(KIDSU18,2)^=0) THEN DO; MPRINT(TAXSCF): KIDSU18=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU18/2,1))+ (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU18/2)-.5); MPRINT(TAXSCF): END; MPRINT(TAXSCF): KIDS=KIDSU13+KIDSU17+KIDSU18; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF PERSEXP=1 & MARRIED=1 THEN FILESTAT=3; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS=0 & MARRIED=0 THEN FILESTAT=1; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS>0 & MARRIED=0 THEN FILESTAT=4; MPRINT(TAXSCF): TOTEXPT=PERSEXP+KIDS; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF FILESTAT=0 THEN PUT "MISSING FILING STATUS " Y1= X5744= X5746= TAXUNIT= MARRIED= KIDS= PERSEXP=; MPRINT(TAXSCF): RUN; NOTE: There were 35803 observations read from the data set WORK.SCF. NOTE: The data set WORK.SCF has 35803 observations and 5411 variables. NOTE: DATA statement used (Total process time): real time 0.85 seconds cpu time 0.85 seconds MPRINT(TAXSCF): * Create tax units based on NPEU members. If there are multiple NPEU members, need to allocate income, assets, and debt across the members; MPRINT(TAXSCF): DATA TEMP NPEU; MPRINT(TAXSCF): SET SCF(WHERE=(TAXUNIT IN(0 1) & X7050 >=1)); MPRINT(TAXSCF): file "null.txt"; MPRINT(TAXSCF): TAXUNIT=2; MPRINT(TAXSCF): ARRAY NPEUAGE {*} X110 X116 X122 X128 X134 X204 X210 X216 X222 X228; MPRINT(TAXSCF): ARRAY LIVEWITH {*} X112 X118 X124 X130 X136 X206 X212 X218 X224 X230; MPRINT(TAXSCF): ARRAY FINDEP {*} X113 X119 X125 X131 X137 X207 X213 X219 X225 X231; MPRINT(TAXSCF): DO I=1 TO DIM(LIVEWITH); MPRINT(TAXSCF): IF LIVEWITH{I} IN(1 2 3 4) & FINDEP{I} IN(2 3 4 5) THEN DO; MPRINT(TAXSCF): TAXUNIT=TAXUNIT+1; MPRINT(TAXSCF): TUAGE=NPEUAGE{I}; MPRINT(TAXSCF): SPAGE=0; MPRINT(TAXSCF): OUTPUT NPEU; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): RUN; NOTE: The file "null.txt" is: Filename=/disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code/null.txt, Owner Name=taxsim,Group Name=taxsim, Access Permission=-rw-r--r--, Last Modified=29Jan2021:13:33:53 NOTE: 0 records were written to the file "null.txt". NOTE: There were 3495 observations read from the data set WORK.SCF. WHERE TAXUNIT in (0, 1) and (X7050>=1); NOTE: The data set WORK.TEMP has 0 observations and 5411 variables. NOTE: The data set WORK.NPEU has 4610 observations and 5411 variables. NOTE: DATA statement used (Total process time): real time 0.18 seconds cpu time 0.18 seconds 216 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): DATA NPEU; MPRINT(TAXSCF): SET NPEU; MPRINT(TAXSCF): ARRAY INCTYPES {*} WSINCOME WSINCSP TBUSINC INTINC NTAXINC DIVINC RENTINC UNEMPINC AFDCINC GSSINC PENINC OTHINC CAPGLINC; MPRINT(TAXSCF): DO I=1 TO DIM(INCTYPES); MPRINT(TAXSCF): INCTYPES{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Allocate NPEU wage income across all NPEU members less than 70 years old. If only other type of income is Social Security, allocate amount across NPEU members age 62 or more. Otherwise, allocate total amount of nonwage income divided by the number of other types of income to each type of income equally to each NPEU member; MPRINT(TAXSCF): NUMU70=(0=62 & X113=5)+(X116>=62 & X119=5)+(X122>=62 & X125=5) +(X128>=62 & X131=5)+(X134>=62 & X137=5)+(X204>=62 & X207=5) +(X210>=62 & X213=5)+(X216>=62 & X219=5)+(X222>=62 & X225=5) +(X228>=62 & X231=5); MPRINT(TAXSCF): NUMINCTYPES=(X6406=1)+(X6407=1)+(X6408=1)+(X6409=1)+(X6410=1)+(X6411=1) +(X6412=1)+(X6413=1)+(X6414 > 5); MPRINT(TAXSCF): IF (NUMU70 > 0) THEN WSINCOME=(MAX(0,X6403)/NUMU70)*(TUAGE < 70); MPRINT(TAXSCF): ELSE WSINCOME=(MAX(0,X6403)/X7050); MPRINT(TAXSCF): IF (X6415 > 0 & NUMINCTYPES > 0) THEN DO; MPRINT(TAXSCF): IF (NUMGE62 > 0) THEN GSSINC=(X6406=1)*((MAX(0,X6415)/(NUMINCTYPES))/NUMGE62)*(TUAGE>=62); MPRINT(TAXSCF): ELSE GSSINC=(X6406=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): TBUSINC=(X6412=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): INTINC=(X6410=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): DIVINC=(X6411=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): RENTINC=(X6413=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): PENINC=(X6407=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050) +(X6408=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): AFDCINC=(X6409=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): CAPGLINC=(X6414 IN(13))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): UNEMPINC=(X6414 IN(10))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): OTHINC=(X6414 IN(11 12 15))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): END; MPRINT(TAXSCF): OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; MPRINT(TAXSCF): NONTAX=NTAXINC+AFDCINC; MPRINT(TAXSCF): * All NPEU tax units take the standard deduction, have one personal exemption, and have filing status of single; MPRINT(TAXSCF): ITEMDEDCT_FLAG=0; MPRINT(TAXSCF): PERSEXP=1; MPRINT(TAXSCF): TOTEXPT=1; MPRINT(TAXSCF): KIDS=0; MPRINT(TAXSCF): KIDSU13=0; MPRINT(TAXSCF): KIDSU17=0; MPRINT(TAXSCF): KIDSU18=0; MPRINT(TAXSCF): FILESTAT=1; MPRINT(TAXSCF): AGI=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC+UNEMPINC+CHSPALINC+OTHINC+PENINC+GSSINC; MPRINT(TAXSCF): IF AGI=-1 THEN AGI=0; MPRINT(TAXSCF): AGIGE50K=(AGI>=50000); MPRINT(TAXSCF): AGICL=1*(AGI < 50000)+2*(50000 <= AGI < 100000)+3*(AGI >= 100000); MPRINT(TAXSCF): RUN; NOTE: There were 4610 observations read from the data set WORK.NPEU. NOTE: The data set WORK.NPEU has 4610 observations and 5414 variables. NOTE: DATA statement used (Total process time): real time 0.11 seconds cpu time 0.11 seconds 217 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): * Add NPEU tax units; MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF NPEU; MPRINT(TAXSCF): RUN; NOTE: There were 35803 observations read from the data set WORK.SCF. NOTE: There were 4610 observations read from the data set WORK.NPEU. NOTE: The data set WORK.SCF has 40413 observations and 5414 variables. NOTE: DATA statement used (Total process time): real time 0.80 seconds cpu time 0.81 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): ************Itemized deductions; MPRINT(TAXSCF): IF ITEMDEDCT_FLAG=1 THEN DO; MPRINT(TAXSCF): ************Mortgage interest deduction; MPRINT(TAXSCF): * Convert real estate taxes on primary residence into a yearly amount; MPRINT(TAXSCF): RESTAXM1=0; MPRINT(TAXSCF): IF (X721 > 0) THEN DO; MPRINT(TAXSCF): RESTAXM1=X721 MPRINT(ACONV): *((X722=2)*52.18+(X722=3)*26.09+(X722=4)*12+(X722=5)*4+(X722=6)+(X722=8)+ (X722=11)*2+(X722=12)*6+(X722=31)*24+(X722=14)+(X722=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Create arrays for various mortgage loan components; MPRINT(TAXSCF): ARRAY TLMTH {*} TLMTHM1 TLMTHM2 TLMTHM3; MPRINT(TAXSCF): ARRAY CMOPAY {*} CMOPAYM1 CMOPAYM2 CMOPAYM3; MPRINT(TAXSCF): ARRAY PAYLFT {*} PAYLFTM1 PAYLFTM2 PAYLFTM3; MPRINT(TAXSCF): ARRAY AMTOWE {*} AMTOWEM1 AMTOWEM2 AMTOWEM3; MPRINT(TAXSCF): ARRAY AMTOWE_1 {*} AMTOWE_1M1 AMTOWE_1M2 AMTOWE_1M3; MPRINT(TAXSCF): ARRAY AINTDCT {*} AINTDCTM1 AINTDCTM2 AINTDCTM3; MPRINT(TAXSCF): ARRAY LNAGE {*} LNAGEM1 LNAGEM2 LNAGEM3; MPRINT(TAXSCF): ARRAY CURBAL {*} CURBALM1 CURBALM2 CURBALM3; MPRINT(TAXSCF): ARRAY CURBAL_1 {*} CURBAL_1M1 CURBAL_1M2 CURBAL_1M3; MPRINT(TAXSCF): ARRAY CINTDCT {*} CINTDCTM1 CINTDCTM2 CINTDCTM3; MPRINT(TAXSCF): ARRAY DCTDIFF {*} DCTDIFFM1 DCTDIFFM2 DCTDIFFM3; MPRINT(TAXSCF): ARRAY SINTDCT {*} SINTDCTM1 SINTDCTM2 SINTDCTM3; MPRINT(TAXSCF): ARRAY AVINTDCT {*} AVINTDCTM1 AVINTDCTM2 AVINTDCTM3; MPRINT(TAXSCF): ARRAY NMPMT {*} X807 X907 X1007; MPRINT(TAXSCF): ARRAY NMYR {*} X806 X906 X1006; MPRINT(TAXSCF): ARRAY REGPAYF {*} X809 X909 X1009; MPRINT(TAXSCF): ARRAY REGPAY {*} X808 X908 X1008; MPRINT(TAXSCF): ARRAY TYPAYF {*} X814 X914 X1014; MPRINT(TAXSCF): ARRAY TYPAY {*} X813 X913 X1013; MPRINT(TAXSCF): ARRAY LNSTMN {*} X801 X901 X1001; MPRINT(TAXSCF): ARRAY LNSTYR {*} X802 X902 X1002; MPRINT(TAXSCF): ARRAY HBALLN {*} X811 X911 X1011; MPRINT(TAXSCF): ARRAY BALLN {*} X812 X912 X1012; MPRINT(TAXSCF): ARRAY HAVELN {*} X723 X830 X931; MPRINT(TAXSCF): ARRAY AMTBORR {*} X804 X904 X1004; MPRINT(TAXSCF): ARRAY JAMTBORR {*} J804 J904 J1004; MPRINT(TAXSCF): ARRAY AMTOUT {*} X805 X905 X1005; MPRINT(TAXSCF): ARRAY JAMTOUT {*} J805 J905 J1005; MPRINT(TAXSCF): ARRAY INTRATE {*} X816 X916 X1016; MPRINT(TAXSCF): ARRAY ONSCHED {*} X7571 X7570 X7569; 218 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTH); MPRINT(TAXSCF): TLMTH{I}=0; MPRINT(TAXSCF): CMOPAY{I}=0; MPRINT(TAXSCF): PAYLFT{I}=0; MPRINT(TAXSCF): AMTOWE{I}=0; MPRINT(TAXSCF): AMTOWE_1{I}=0; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): LNAGE{I}=0; MPRINT(TAXSCF): CURBAL{I}=0; MPRINT(TAXSCF): CURBAL_1{I}=0; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): DCTDIFF{I}=0; MPRINT(TAXSCF): SINTDCT{I}=0; MPRINT(TAXSCF): AVINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): NUMORT=(X723=1)+(X830=1)+(X931=1); MPRINT(TAXSCF): TOTAMTOUTM=0; MPRINT(TAXSCF): TOTDEDCTM=0; MPRINT(TAXSCF): GRFAMTOUTM=0; MPRINT(TAXSCF): A17AMTOUTM=0; MPRINT(TAXSCF): HAAMTOUTM=0; MPRINT(TAXSCF): DO I=1 TO DIM(NMPMT); MPRINT(TERMCON): IF (NMYR{I}=0 & NMPMT{I}=0) THEN DO; MPRINT(TERMCON): TLMTH{I}=0; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYR{I}^=0|NMPMT{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYR{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYR{I}=-1) THEN DO; MPRINT(TERMCON): TLMTH{I}=NMYR{I}; MPRINT(TERMCON): IF (NMPMT{I}=0) THEN DO; MPRINT(TERMCON): NMPMT{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYR{I}>0) THEN DO; MPRINT(TERMCON): TLMTH{I}=NMYR{I}*12; MPRINT(TERMCON): IF (NMPMT{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYF{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMT{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYF{I}=-7) THEN DO; MPRINT(TERMCON): NMPMT{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYF{I}=8) THEN DO; MPRINT(TERMCON): NMPMT{I}=1; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYF{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYF{I}=1) THEN NMPMT{I}=TLMTH{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=2) THEN NMPMT{I}=TLMTH{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=3) THEN NMPMT{I}=TLMTH{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=4) THEN NMPMT{I}=TLMTH{I}; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=5) THEN NMPMT{I}=TLMTH{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=6) THEN NMPMT{I}=TLMTH{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=20) THEN NMPMT{I}=TLMTH{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=21) THEN NMPMT{I}=TLMTH{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=11) THEN NMPMT{I}=TLMTH{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=12) THEN NMPMT{I}=TLMTH{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=23) THEN NMPMT{I}=TLMTH{I}*13/12; 219 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (REGPAYF{I}=24) THEN NMPMT{I}=TLMTH{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=25) THEN NMPMT{I}=TLMTH{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=31) THEN NMPMT{I}=TLMTH{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=18) THEN NMPMT{I}=TLMTH{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=0) THEN NMPMT{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYF{I}>.Z & REGPAYF{I}^=-1 & REGPAYF{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMT{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTH{I}= REGPAYF{I}= NMPMT{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTH{I}>.Z & TLMTH{I}<-2) THEN DO; MPRINT(MOCONV): NMPMT{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTH{I}= REGPAYF{I}= NMPMT{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTH{I}<=.Z) THEN NMPMT{I}=TLMTH{I}; MPRINT(MOCONV): ELSE IF (TLMTH{I}^=-1 & TLMTH{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYF{I}= TLMTH{I}= "SETTING AMT=."; MPRINT(MOCONV): NMPMT{I}=.; MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMT{I}=-1) THEN DO; MPRINT(TERMCON): TLMTH{I}=-1; MPRINT(TERMCON): IF (NMYR{I}=0) THEN DO; MPRINT(TERMCON): NMYR{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMT{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYF{I}; MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYF{I}>0) THEN PFREQ=TYPAYF{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTH{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; MPRINT(TERMCON): TLMTH{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): IF (NMPMT{I}>0) THEN DO; MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTH{I}=NMPMT{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}))); MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12))); MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTH{I}=NMPMT{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTH{I}=NMPMT{I}*2/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTH{I}=NMPMT{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTH{I}=NMPMT{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTH{I}=NMPMT{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTH{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): TLMTH{I}=NMPMT{I}; MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMT{I}= PFREQ= TLMTH{I}=; MPRINT(IMOCONV): END; 220 The SAS System 13:32 Friday, January 29, 2021 MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMT{I}>.Z & NMPMT{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTH{I}=NMPMT{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMT{I}= PFREQ= TLMTH{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMT{I}=0) THEN TLMTH{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMT{I}<=.Z) THEN TLMTH{I}=NMPMT{I}; MPRINT(IMOCONV): ELSE IF (NMPMT{I}^=-1 & NMPMT{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMT{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTH{I}=.; MPRINT(IMOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTH{I}>0) THEN DO; MPRINT(TERMCON): NMYR{I}=MAX(1,INT(.5+(TLMTH{I}/12))); MPRINT(TERMCON): TLMTH{I}=MAX(1,ROUND(TLMTH{I})); MPRINT(TERMCON): END; MPRINT(TERMCON): IF (NMYR{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMT{I}= NMYR{I}= TLMTH{I}= REGPAYF{I}= REGPAY{I}= TYPAYF{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAY{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYF{I}=1) THEN CMOPAY{I}=REGPAY{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=2) THEN CMOPAY{I}=REGPAY{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=3) THEN CMOPAY{I}=REGPAY{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=4) THEN CMOPAY{I}=REGPAY{I}; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=5) THEN CMOPAY{I}=REGPAY{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=6) THEN CMOPAY{I}=REGPAY{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=20) THEN CMOPAY{I}=REGPAY{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=21) THEN CMOPAY{I}=REGPAY{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=8) THEN CMOPAY{I}=REGPAY{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=11) THEN CMOPAY{I}=REGPAY{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=12) THEN CMOPAY{I}=REGPAY{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=23) THEN CMOPAY{I}=REGPAY{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=24) THEN CMOPAY{I}=REGPAY{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=25) THEN CMOPAY{I}=REGPAY{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=31) THEN CMOPAY{I}=REGPAY{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=18) THEN CMOPAY{I}=REGPAY{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=0) THEN CMOPAY{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYF{I}>.Z & REGPAYF{I}^=-1 & REGPAYF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAY{I}= REGPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAY{I}>.Z & REGPAY{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAY{I}= REGPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAY{I}<=.Z) THEN CMOPAY{I}=REGPAY{I}; MPRINT(MOCONV): ELSE IF (REGPAY{I}^=-1 & REGPAY{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYF{I}= REGPAY{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(MOCONV): IF (TYPAYF{I}=1) THEN CMOPAY{I}=TYPAY{I}*5*52/12; 221 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (TYPAYF{I}=2) THEN CMOPAY{I}=TYPAY{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=3) THEN CMOPAY{I}=TYPAY{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=4) THEN CMOPAY{I}=TYPAY{I}; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=5) THEN CMOPAY{I}=TYPAY{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=6) THEN CMOPAY{I}=TYPAY{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=20) THEN CMOPAY{I}=TYPAY{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=21) THEN CMOPAY{I}=TYPAY{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=8) THEN CMOPAY{I}=TYPAY{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=11) THEN CMOPAY{I}=TYPAY{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=12) THEN CMOPAY{I}=TYPAY{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=23) THEN CMOPAY{I}=TYPAY{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=24) THEN CMOPAY{I}=TYPAY{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=25) THEN CMOPAY{I}=TYPAY{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=31) THEN CMOPAY{I}=TYPAY{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=18) THEN CMOPAY{I}=TYPAY{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=0) THEN CMOPAY{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYF{I}>.Z & TYPAYF{I}^=-1 & TYPAYF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAY{I}= TYPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAY{I}>.Z & TYPAY{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAY{I}= TYPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAY{I}<=.Z) THEN CMOPAY{I}=TYPAY{I}; MPRINT(MOCONV): ELSE IF (TYPAY{I}^=-1 & TYPAY{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYF{I}= TYPAY{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF NMYR{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFT{I}=(TLMTH{I}-((2010-LNSTYR{I})*12)); MPRINT(TAXSCF): LNAGE{I}=TLMTH{I}-PAYLFT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFT{I}=0; MPRINT(TAXSCF): LNAGE{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): file "null.txt"; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((X723=1) & (X810 IN(1 2 3)) & TLMTHM1 > 0 & X816 > 0) THEN DO; MPRINT(TAXSCF): IF (X811=1) THEN DO; MPRINT(MORTPAY): AMOPAYM1=ROUND((MORT((X804),.,((X816/10000)/12),(TLMTHM1))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (CMOPAYM1 > AMOPAYM1) THEN CMOPAYM1=AMOPAYM1; MPRINT(TAXSCF): 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= /; MPRINT(TAXSCF): END; 222 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE IF (X811=2) THEN DO; MPRINT(TAXSCF): IF (X804 > X812) THEN ADJBORR=X804-X812; MPRINT(TAXSCF): ELSE IF (X804 < X812) THEN ADJBORR=X804; MPRINT(TAXSCF): IF ADJBORR > 0 THEN MPRINT(MORTPAY): AMOPAYM1=ROUND((MORT((ADJBORR),.,((X816/10000)/12),(TLMTHM1))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (X804=X812) THEN AMOPAYM1=((X804)*(X816/10000))/12; MPRINT(TAXSCF): IF (CMOPAYM1 > AMOPAYM1) THEN CMOPAYM1=AMOPAYM1; MPRINT(TAXSCF): 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= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * 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); MPRINT(TAXSCF): * NOT INCLUDING LAND CONTRACTS; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELN); MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTDCT{I}=CMOPAY{I}*12; MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELN{I}=1 & HBALLN{I} IN(1 2) & NMYR{I} NOT IN(0 -1 -7) & INTRATE{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & PAYLFT{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAY{I} < AMTBORR{I}*.005) THEN CMOPAY{I}=MAX(REGPAY{I},TYPAY{I}); MPRINT(TAXSCF): 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})); MPRINT(TAXSCF): 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))); MPRINT(TAXSCF): IF LNSTYR{I}^=2010 THEN AINTDCT{I}=(CMOPAY{I}*12)-(AMTOWE_1{I}-AMTOWE{I}); MPRINT(TAXSCF): ELSE IF LNSTYR{I}=2010 THEN AINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTH{I} < 0 | CMOPAY{I} < 0 | PAYLFT{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWE{I}=0; MPRINT(TAXSCF): AMTOWE_1{I}=0; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & AMTBORR{I} > 0 & LNAGE{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTDCT{I}=(CMOPAY{I}*12)-(CURBAL_1{I}-CURBAL{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTH{I} < 0 | AMTBORR{I} < 0 | LNAGE{I} < 0) THEN DO; MPRINT(TAXSCF): CURBAL{I}=0; MPRINT(TAXSCF): CURBAL_1{I}=0; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUT{I} > 0 & INTRATE{I} > 0) THEN SINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): ELSE SINTDCT{I}=0; MPRINT(TAXSCF): * Also fixing cases where mortgage ends or starts in the survey year. Setting interest deduction to 223 The SAS System 13:32 Friday, January 29, 2021 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 the home was not purchased in the survey year. If the home was purchased in the survey year, set deduction to zero.; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & PAYLFT{I}=0) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=CURBAL_1{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): AINTDCT{I}=CINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & LNSTYR{I}=2010 & X720=2010) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): SINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & LNSTYR{I}=2010) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTDCT{I} < 0 | CINTDCT{I} < 0) & CURBAL{I} > 0 & CURBAL_1{I} > 0) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=CURBAL_1{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): AINTDCT{I}=CINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTDCT{I} < 0 | CINTDCT{I} < 0) & (CURBAL{I} <= 0 & CURBAL_1{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCT{I} > 0 & CINTDCT{I} > 0) THEN DCTDIFF{I}=CINTDCT{I}-SINTDCT{I}; MPRINT(TAXSCF): ELSE DCTDIFF{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELN{I}=1 & (NMYR{I} IN(-1 -7) | NMPMT{I} IN(-1 -7)) & AMTOUT{I} > 0 & INTRATE{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELN{I}=1 & (INTRATE{I}=-1)) THEN DO; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): SINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest deduction; MPRINT(TAXSCF): IF ((CINTDCT{I} + AINTDCT{I} + SINTDCT{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTDCT{I}=(CINTDCT{I}+AINTDCT{I}+SINTDCT{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTDCT{I}=0; MPRINT(TAXSCF): * Constraining interest deduction amount to be no more than the reported year 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.; MPRINT(TAXSCF): IF (HAVELN{I}=1 & AVINTDCT{I} > 0 & CMOPAY{I} > 0 & (AVINTDCT{I} > CMOPAY{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTDCT{I}=CMOPAY{I}*12; MPRINT(TAXSCF): CINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): SINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELN{I}=1 & AVINTDCT{I} > 0 & AMTOUT{I} > 0 & (AVINTDCT{I} > .25*AMTOUT{I})) THEN DO; MPRINT(TAXSCF): AVINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): CINTDCT{I}=AVINTDCT{I}; 224 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): AINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELN{I}=1 & Y1=YY1*10+1 & AVINTDCT{I}=0 & NMYR{I}^=2010) 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}= /; MPRINT(TAXSCF): * 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; MPRINT(TAXSCF): IF (X702=1 & X714=1 & X7135=5) THEN DO; MPRINT(TAXSCF): TOTDEDCTM=TOTDEDCTM+(AVINTDCT{I}/X715)*(HAVELN{I}=1); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE TOTDEDCTM=TOTDEDCTM+AVINTDCT{I}; MPRINT(TAXSCF): * Total amount outstanding on loans; MPRINT(TAXSCF): TOTAMTOUTM=TOTAMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): * Need to divide mortgages up by date, pre 10/13/87 mortgages are considered grandfathered debt by IRS, and different limits apply to mortgages taken out after 12/15/2017; MPRINT(TAXSCF): IF ((LNSTYR{I}=1987 & LNSTMN{I} < 10) | (LNSTYR{I} < 1987)) THEN DO; MPRINT(TAXSCF): GRFAMTOUTM=GRFAMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((LNSTYR{I}=2017 & LNSTMN{I}=12) | (LNSTYR{I} > 2017)) THEN DO; MPRINT(TAXSCF): A17AMTOUTM=A17AMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((LNSTYR{I}=1987 & LNSTMN {I} >= 10) | (1987 < LNSTYR{I} < 2017) | (LNSTYR{I}=2017 & LNSTMN{I}<=11)) THEN DO; MPRINT(TAXSCF): HAAMTOUTM=HAAMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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, 3, or 4 as home acquisition debt (same as a mortgage, counts toward mortgage balance limit), while HELOCs with other use codes counted as home equity debt. Ignoring the mopup as we dont know if that LOC is secured by a home; MPRINT(TAXSCF): ARRAY CMOPAYL {*} CMOPAYL1 CMOPAYL2 CMOPAYL3; MPRINT(TAXSCF): ARRAY SINTDCTL {*} SINTDCTL1 SINTDCTL2 SINTDCTL3; MPRINT(TAXSCF): ARRAY AQDBT {*} AQDBTL1 AQDBTL2 AQDBTL3; MPRINT(TAXSCF): ARRAY AQINT {*} AQINTL1 AQINTL2 AQINTL3; MPRINT(TAXSCF): ARRAY EQDBT {*} EQDBTL1 EQDBTL2 EQDBTL3; MPRINT(TAXSCF): ARRAY SBYHOME {*} X1103 X1114 X1125; MPRINT(TAXSCF): ARRAY DOOWE {*} X1105 X1116 X1127; MPRINT(TAXSCF): ARRAY LNPURP {*} X1106 X1117 X1128; MPRINT(TAXSCF): ARRAY AMTOUTL {*} X1108 X1119 X1130; MPRINT(TAXSCF): ARRAY TYPAYL {*} X1109 X1120 X1131; MPRINT(TAXSCF): ARRAY TYPAYLF {*} X1110 X1121 X1132; MPRINT(TAXSCF): ARRAY INTRATEL {*} X1111 X1122 X1133; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): TOTAQDBTL=0; MPRINT(TAXSCF): TOTEQDBTL=0; MPRINT(TAXSCF): TOTDEDCTL=0; MPRINT(TAXSCF): TOTAQDEDCTL=0; MPRINT(TAXSCF): TOTLOCINVEX=0; MPRINT(TAXSCF): DO I=1 TO DIM(CMOPAYL); MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): AQDBT{I}=0; MPRINT(TAXSCF): AQINT{I}=0; MPRINT(TAXSCF): EQDBT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (X1101=1) THEN DO; 225 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): DO I=1 TO DIM(SBYHOME); MPRINT(TAXSCF): IF (SBYHOME{I}=1 & DOOWE{I}=1) THEN DO; MPRINT(TAXSCF): IF (TYPAYL{I} > 0) THEN DO; MPRINT(MOCONV): IF (TYPAYLF{I}=1) THEN CMOPAYL{I}=TYPAYL{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=2) THEN CMOPAYL{I}=TYPAYL{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=3) THEN CMOPAYL{I}=TYPAYL{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=4) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=5) THEN CMOPAYL{I}=TYPAYL{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=6) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=20) THEN CMOPAYL{I}=TYPAYL{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=21) THEN CMOPAYL{I}=TYPAYL{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=8) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=11) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=12) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=23) THEN CMOPAYL{I}=TYPAYL{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=24) THEN CMOPAYL{I}=TYPAYL{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=25) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=31) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=18) THEN CMOPAYL{I}=TYPAYL{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=0) THEN CMOPAYL{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}>.Z & TYPAYLF{I}^=-1 & TYPAYLF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}>.Z & TYPAYL{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}<=.Z) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYL{I}^=-1 & TYPAYL{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYLF{I}= TYPAYL{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TYPAYL{I} IN(0 -1 -2)) THEN DO; MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (INTRATEL{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=((INTRATEL{I}/10000)*AMTOUTL{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEL{I} IN(0 -1)) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTL{I} > 0 & CMOPAYL{I} > 0 & SINTDCTL{I} > CMOPAYL{I}*12) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=CMOPAYL{I}*12; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (LNPURP{I} IN(1 3 4)) THEN DO; MPRINT(TAXSCF): AQDBT{I}=AMTOUTL{I}; MPRINT(TAXSCF): AQINT{I}=SINTDCTL{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (LNPURP{I} NOT IN(1 3 4)) THEN DO; MPRINT(TAXSCF): EQDBT{I}=AMTOUTL{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTDEDCTL=TOTDEDCTL+SINTDCTL{I}; MPRINT(TAXSCF): TOTAQDEDCTL=TOTAQDEDCTL+AQINT{I}; MPRINT(TAXSCF): TOTAQDBTL=TOTAQDBTL+AQDBT{I}; MPRINT(TAXSCF): TOTEQDBTL=TOTEQDBTL+EQDBT{I}; 226 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * Dropped third column of grid for 2010 forward; MPRINT(TAXSCF): * Create arrays for various other property loan components; MPRINT(TAXSCF): ARRAY TLMTHO {*} TLMTHO1 TLMTHO2; MPRINT(TAXSCF): ARRAY CMOPAYO {*} CMOPAYO1 CMOPAYO2; MPRINT(TAXSCF): ARRAY AMOPAYO {*} AMOPAYO1 AMOPAYO2; MPRINT(TAXSCF): ARRAY PAYLFTO {*} PAYLFTO1 PAYLFTO2; MPRINT(TAXSCF): ARRAY AMTOWEO {*} AMTOWEO1 AMTOWEO2; MPRINT(TAXSCF): ARRAY AMTOWE_1O {*} AMTOWE_1O1 AMTOWE_1O2; MPRINT(TAXSCF): ARRAY AINTDCTO {*} AINTDCTO1 AINTDCTO2; MPRINT(TAXSCF): ARRAY LNAGEO {*} LNAGEO1 LNAGEO2; MPRINT(TAXSCF): ARRAY CURBALO {*} CURBALO1 CURBALO2; MPRINT(TAXSCF): ARRAY CURBAL_1O {*} CURBAL_1O1 CURBAL_1O2; MPRINT(TAXSCF): ARRAY CINTDCTO {*} CINTDCTO1 CINTDCTO2; MPRINT(TAXSCF): ARRAY DCTDIFFO {*} DCTDIFFO1 DCTDIFFO2; MPRINT(TAXSCF): ARRAY SINTDCTO {*} SINTDCTO1 SINTDCTO2; MPRINT(TAXSCF): ARRAY AVINTDCTO {*} AVINTDCTO1 AVINTDCTO2; MPRINT(TAXSCF): ARRAY QUALPROP {*} QPROP1 QPROP2; MPRINT(TAXSCF): ARRAY QUALPINV {*} QPINV1 QPINV2; MPRINT(TAXSCF): ARRAY ADJBORRO {*} ADJBORRO1 ADJBORRO2; MPRINT(TAXSCF): ARRAY NMPMTO {*} X1717 X1817; MPRINT(TAXSCF): ARRAY NMYRO {*} X1716 X1816; MPRINT(TAXSCF): ARRAY REGPAYFO {*} X1719 X1819; MPRINT(TAXSCF): ARRAY REGPAYO {*} X1718 X1818; MPRINT(TAXSCF): ARRAY TYPAYFO {*} X1724 X1824; MPRINT(TAXSCF): ARRAY TYPAYO {*} X1723 X1823; MPRINT(TAXSCF): ARRAY LNSTMNO {*} X1712 X1812; MPRINT(TAXSCF): ARRAY LNSTYRO {*} X1713 X1813; MPRINT(TAXSCF): ARRAY HBALLNO {*} X1721 X1821; MPRINT(TAXSCF): ARRAY BALLNO {*} X1722 X1822; MPRINT(TAXSCF): ARRAY AMTBORRO {*} X1714 X1814; MPRINT(TAXSCF): ARRAY JAMTBORRO {*} J1714 J1814; MPRINT(TAXSCF): ARRAY AMTOUTO {*} X1715 X1815; MPRINT(TAXSCF): ARRAY JAMTOUTO {*} J1715 J1815; MPRINT(TAXSCF): ARRAY HAVELNO {*} X1711 X1811; MPRINT(TAXSCF): ARRAY INTRATEO {*} X1726 X1826; MPRINT(TAXSCF): ARRAY ONSCHEDO {*} X7554 X7553; MPRINT(TAXSCF): ARRAY HINCOMEO {*} X1729 X1829; MPRINT(TAXSCF): ARRAY INCOMEO {*} X1730 X1830; MPRINT(TAXSCF): ARRAY PROPTYPE {*} X1703 X1803; MPRINT(TAXSCF): ARRAY PERPROP {*} X1705 X1805; MPRINT(TAXSCF): ARRAY PROPVAL {*} X1706 X1806; MPRINT(TAXSCF): ARRAY TAXINS {*} X1720 X1820; MPRINT(TAXSCF): ARRAY PURCHYRO {*} X1708 X1808; MPRINT(TAXSCF): ARRAY LIMFLAG {*} LIMFL1 LIMFL2; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTHO); MPRINT(TAXSCF): TLMTHO{I}=0; MPRINT(TAXSCF): CMOPAYO{I}=0; MPRINT(TAXSCF): PAYLFTO{I}=0; MPRINT(TAXSCF): AMTOWEO{I}=0; MPRINT(TAXSCF): AMTOWE_1O{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): LNAGEO{I}=0; 227 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): CURBALO{I}=0; MPRINT(TAXSCF): CURBAL_1O{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): DCTDIFFO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): AVINTDCTO{I}=0; MPRINT(TAXSCF): QUALPROP{I}=0; MPRINT(TAXSCF): QUALPINV{I}=0; MPRINT(TAXSCF): ADJBORRO{I}=0; MPRINT(TAXSCF): LIMFLAG{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTAMTOUTO=0; MPRINT(TAXSCF): TOTDEDCTO=0; MPRINT(TAXSCF): QUALOTHPROP=0; MPRINT(TAXSCF): QUALINVPROP=0; MPRINT(TAXSCF): TOTINVPDCT=0; MPRINT(TAXSCF): FMVOP=0; MPRINT(TAXSCF): DO I=1 TO DIM(NMPMTO); MPRINT(TERMCON): IF (NMYRO{I}=0 & NMPMTO{I}=0) THEN DO; MPRINT(TERMCON): TLMTHO{I}=0; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRO{I}^=0|NMPMTO{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRO{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRO{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHO{I}=NMYRO{I}; MPRINT(TERMCON): IF (NMPMTO{I}=0) THEN DO; MPRINT(TERMCON): NMPMTO{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRO{I}>0) THEN DO; MPRINT(TERMCON): TLMTHO{I}=NMYRO{I}*12; MPRINT(TERMCON): IF (NMPMTO{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYFO{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMTO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFO{I}=-7) THEN DO; MPRINT(TERMCON): NMPMTO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFO{I}=8) THEN DO; MPRINT(TERMCON): NMPMTO{I}=1; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFO{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYFO{I}=1) THEN NMPMTO{I}=TLMTHO{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=2) THEN NMPMTO{I}=TLMTHO{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=3) THEN NMPMTO{I}=TLMTHO{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=4) THEN NMPMTO{I}=TLMTHO{I}; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=5) THEN NMPMTO{I}=TLMTHO{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=6) THEN NMPMTO{I}=TLMTHO{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=20) THEN NMPMTO{I}=TLMTHO{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=21) THEN NMPMTO{I}=TLMTHO{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=11) THEN NMPMTO{I}=TLMTHO{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=12) THEN NMPMTO{I}=TLMTHO{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=23) THEN NMPMTO{I}=TLMTHO{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=24) THEN NMPMTO{I}=TLMTHO{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=25) THEN NMPMTO{I}=TLMTHO{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=31) THEN NMPMTO{I}=TLMTHO{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=18) THEN NMPMTO{I}=TLMTHO{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=0) THEN NMPMTO{I}=0; 228 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (REGPAYFO{I}>.Z & REGPAYFO{I}^=-1 & REGPAYFO{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMTO{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTHO{I}= REGPAYFO{I}= NMPMTO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHO{I}>.Z & TLMTHO{I}<-2) THEN DO; MPRINT(MOCONV): NMPMTO{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTHO{I}= REGPAYFO{I}= NMPMTO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHO{I}<=.Z) THEN NMPMTO{I}=TLMTHO{I}; MPRINT(MOCONV): ELSE IF (TLMTHO{I}^=-1 & TLMTHO{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFO{I}= TLMTHO{I}= "SETTING AMT=."; MPRINT(MOCONV): NMPMTO{I}=.; MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTO{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHO{I}=-1; MPRINT(TERMCON): IF (NMYRO{I}=0) THEN DO; MPRINT(TERMCON): NMYRO{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTO{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYFO{I}; MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYFO{I}>0) THEN PFREQ=TYPAYFO{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTHO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; MPRINT(TERMCON): TLMTHO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): IF (NMPMTO{I}>0) THEN DO; MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTHO{I}=NMPMTO{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}))); MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12))); MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTHO{I}=NMPMTO{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTHO{I}=NMPMTO{I}*2/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTHO{I}=NMPMTO{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTHO{I}=NMPMTO{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTHO{I}=NMPMTO{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTHO{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): TLMTHO{I}=NMPMTO{I}; MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMTO{I}= PFREQ= TLMTHO{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}>.Z & NMPMTO{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTHO{I}=NMPMTO{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMTO{I}= PFREQ= TLMTHO{I}=; MPRINT(IMOCONV): END; 229 The SAS System 13:32 Friday, January 29, 2021 MPRINT(IMOCONV): ELSE IF (NMPMTO{I}=0) THEN TLMTHO{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}<=.Z) THEN TLMTHO{I}=NMPMTO{I}; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}^=-1 & NMPMTO{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMTO{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTHO{I}=.; MPRINT(IMOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTHO{I}>0) THEN DO; MPRINT(TERMCON): NMYRO{I}=MAX(1,INT(.5+(TLMTHO{I}/12))); MPRINT(TERMCON): TLMTHO{I}=MAX(1,ROUND(TLMTHO{I})); MPRINT(TERMCON): END; MPRINT(TERMCON): IF (NMYRO{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMTO{I}= NMYRO{I}= TLMTHO{I}= REGPAYFO{I}= REGPAYO{I}= TYPAYFO{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAYO{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYFO{I}=1) THEN CMOPAYO{I}=REGPAYO{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=2) THEN CMOPAYO{I}=REGPAYO{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=3) THEN CMOPAYO{I}=REGPAYO{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=4) THEN CMOPAYO{I}=REGPAYO{I}; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=5) THEN CMOPAYO{I}=REGPAYO{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=6) THEN CMOPAYO{I}=REGPAYO{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=20) THEN CMOPAYO{I}=REGPAYO{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=21) THEN CMOPAYO{I}=REGPAYO{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=8) THEN CMOPAYO{I}=REGPAYO{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=11) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=12) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=23) THEN CMOPAYO{I}=REGPAYO{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=24) THEN CMOPAYO{I}=REGPAYO{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=25) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=31) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=18) THEN CMOPAYO{I}=REGPAYO{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=0) THEN CMOPAYO{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}>.Z & REGPAYFO{I}^=-1 & REGPAYFO{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAYO{I}= REGPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYO{I}>.Z & REGPAYO{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAYO{I}= REGPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYO{I}<=.Z) THEN CMOPAYO{I}=REGPAYO{I}; MPRINT(MOCONV): ELSE IF (REGPAYO{I}^=-1 & REGPAYO{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFO{I}= REGPAYO{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(MOCONV): IF (TYPAYFO{I}=1) THEN CMOPAYO{I}=TYPAYO{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=2) THEN CMOPAYO{I}=TYPAYO{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=3) THEN CMOPAYO{I}=TYPAYO{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=4) THEN CMOPAYO{I}=TYPAYO{I}; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=5) THEN CMOPAYO{I}=TYPAYO{I}/3; 230 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=6) THEN CMOPAYO{I}=TYPAYO{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=20) THEN CMOPAYO{I}=TYPAYO{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=21) THEN CMOPAYO{I}=TYPAYO{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=8) THEN CMOPAYO{I}=TYPAYO{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=11) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=12) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=23) THEN CMOPAYO{I}=TYPAYO{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=24) THEN CMOPAYO{I}=TYPAYO{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=25) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=31) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=18) THEN CMOPAYO{I}=TYPAYO{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=0) THEN CMOPAYO{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}>.Z & TYPAYFO{I}^=-1 & TYPAYFO{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYO{I}= TYPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYO{I}>.Z & TYPAYO{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYO{I}= TYPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYO{I}<=.Z) THEN CMOPAYO{I}=TYPAYO{I}; MPRINT(MOCONV): ELSE IF (TYPAYO{I}^=-1 & TYPAYO{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYFO{I}= TYPAYO{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF NMYRO{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFTO{I}=(TLMTHO{I}-((2010-LNSTYRO{I})*12)); MPRINT(TAXSCF): LNAGEO{I}=TLMTHO{I}-PAYLFTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFTO{I}=0; MPRINT(TAXSCF): LNAGEO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNO); MPRINT(TAXSCF): IF ((HAVELNO{I}=1) & (TAXINS{I} IN(1 2 3)) & TLMTHO{I} > 0 & INTRATEO{I} > 0) THEN DO; MPRINT(TAXSCF): IF (HBALLNO{I}=1) THEN DO; MPRINT(MORTPAY): AMOPAYO{I}=ROUND((MORT((AMTBORRO{I}),.,((INTRATEO{I}/10000)/12),(TLMTHO{I}))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (CMOPAYO{I} > AMOPAYO{I}) THEN CMOPAYO{I}=AMOPAYO{I}; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HBALLNO{I}=5) THEN DO; MPRINT(TAXSCF): IF (AMTBORRO{I} > BALLNO{I}) THEN ADJBORRO{I}=(AMTBORRO{I}-BALLNO{I}); MPRINT(TAXSCF): ELSE IF (AMTBORRO{I} < BALLNO{I}) THEN ADJBORRO{I}=AMTBORRO{I}; MPRINT(TAXSCF): IF ADJBORRO{I} > 0 THEN 231 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MORTPAY): AMOPAYO{I}=ROUND((MORT((ADJBORRO{I}),.,((INTRATEO{I}/10000)/12),(TLMTHO{I}))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (AMTBORRO{I}=BALLNO{I}) THEN AMOPAYO{I}=((AMTBORRO{I})*(INTRATEO{I}/10000))/12; MPRINT(TAXSCF): IF (CMOPAYO{I} > AMOPAYO{I}) THEN CMOPAYO{I}=AMOPAYO{I}; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * 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); MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNO); MPRINT(TAXSCF): IF (PROPTYPE{I} IN(12 13 14 21 22 25 40 49 999) & (HINCOMEO{I}=5 | INCOMEO{I}=-1)) | (PROPTYPE{I} IN(12 13 14 21 22 25 40 49 999) & HINCOMEO{I}=1 & INCOMEO{I} < (CMOPAYO{I}*12)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified properties; MPRINT(TAXSCF): QUALPROP{I}=(HAVELNO{I}=1); MPRINT(TAXSCF): QUALOTHPROP=QUALOTHPROP+QUALPROP{I}; MPRINT(TAXSCF): FMVOP=FMVOP+PROPVAL{I}*(HAVELNO{I}=1); MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & HBALLNO{I} IN(1 5) & NMYRO{I} NOT IN(0 -1 -7) & INTRATEO{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAYO{I} < AMTBORRO{I}*.005) THEN CMOPAYO{I}=MAX(REGPAYO{I},TYPAYO{I}); MPRINT(TAXSCF): 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})); MPRINT(TAXSCF): 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))); MPRINT(TAXSCF): IF LNSTYRO{I}^=2010 THEN AINTDCTO{I}=(CMOPAYO{I}*12)-(AMTOWE_1O{I}-AMTOWEO{I}); MPRINT(TAXSCF): ELSE IF LNSTYRO{I}=2010 THEN AINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | CMOPAYO{I} < 0 | PAYLFTO{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEO{I}=0; MPRINT(TAXSCF): AMTOWE_1O{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & AMTBORRO{I} > 0 & LNAGEO{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTDCTO{I}=(CMOPAYO{I}*12)-(CURBAL_1O{I}-CURBALO{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | AMTBORRO{I} < 0 | LNAGEO{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALO{I}=0; MPRINT(TAXSCF): CURBAL_1O{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): END; 232 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): IF (AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): ELSE SINTDCTO{I}=0; MPRINT(TAXSCF): * 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 the home was not purchased in the survey year. If the home was purchased in the survey year, set deduction to zero.; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I}=0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=2010 & PURCHYRO{I}=2010) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=2010) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & CURBALO{I} > 0 & CURBAL_1O{I} > 0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & (CURBALO{I} <= 0 & CURBAL_1O{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTO{I} > 0 & CINTDCTO{I} > 0) THEN DCTDIFFO{I}=CINTDCTO{I}-SINTDCTO{I}; MPRINT(TAXSCF): ELSE DCTDIFFO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (NMYRO{I} IN(-1 -7) & NMPMTO{I} IN(-1 -7)) & AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (INTRATEO{I}=-1)) THEN DO; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest deduction; MPRINT(TAXSCF): IF ((CINTDCTO{I} + AINTDCTO{I} + SINTDCTO{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=(CINTDCTO{I}+AINTDCTO{I}+SINTDCTO{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTDCTO{I}=0; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & CMOPAYO{I} > 0 & (AVINTDCTO{I} > CMOPAYO{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): SINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; 233 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & AMTOUTO{I} > 0 & (AVINTDCTO{I} > .25*AMTOUTO{I})) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): * Compute total deduction and total amount outstanding; MPRINT(TAXSCF): TOTDEDCTO=TOTDEDCTO+((AVINTDCTO{I})*PERPROP{I}/10000)*(HAVELNO{I}=1); MPRINT(TAXSCF): TOTAMTOUTO=TOTAMTOUTO+AMTOUTO{I}; MPRINT(TAXSCF): * Create flag for loans after 12/15/17, used in computing limits on mortgage interest deduction for home acquistion debt; MPRINT(TAXSCF): LIMFLAG{I}=(LNSTYRO{I}> 2017 | (LNSTYRO{I}=2017 & LNSTMNO{I}=12)); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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 hhs are rational and report the home/properties with the biggest deductions.; MPRINT(TAXSCF): ADJDEDCTO=0; MPRINT(TAXSCF): ADJAMTOUTO=0; MPRINT(TAXSCF): ADJ17AMTOUTO=0; MPRINT(TAXSCF): FMVOTHPROP=0; MPRINT(TAXSCF): IF (QUALOTHPROP > 0) THEN DO; MPRINT(TAXSCF): IF (QUALOTHPROP=1 & QPROP1=1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=1 & QPROP2=1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=2) THEN DO; MPRINT(TAXSCF): IF (AVINTDCTO1 >= AVINTDCTO2) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO2 >= AVINTDCTO1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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 234 The SAS System 13:32 Friday, January 29, 2021 the HE debt amount.; MPRINT(TAXSCF): IF (X701=-7 & X7133=1) THEN DO; MPRINT(TAXSCF): HOUSE=(X7134/10000)*X716; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE HOUSE=SUM(0,X604,X614,X623,X716,(X513+X526)); MPRINT(TAXSCF): IF (TOTEQDBTL > 0 & GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL+TOTEQDBTL > (HOUSE)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) > 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=MIN((HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL)),TOTEQDBTL,100000); MPRINT(TAXSCF): ADJDEDCTL=TOTDEDCTL*(ADJEQDBTL/TOTEQDBTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) <= 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=0; MPRINT(TAXSCF): ADJDEDCTL=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((FILESTAT=3) & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) > 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=MIN((HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL)),TOTEQDBTL,50000); MPRINT(TAXSCF): ADJDEDCTL=TOTDEDCTL*(ADJEQDBTL/TOTEQDBTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((FILESTAT=3) & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) <= 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=0; MPRINT(TAXSCF): ADJDEDCTL=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TOTEQDBTL ^=. & TOTDEDCTL ^=.) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=TOTEQDBTL; MPRINT(TAXSCF): ADJDEDCTL=TOTDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TOTEQDBTL > 0 & GRFAMTOUTM+A17AMTOUTM+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= /; MPRINT(TAXSCF): * 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), worksheet changed in 2018; MPRINT(TAXSCF): ADJDEDCT=0; MPRINT(TAXSCF): * case 1 - grandfathered debt, no home acquisition debt, maybe home equity; MPRINT(TAXSCF): IF (GRFAMTOUTM > 0 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & ADJEQDBTL <= 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & ADJEQDBTL > 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+100000)/(GRFAMTOUTM+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & ADJEQDBTL <= 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & ADJEQDBTL > 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+50000)/(GRFAMTOUTM+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * case 2 - some grandfathered debt, some home acquisition debt, maybe home equity; MPRINT(TAXSCF): ELSE IF (GRFAMTOUTM > 0 & (HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & (ADJEQDBTL=0 | ADJEQDBTL <= 100000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; 235 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & ADJEQDBTL > 100000 & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+100000) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (ADJEQDBTL <= 100000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+ADJEQDBTL),(1000000+ADJEQDBTL))) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (ADJEQDBTL > 100000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+100000),1100000))/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (ADJEQDBTL=0 | ADJEQDBTL <= 50000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & ADJEQDBTL > 50000 & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+50000) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (ADJEQDBTL=0 | ADJEQDBTL <= 50000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+ADJEQDBTL),(500000+ADJEQDBTL))) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (ADJEQDBTL=0 | ADJEQDBTL > 50000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+50000),550000))/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * case 3 - no grandfathered debt, maybe home acquisition, maybe home equity; MPRINT(TAXSCF): ELSE IF (GRFAMTOUTM=0 & (HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | ADJEQDBTL > 0)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 0 & ADJEQDBTL <= 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((100000)/ADJEQDBTL)*ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL <= 1000000) & ADJEQDBTL <= 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; 236 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL <= 1000000) & ADJEQDBTL > 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+100000)/ (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL > 1000000) & (ADJEQDBTL <= 100000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((1000000+ADJEQDBTL)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL > 1000000) & (ADJEQDBTL > 100000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((1100000)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 0 & ADJEQDBTL <= 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((50000)/ADJEQDBTL)*ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000) & ADJEQDBTL <= 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000) & ADJEQDBTL > 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+50000)/ (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000) & (ADJEQDBTL <= 50000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((500000+ADJEQDBTL)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000) & (ADJEQDBTL > 50000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((550000)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * a few obs will come out here, but they either have -1 as the interest rate or are land contracts; MPRINT(TAXSCF): IF ((GRFAMTOUTM > 0 | HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | (ADJEQDBTL*(2010 LE 2016)) > 0 | A17AMTOUTM > 0 & ADJ17AMTOUTO > 0) & ADJDEDCT=0 & X5744 IN(1 5 6) & Y1=YY1*10+1 & X720^=2010) THEN PUT "MORTGAGE DEDUCTION SHOULD NOT BE ZERO " Y1= X5744= X5746= GRFAMTOUTM= HAAMTOUTM= ADJAMTOUTO= TOTAQDBTL= ADJEQDBTL= A17AMTOUTM= ADJ17AMTOUTO= TOTDEDCTM= ADJDEDCTO= ADJDEDCTL= OVERLIM= QUALOTHPROP= CINTDCTM1= CINTDCTM2= CINTDCTM3= CINTDCTO1= CINTDCTO2= X702= X714= X7135= X723=/; MPRINT(TAXSCF): IF ((GRFAMTOUTM > 0 | HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | ADJEQDBTL > 0 | A17AMTOUTM > 0 & ADJ17AMTOUTO > 0) & OVERLIM=. & Y1=YY1*10+1) THEN PUT "OVER LIMIT INDICATOR MISSING " Y1= X5744= X5746= GRFAMTOUTM= HAAMTOUTM= ADJAMTOUTO= TOTAQDBTL= ADJEQDBTL= A17AMTOUTM= ADJ17AMTOUTO= TOTDEDCTM= ADJDEDCTO= ADJDEDCTL= OVERLIM= ADJDEDCT=/; MPRINT(TAXSCF): IF ADJDEDCT >= 100000 & Y1=YY1*10+1 THEN PUT "HUGE MORTGAGE INTEREST DEDUCTION " Y1= TOTDEDCTM= GRFAMTOUTM= HAAMTOUTM= TOTAQDBTL= ADJDEDCTL= ADJEQDBTL= ADJDEDCTO= ADJAMTOUTO= A17AMTOUTM= ADJ17AMTOUTO= HOUSE= QUALOTHPROP= FMVOTHPROP= X5744= X5746= ADJDEDCT= /; MPRINT(TAXSCF): ************Real estate taxes; MPRINT(TAXSCF): * TAXSIM doesnt want local property taxes in amount of itemized deductions, listed as a separate variable; 237 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): * 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; MPRINT(TAXSCF): PROPTXRATE=0; MPRINT(TAXSCF): IF (HOUSE > 0 & RESTAXM1 > 0) THEN PROPTXRATE=(RESTAXM1/HOUSE)*100; MPRINT(TAXSCF): IF (PROPTXRATE > 10 & Y1=YY1*10+1) THEN PUT "HIGH PROPERTY TAX RATE " Y1= HOUSE= RESTAXM1= X721= J721= X722= J722= X501= X601= X701= PROPTXRATE=/; MPRINT(TAXSCF): IF (PROPTXRATE > 10 & X722=4) THEN RESTAXM1=X721; MPRINT(TAXSCF): ************Investment interest expense; MPRINT(TAXSCF): * 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 need to add up dividend/interest income. Capital gains 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.; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * LOCs - only counting loans not secured by the residence and with asset or real estate investment as loan purpose.; MPRINT(TAXSCF): IF (X1101=1) THEN DO; MPRINT(TAXSCF): DO I=1 TO DIM(SBYHOME); MPRINT(TAXSCF): IF (SBYHOME{I}=5 & DOOWE{I}=1 & LNPURP{I} IN(76 78 79)) THEN DO; MPRINT(TAXSCF): IF (TYPAYL{I} > 0) THEN DO; MPRINT(MOCONV): IF (TYPAYLF{I}=1) THEN CMOPAYL{I}=TYPAYL{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=2) THEN CMOPAYL{I}=TYPAYL{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=3) THEN CMOPAYL{I}=TYPAYL{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=4) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=5) THEN CMOPAYL{I}=TYPAYL{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=6) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=20) THEN CMOPAYL{I}=TYPAYL{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=21) THEN CMOPAYL{I}=TYPAYL{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=8) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=11) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=12) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=23) THEN CMOPAYL{I}=TYPAYL{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=24) THEN CMOPAYL{I}=TYPAYL{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=25) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=31) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=18) THEN CMOPAYL{I}=TYPAYL{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=0) THEN CMOPAYL{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}>.Z & TYPAYLF{I}^=-1 & TYPAYLF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}>.Z & TYPAYL{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}<=.Z) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYL{I}^=-1 & TYPAYL{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYLF{I}= TYPAYL{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TYPAYL{I} IN(0 -1 -2)) THEN DO; MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (INTRATEL{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=((INTRATEL{I}/10000)*AMTOUTL{I}); 238 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEL{I} IN(0 -1)) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTL{I} > 0 & CMOPAYL{I} > 0 & SINTDCTL{I} > CMOPAYL{I}*12) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=CMOPAYL{I}*12; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTLOCINVEX=TOTLOCINVEX+SINTDCTL{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Other properties - only counting properties held for investment purposes, and hh must receive income from the property.; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNO); MPRINT(TAXSCF): IF (PROPTYPE{I} IN(41 42 43 44 45 46 47 48) & (INCOMEO{I} > 0)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified properties; MPRINT(TAXSCF): QUALPINV{I}=(HAVELNO{I}=1); MPRINT(TAXSCF): QUALINVPROP=QUALINVPROP+QUALPINV{I}; MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & HBALLNO{I} IN(1 5) & NMYRO{I} NOT IN(0 -1 -7) & INTRATEO{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAYO{I} < AMTBORRO{I}*.005) THEN CMOPAYO{I}=MAX(REGPAYO{I},TYPAYO{I}); MPRINT(TAXSCF): 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})); MPRINT(TAXSCF): 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))); MPRINT(TAXSCF): IF LNSTYRO{I}^=2010 THEN AINTDCTO{I}=(CMOPAYO{I}*12)-(AMTOWE_1O{I}-AMTOWEO{I}); MPRINT(TAXSCF): ELSE IF LNSTYRO{I}=2010 THEN AINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | CMOPAYO{I} < 0 | PAYLFTO{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEO{I}=0; MPRINT(TAXSCF): AMTOWE_1O{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & AMTBORRO{I} > 0 & LNAGEO{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTDCTO{I}=(CMOPAYO{I}*12)-(CURBAL_1O{I}-CURBALO{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | AMTBORRO{I} < 0 | LNAGEO{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALO{I}=0; MPRINT(TAXSCF): CURBAL_1O{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): ELSE SINTDCTO{I}=0; MPRINT(TAXSCF): * 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 the home was not purchased in the survey year. If the home was purchased in the survey year, set deduction to zero.; 239 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I}=0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=2010 & PURCHYRO{I}=2010) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=2010) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & CURBALO{I} > 0 & CURBAL_1O{I} > 0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & (CURBALO{I} <= 0 & CURBAL_1O{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTO{I} > 0 & CINTDCTO{I} > 0) THEN DCTDIFFO{I}=CINTDCTO{I}-SINTDCTO{I}; MPRINT(TAXSCF): ELSE DCTDIFFO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (NMYRO{I} IN(-1 -7) & NMPMTO{I} IN(-1 -7)) & AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (INTRATEO{I}=-1)) THEN DO; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest deduction; MPRINT(TAXSCF): IF ((CINTDCTO{I} + AINTDCTO{I} + SINTDCTO{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=(CINTDCTO{I}+AINTDCTO{I}+SINTDCTO{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTDCTO{I}=0; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & CMOPAYO{I} > 0 & (AVINTDCTO{I} > CMOPAYO{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): SINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & AMTOUTO{I} > 0 & (AVINTDCTO{I} > .25*AMTOUTO{I})) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & Y1=YY1*10+1 & (AVINTDCTO{I} > .25*AMTOUTO{I})) THEN PUT "DEDUCTION LARGER THAN 25% 240 The SAS System 13:32 Friday, January 29, 2021 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}= /; MPRINT(TAXSCF): * Compute total investment interest expense; MPRINT(TAXSCF): TOTINVPDCT=TOTINVPDCT+((AVINTDCTO{I})*PERPROP{I}/10000)*(HAVELNO{I}=1); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Other loans - only counting loans for (non-business) investment purposes; MPRINT(TAXSCF): ARRAY TLMTHI {*} TLMTHI1 TLMTHI2 TLMTHI3 TLMTHI4 TLMTHI5 TLMTHI6; MPRINT(TAXSCF): ARRAY CMOPAYI {*} CMOPAYI1 CMOPAYI2 CMOPAYI3 CMOPAYI4 CMOPAYI5 CMOPAYI6; MPRINT(TAXSCF): ARRAY PAYLFTI {*} PAYLFTI1 PAYLFTI2 PAYLFTI3 PAYLFTI4 PAYLFTI5 PAYLFTI6; MPRINT(TAXSCF): ARRAY AMTOWEI {*} AMTOWEI1 AMTOWEI2 AMTOWEI3 AMTOWEI4 AMTOWEI5 AMTOWEI6; MPRINT(TAXSCF): ARRAY AMTOWE_1I {*} AMTOWE_1I1 AMTOWE_1I2 AMTOWE_1I3 AMTOWE_1I4 AMTOWE_1I5 AMTOWE_1I6; MPRINT(TAXSCF): ARRAY AINTEXPI {*} AINTEXPI1 AINTEXPI2 AINTEXPI3 AINTEXPI4 AINTEXPI5 AINTEXPI6; MPRINT(TAXSCF): ARRAY LNAGEI {*} LNAGEI1 LNAGEI2 LNAGEI3 LNAGEI4 LNAGEI5 LNAGEI6; MPRINT(TAXSCF): ARRAY CURBALI {*} CURBALI1 CURBALI2 CURBALI3 URBALI4 CURBALI5 CURBALI6; MPRINT(TAXSCF): ARRAY CURBAL_1I {*} CURBAL_1I1 CURBAL_1I2 CURBAL_1I3 CURBAL_1I4 CURBAL_1I5 CURBAL_1I6; MPRINT(TAXSCF): ARRAY CINTEXPI {*} CINTEXPI1 CINTEXPI2 CINTEXPI3 CINTEXPI4 CINTEXPI5 CINTEXPI6; MPRINT(TAXSCF): ARRAY DCTDIFFI {*} DCTDIFFI1 DCTDIFFI2 DCTDIFFI3 DCTDIFFI4 DCTDIFFI5 DCTDIFFI6; MPRINT(TAXSCF): ARRAY SINTEXPI {*} SINTEXPI1 SINTEXPI2 SINTEXPI3 SINTEXPI4 SINTEXPI5 SINTEXPI6; MPRINT(TAXSCF): ARRAY AVINTEXPI {*} AVINTEXPI1 AVINTEXPI2 AVINTEXPI3 AVINTEXPI4 AVINTEXPI5 AVINTEXPI6; MPRINT(TAXSCF): ARRAY QUALN {*} QLN1 QLN2 QLN3 QLN4 QLN5 QLN6; MPRINT(TAXSCF): ARRAY NMPMTI {*} X2716 X2733 X2816 X2833 X2916 X2933; MPRINT(TAXSCF): ARRAY NMYRI {*} X2717 X2734 X2817 X2834 X2917 X2934; MPRINT(TAXSCF): ARRAY REGPAYFI {*} X7527 X7526 X7525 X7524 X7523 X7522; MPRINT(TAXSCF): ARRAY REGPAYI {*} X2718 X2735 X2818 X2835 X2918 X2935; MPRINT(TAXSCF): ARRAY TYPAYFI {*} X2720 X2737 X2820 X2837 X2920 X2937; MPRINT(TAXSCF): ARRAY TYPAYI {*} X2719 X2736 X2819 X2836 X2919 X2936; MPRINT(TAXSCF): ARRAY LNSTYRI {*} X2713 X2730 X2813 X2830 X2913 X2930; MPRINT(TAXSCF): ARRAY AMTBORRI {*} X2714 X2731 X2814 X2831 X2914 X2931; MPRINT(TAXSCF): ARRAY JAMTBORRI {*} J2714 J2731 J2814 J2831 J2914 J2931; MPRINT(TAXSCF): ARRAY AMTOUTI {*} X2723 X2740 X2823 X2840 X2923 X2940; MPRINT(TAXSCF): ARRAY JAMTOUTI {*} J2723 J2740 J2823 J2840 J2923 J2940; MPRINT(TAXSCF): ARRAY INTRATEI {*} X2724 X2741 X2824 X2841 X2924 X2941; MPRINT(TAXSCF): ARRAY ONSCHEDI {*} X7521 X7520 X7519 X7518 X7517 X7516; MPRINT(TAXSCF): ; MPRINT(TAXSCF): ARRAY LNTYPE {*} X2710 X2727 X2810 X2827 X2910 X2927; MPRINT(TAXSCF): ARRAY BUSLN {*} X6842 X6843 X6844 X6845 X6846 X6847; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTHI); MPRINT(TAXSCF): TLMTHI{I}=0; MPRINT(TAXSCF): CMOPAYI{I}=0; MPRINT(TAXSCF): PAYLFTI{I}=0; MPRINT(TAXSCF): AMTOWEI{I}=0; MPRINT(TAXSCF): AMTOWE_1I{I}=0; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): LNAGEI{I}=0; MPRINT(TAXSCF): CURBALI{I}=0; MPRINT(TAXSCF): CURBAL_1I{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): DCTDIFFI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; MPRINT(TAXSCF): AVINTEXPI{I}=0; MPRINT(TAXSCF): QUALN{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTLNINVEX=0; MPRINT(TAXSCF): QUALOANINV=0; 241 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): DO I=1 TO DIM(NMPMTI); MPRINT(TERMCON): IF (NMYRI{I}=0 & NMPMTI{I}=0) THEN DO; MPRINT(TERMCON): TLMTHI{I}=0; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRI{I}^=0|NMPMTI{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRI{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRI{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHI{I}=NMYRI{I}; MPRINT(TERMCON): IF (NMPMTI{I}=0) THEN DO; MPRINT(TERMCON): NMPMTI{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRI{I}>0) THEN DO; MPRINT(TERMCON): TLMTHI{I}=NMYRI{I}*12; MPRINT(TERMCON): IF (NMPMTI{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYFI{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMTI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFI{I}=-7) THEN DO; MPRINT(TERMCON): NMPMTI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFI{I}=8) THEN DO; MPRINT(TERMCON): NMPMTI{I}=1; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFI{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYFI{I}=1) THEN NMPMTI{I}=TLMTHI{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=2) THEN NMPMTI{I}=TLMTHI{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=3) THEN NMPMTI{I}=TLMTHI{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=4) THEN NMPMTI{I}=TLMTHI{I}; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=5) THEN NMPMTI{I}=TLMTHI{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=6) THEN NMPMTI{I}=TLMTHI{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=20) THEN NMPMTI{I}=TLMTHI{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=21) THEN NMPMTI{I}=TLMTHI{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=11) THEN NMPMTI{I}=TLMTHI{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=12) THEN NMPMTI{I}=TLMTHI{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=23) THEN NMPMTI{I}=TLMTHI{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=24) THEN NMPMTI{I}=TLMTHI{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=25) THEN NMPMTI{I}=TLMTHI{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=31) THEN NMPMTI{I}=TLMTHI{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=18) THEN NMPMTI{I}=TLMTHI{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=0) THEN NMPMTI{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}>.Z & REGPAYFI{I}^=-1 & REGPAYFI{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMTI{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTHI{I}= REGPAYFI{I}= NMPMTI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHI{I}>.Z & TLMTHI{I}<-2) THEN DO; MPRINT(MOCONV): NMPMTI{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTHI{I}= REGPAYFI{I}= NMPMTI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHI{I}<=.Z) THEN NMPMTI{I}=TLMTHI{I}; MPRINT(MOCONV): ELSE IF (TLMTHI{I}^=-1 & TLMTHI{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFI{I}= TLMTHI{I}= "SETTING AMT=."; MPRINT(MOCONV): NMPMTI{I}=.; MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; 242 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTI{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHI{I}=-1; MPRINT(TERMCON): IF (NMYRI{I}=0) THEN DO; MPRINT(TERMCON): NMYRI{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTI{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYFI{I}; MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYFI{I}>0) THEN PFREQ=TYPAYFI{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTHI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; MPRINT(TERMCON): TLMTHI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): IF (NMPMTI{I}>0) THEN DO; MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTHI{I}=NMPMTI{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}))); MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12))); MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTHI{I}=NMPMTI{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTHI{I}=NMPMTI{I}*2/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTHI{I}=NMPMTI{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTHI{I}=NMPMTI{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTHI{I}=NMPMTI{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTHI{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): TLMTHI{I}=NMPMTI{I}; MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMTI{I}= PFREQ= TLMTHI{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}>.Z & NMPMTI{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTHI{I}=NMPMTI{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMTI{I}= PFREQ= TLMTHI{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}=0) THEN TLMTHI{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}<=.Z) THEN TLMTHI{I}=NMPMTI{I}; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}^=-1 & NMPMTI{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMTI{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTHI{I}=.; MPRINT(IMOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTHI{I}>0) THEN DO; MPRINT(TERMCON): NMYRI{I}=MAX(1,INT(.5+(TLMTHI{I}/12))); MPRINT(TERMCON): TLMTHI{I}=MAX(1,ROUND(TLMTHI{I})); MPRINT(TERMCON): END; MPRINT(TERMCON): IF (NMYRI{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMTI{I}= NMYRI{I}= TLMTHI{I}= REGPAYFI{I}= REGPAYI{I}= TYPAYFI{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; 243 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAYI{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYFI{I}=1) THEN CMOPAYI{I}=REGPAYI{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=2) THEN CMOPAYI{I}=REGPAYI{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=3) THEN CMOPAYI{I}=REGPAYI{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=4) THEN CMOPAYI{I}=REGPAYI{I}; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=5) THEN CMOPAYI{I}=REGPAYI{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=6) THEN CMOPAYI{I}=REGPAYI{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=20) THEN CMOPAYI{I}=REGPAYI{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=21) THEN CMOPAYI{I}=REGPAYI{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=8) THEN CMOPAYI{I}=REGPAYI{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=11) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=12) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=23) THEN CMOPAYI{I}=REGPAYI{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=24) THEN CMOPAYI{I}=REGPAYI{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=25) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=31) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=18) THEN CMOPAYI{I}=REGPAYI{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=0) THEN CMOPAYI{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}>.Z & REGPAYFI{I}^=-1 & REGPAYFI{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAYI{I}= REGPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYI{I}>.Z & REGPAYI{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAYI{I}= REGPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYI{I}<=.Z) THEN CMOPAYI{I}=REGPAYI{I}; MPRINT(MOCONV): ELSE IF (REGPAYI{I}^=-1 & REGPAYI{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFI{I}= REGPAYI{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(MOCONV): IF (TYPAYFI{I}=1) THEN CMOPAYI{I}=TYPAYI{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=2) THEN CMOPAYI{I}=TYPAYI{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=3) THEN CMOPAYI{I}=TYPAYI{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=4) THEN CMOPAYI{I}=TYPAYI{I}; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=5) THEN CMOPAYI{I}=TYPAYI{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=6) THEN CMOPAYI{I}=TYPAYI{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=20) THEN CMOPAYI{I}=TYPAYI{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=21) THEN CMOPAYI{I}=TYPAYI{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=8) THEN CMOPAYI{I}=TYPAYI{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=11) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=12) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=23) THEN CMOPAYI{I}=TYPAYI{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=24) THEN CMOPAYI{I}=TYPAYI{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=25) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=31) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=18) THEN CMOPAYI{I}=TYPAYI{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=0) THEN CMOPAYI{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}>.Z & TYPAYFI{I}^=-1 & TYPAYFI{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYI{I}= TYPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYI{I}>.Z & TYPAYI{I}<-2) THEN DO; 244 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYI{I}= TYPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYI{I}<=.Z) THEN CMOPAYI{I}=TYPAYI{I}; MPRINT(MOCONV): ELSE IF (TYPAYI{I}^=-1 & TYPAYI{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYFI{I}= TYPAYI{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF NMYRI{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFTI{I}=(TLMTHI{I}-((2010-LNSTYRI{I})*12)); MPRINT(TAXSCF): LNAGEI{I}=TLMTHI{I}-PAYLFTI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFTI{I}=0; MPRINT(TAXSCF): LNAGEI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): DO I=1 TO MIN(6,X2709); MPRINT(TAXSCF): IF (LNTYPE{I} IN(76 78 79) & BUSLN{I} IN(0 5 8)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified loans; MPRINT(TAXSCF): QUALN{I}=1; MPRINT(TAXSCF): QUALOANINV=QUALOANINV+QUALN{I}; MPRINT(TAXSCF): IF (NMYRI{I} NOT IN(0 -1 -7) & INTRATEI{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & PAYLFTI{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAYI{I} < AMTBORRI{I}*.005) THEN CMOPAYI{I}=MAX(REGPAYI{I},TYPAYI{I}); MPRINT(TAXSCF): AMTOWEI{I}=CMOPAYI{I}*((1-1/(1+(INTRATEI{I}/10000)/12)**PAYLFTI{I})/ ((INTRATEI{I}/10000)/12)); MPRINT(TAXSCF): AMTOWE_1I{I}=CMOPAYI{I}*((1-1/(1+(INTRATEI{I}/10000)/12)**(PAYLFTI{I}+12))/ ((INTRATEI{I}/10000)/12)); MPRINT(TAXSCF): IF LNSTYRI{I}^=2010 THEN AINTEXPI{I}=(CMOPAYI{I}*12)-(AMTOWE_1I{I}-AMTOWEI{I}); MPRINT(TAXSCF): ELSE IF LNSTYRI{I}=2010 THEN AINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHI{I} < 0 | CMOPAYI{I} < 0 | PAYLFTI{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEI{I}=0; MPRINT(TAXSCF): AMTOWE_1I{I}=0; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & AMTBORRI{I} > 0 & LNAGEI{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTEXPI{I}=(CMOPAYI{I}*12)-(CURBAL_1I{I}-CURBALI{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHI{I} < 0 | AMTBORRI{I} < 0 | LNAGEI{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALI{I}=0; MPRINT(TAXSCF): CURBAL_1I{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUTI{I} > 0 & INTRATEI{I} > 0) THEN SINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): ELSE SINTEXPI{I}=0; MPRINT(TAXSCF): * 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, set the interest expense to zero.; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & PAYLFTI{I}=0) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=CURBAL_1I{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=CINTEXPI{I}; 245 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & LNSTYRI{I}=2010) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTEXPI{I} < 0 | CINTEXPI{I} < 0) & CURBALI{I} > 0 & CURBAL_1I{I} > 0) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=CURBAL_1I{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=CINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTEXPI{I} < 0 | CINTEXPI{I} < 0) & (CURBALI{I} <= 0 & CURBAL_1I{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTEXPI{I} > 0 & CINTEXPI{I} > 0) THEN DCTDIFFI{I}=CINTEXPI{I}-SINTEXPI{I}; MPRINT(TAXSCF): ELSE DCTDIFFI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): CINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEI{I}=-1) THEN DO; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest expense; MPRINT(TAXSCF): IF ((CINTEXPI{I} + AINTEXPI{I} + SINTEXPI{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=(CINTEXPI{I}+AINTEXPI{I}+SINTEXPI{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTEXPI{I}=0; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (AVINTEXPI{I} > 0 & CMOPAYI{I} > 0 & (AVINTEXPI{I} > CMOPAYI{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=CMOPAYI{I}*12; MPRINT(TAXSCF): CINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): SINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AVINTEXPI{I} > 0 & AMTOUTI{I} > 0 & (AVINTEXPI{I} > .25*AMTOUTI{I})) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): CINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): * Compute loan investment interest expense; 246 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): TOTLNINVEX=TOTLNINVEX+AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Total investment interest expense, if investment interest expense is greater than interest/dividend income, then expense is limited to income amount; MPRINT(TAXSCF): TOTINTINC=X5708+X5710; MPRINT(TAXSCF): TOTINVEX=0; MPRINT(TAXSCF): TOTINVEX=TOTLOCINVEX+TOTINVPDCT+TOTLNINVEX; MPRINT(TAXSCF): IF TOTINVEX > 0 THEN HINVEX=1; MPRINT(TAXSCF): ELSE HINVEX=0; MPRINT(TAXSCF): IF TOTINVEX > TOTINTINC & Y1=YY1*10+1 THEN PUT "TOO MUCH INVESTMENT INTEREST EXPENSES " Y1= TOTINVEX= TOTLOCINVEX= TOTINVPDCT= TOTLNINVEX= TOTINTINC=/; MPRINT(TAXSCF): IF (TOTINVEX > TOTINTINC) THEN TOTINVEX=TOTINTINC; MPRINT(TAXSCF): * In 1988, 40% of personal interest is deductible, this includes credit cards, car/other vehicle loans, other consumer loans, loans against life insurance policies, home improvement loans, and non-HELOC LOCs.; MPRINT(TAXSCF): TOTPINEX=0; MPRINT(TAXSCF): **************Charitable Contributions; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): GCHARITY=(X5822=1); MPRINT(TAXSCF): CHARITYAMT=0; MPRINT(TAXSCF): IF (X5822=1 & X5823 > 0) THEN DO; MPRINT(TAXSCF): IF (X5823 > .5*AGI) & (AGI>0) THEN CHARITYAMT=.5*AGI; MPRINT(TAXSCF): ELSE CHARITYAMT=X5823; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF X5822=1 & X5823 > 0 & AGI < 0 & Y1=YY1*10+1 THEN PUT "NEGATIVE AGI BUT CHARITYAMT > 0 " Y1= X5823= CHARITYAMT= X5744= X5746= AGI=; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ITEMDEDCT_FLAG=0 THEN DO; MPRINT(TAXSCF): ADJDEDCT=0; MPRINT(TAXSCF): RESTAXM1=0; MPRINT(TAXSCF): TOTINVEX=0; MPRINT(TAXSCF): CHARITYAMT=0; MPRINT(TAXSCF): TOTPINEX=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): **********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.; MPRINT(TAXSCF): TOTITEMDCT=0; MPRINT(TAXSCF): * no limits on itemized deductions in 1988, 2012 and 2018; MPRINT(TAXSCF): * starting in 2015, itemized deduction phaseout limit for AGI are the same as for personal exemptions, so using EXLIM1-4 in this code; MPRINT(TAXSCF): TEMPITEMDCT=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); MPRINT(TAXSCF): IF TEMPITEMDCT > 0 & ((AGI <= 166800 & FILESTAT^=3) | (AGI <= 83400 & FILESTAT=3)) THEN DO; MPRINT(TAXSCF): TOTITEMDCT=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); MPRINT(TAXSCF): DEDCTLIM=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TEMPITEMDCT > 0 & DEDCTLIM^=0 THEN DO; MPRINT(TAXSCF): ITDLIM=166800*(FILESTAT^=3)+83400*(FILESTAT=3); MPRINT(TAXSCF): DEDCTLIM=1; MPRINT(TAXSCF): IWLINE1=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); MPRINT(TAXSCF): IF (IWLINE1-TOTINVEX <= 0) THEN TOTITEMDCT=IWLINE1; MPRINT(TAXSCF): ELSE IF (IWLINE1-TOTINVEX > 0) THEN DO; MPRINT(TAXSCF): IWLINE4=(IWLINE1-TOTINVEX)*.80; MPRINT(TAXSCF): IWLINE7=AGI-ITDLIM; MPRINT(TAXSCF): IWLINE8=IWLINE7*.03; 247 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): IWLINE9=MIN(IWLINE4,IWLINE8); MPRINT(TAXSCF): IWLINE10=IWLINE9/1.5; MPRINT(TAXSCF): IWLINE11=IWLINE9-IWLINE10; MPRINT(TAXSCF): TOTITEMDCT=IWLINE1-IWLINE11; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TEMPITEMDCT=0 THEN DEDCTLIM=0; MPRINT(TAXSCF): * NOTE: Change in worksheet for 2006; MPRINT(TAXSCF): * no limits on exemptions in 1988 and 2012, no exemptions in 2018; MPRINT(TAXSCF): TOTEXPTAMT=0; MPRINT(TAXSCF): EXPTLIM=0; MPRINT(TAXSCF): EXLIM=166800*(FILESTAT=1)+250200*(FILESTAT IN(2 5)) +125100*(FILESTAT=3)+208500*(FILESTAT=4); MPRINT(TAXSCF): EXPAGIT=122500*(FILESTAT^=3)+61250*(FILESTAT=3); MPRINT(TAXSCF): DLINE6=2500*(FILESTAT^=3)+1250*(FILESTAT=3); MPRINT(TAXSCF): IF (AGI <= EXLIM) THEN TOTEXPTAMT=TOTEXPT*3650; MPRINT(TAXSCF): ELSE IF (AGI > EXLIM) THEN DO; MPRINT(TAXSCF): EXPTLIM=1; MPRINT(TAXSCF): EWLINE2=TOTEXPT*3650; MPRINT(TAXSCF): EWLINE5=AGI-EXLIM; MPRINT(TAXSCF): IF EWLINE5 > EXPAGIT THEN TOTEXPTAMT=TOTEXPT*2433; MPRINT(TAXSCF): ELSE IF EWLINE5 <= EXPAGIT THEN DO; MPRINT(TAXSCF): EWLINE6=ROUND((EWLINE5/DLINE6),1); MPRINT(TAXSCF): EWLINE7=EWLINE6*.02; MPRINT(TAXSCF): EWLINE8=EWLINE7*EWLINE2; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Standard deduction by filing status, including addition deduction amount for over 65, dont have any info on blindness. Also compute number of age exemptions and flag nonfilers based on IRS filing thresholds and a few other assumptions. Nonfilers also cannot have negative AGI, losses from business or capital gains or more than 1/3 of the lowest filing threshold, which is married, filing separately; MPRINT(TAXSCF): BUSRENTCAPLOSS=(TBUSINC < 0 | RENTINC < 0 | CAPGLINC < 0); MPRINT(TAXSCF): HWSINCSE=(WSINCOME >= (.33*3650) | WSINCSP >= (.33*3650) | TBUSINC >= (.33*3650)); MPRINT(TAXSCF): STDDCT=0; MPRINT(TAXSCF): IF (FILESTAT=1 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=5700; MPRINT(TAXSCF): NONFILER=(0 < AGI < 9350)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=1 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=7100; MPRINT(TAXSCF): NONFILER=(0 < AGI < 10750)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=2 & TUAGE < 65 & SPAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=11400; MPRINT(TAXSCF): NONFILER=(0 < AGI < 18700)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=2 & TUAGE >= 65 & SPAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=13600; MPRINT(TAXSCF): NONFILER=(0 < AGI < 20900)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=2 & (TUAGE >= 65 | SPAGE >= 65)) THEN DO; MPRINT(TAXSCF): STDDCT=12500; MPRINT(TAXSCF): NONFILER=(0 < AGI < 19800)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=5700; MPRINT(TAXSCF): NONFILER=(AGI < 3650)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & TUAGE >= 65) THEN DO; 248 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): STDDCT=7100; MPRINT(TAXSCF): NONFILER=(AGI < 3650)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=4 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=8350; MPRINT(TAXSCF): NONFILER=(0 < AGI < 12000)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=4 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=9750; MPRINT(TAXSCF): NONFILER=(0 < AGI < 13400)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=5 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=11400; MPRINT(TAXSCF): NONFILER=(AGI < 15050)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=5 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=12500; MPRINT(TAXSCF): NONFILER=(0 < AGI < 16150)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): AGEXMP=(TUAGE > 65) + (SPAGE > 65)*(FILESTAT=2); MPRINT(TAXSCF): * Did the hh itemize; MPRINT(TAXSCF): * No itemization question in 1989 or 1992, so itemize will be zero; MPRINT(TAXSCF): ITEMIZE=(TAXUNIT=0)*(X7367=1 | X7368=1 | X7369=1)+(TAXUNIT=1)*(X7368=1)+(TAXUNIT=2)*(X7369=1); MPRINT(TAXSCF): CITEMIZE=(TOTITEMDCT => STDDCT); MPRINT(TAXSCF): * Construct other variables needed for TAXSIM; MPRINT(TAXSCF): TAXUNITID=Y1*100+TAXUNIT; MPRINT(TAXSCF): YEAR=2009; MPRINT(TAXSCF): AGECL=1*(TUAGE < 26)+2*(26<=TUAGE<35)+3*(35<=TUAGE<45) +4*(45<=TUAGE<55)+5*(55<=TUAGE<65)+6*(TUAGE>=65); MPRINT(TAXSCF): * 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).; MPRINT(TAXSCF): STCAPINC=0; MPRINT(TAXSCF): LTCAPINC=0; MPRINT(TAXSCF): IF (AGICL IN(1)) THEN DO; MPRINT(TAXSCF): IF (CAPGLINC > 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.76; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.76); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (CAPGLINC < 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.63; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.63); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AGICL IN(2)) THEN DO; MPRINT(TAXSCF): IF (CAPGLINC > 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.76; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.76); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (CAPGLINC < 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.65; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.65); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AGICL IN(3)) THEN DO; MPRINT(TAXSCF): IF (CAPGLINC > 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.82; 249 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.82); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (CAPGLINC < 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.59; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.59); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ARRAY NEG_1 {*} TBUSINC OTHINC RENTINC OTHPINC; MPRINT(TAXSCF): DO I=1 TO DIM(NEG_1); MPRINT(TAXSCF): IF NEG_1{I}=-1 THEN NEG_1{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): UNADJTOTDEDCT=MAX(0,(ADJDEDCT+TOTINVEX+CHARITYAMT)); MPRINT(TAXSCF): CHCAREXP=0; MPRINT(TAXSCF): TINCOME=WSINCOME+WSINCSP+TBUSINC+INTINC+NTAXINC+DIVINC+CAPGLINC+RENTINC +UNEMPINC+GSSINC+PENINC+AFDCINC+OTHINC; MPRINT(TAXSCF): TOTXINC=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC +UNEMPINC+GSSINC+PENINC+OTHINC; MPRINT(TAXSCF): *set 3000 max loss for capital gains for comparison with IRS estimates; MPRINT(TAXSCF): IF CAPGLINC < -3000 THEN CAPGL3K=-3000; MPRINT(TAXSCF): ELSE CAPGL3K=CAPGLINC; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (TOTXINC=0 & TINCOME > 0 & AFDCINC=0 & NTAXINC=0 & TAXUNIT < 3 & Y1=YY1*10+1) THEN PUT "TOTXINC IS ZERO BUT TINCOME > 0 " YY1= Y1= TOTXINC= TINCOME= WSINCOME= WSINCSP= TBUSINC= INTINC= NTAXINC= DIVINC= RENTINC= UNEMPINC= AFDCINC= GSSINC= PENINC= OTHINC= CAPGLINC= RAGE= SPAGE= FILESTAT= TAXUNIT= X4100= X4700=/; MPRINT(TAXSCF): * Adding in payroll tax liability and mtr, assuming employee pays both employee and employer share, and 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 earning 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 tax year, 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 caculate the payroll liability and mtr. Computing the payroll atr in a similar fashion. NOTE: Need to adjust for different amounts used to compute the mtr, initially computing payroll mtr for adding $1 to earnings.; MPRINT(TAXSCF): * Need to adjust for 1988, 2% credit for SE, in 1991, limit on medicare tax; MPRINT(TAXSCF): ** earnings from wages and businesses for head and spouse/parnter; MPRINT(TAXSCF): REARN=R_LABORINC+R_BUSINC; MPRINT(TAXSCF): SPEARN=SP_LABORINC+SP_BUSINC; MPRINT(TAXSCF): HHEARN=REARN+SPEARN; MPRINT(TAXSCF): TWSINC=WSINCOME+WSINCSP; MPRINT(TAXSCF): PAYROLLIAB=0; MPRINT(TAXSCF): PAYROLLMTR=0; MPRINT(TAXSCF): PAYROLLATR=0; MPRINT(TAXSCF): IF TAXUNIT=0 THEN DO; MPRINT(TAXSCF): IF (X4106 IN(1 2 3 4 -7) & X4706=0) | (X4106=0 & X4706 IN(1 2 3 4 -7)) | (X4106=0 & X4706=0 & X102=0 & (TWSINC > 0 | TBUSINC > 0)) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(106800,(TWSINC+TBUSINC*(TBUSINC >0)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*.029)*(2010 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*.029)*(2010 EQ 1992); MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 106800)*(100*.124))+ (100*.029)*(2010 GE 1995)+ (100*.029)*(2010 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB >0) THEN PAYROLLATR=100*(PAYROLLIAB/(TWSINC+TBUSINC*(TBUSINC > 0))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X4106 IN(1 2 3 4 -7) & X4706 IN(1 2 3 4 -7)) THEN DO; MPRINT(TAXSCF): IF (X4115 >=1 & X4715 >=1 & HHEARN > 0) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(106800,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*.124 + ((TWSINC+TBUSINC*(TBUSINC 250 The SAS System 13:32 Friday, January 29, 2021 >0))*(REARN/HHEARN))*.029*(2010 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*(REARN/HHEARN))*.029*(2010 EQ 1992)+ MIN(106800,((TWSINC+TBUSINC*(TBUSINC >0))*(SPEARN/HHEARN)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(SPEARN/HHEARN))*.029*(2010 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*(SPEARN/HHEARN))*.029*(2010 EQ 1992); MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(REARN/HHEARN) <= 106800)*(100*.124))+(100*.029)*(2010 GE 1995)+ (100*.029)*(2010 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1)*(REARN/HHEARN) <= 125000); MPRINT(TAXSCF): IF ((MIN(106800,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(REARN/HHEARN))*.029) > 0) THEN PAYROLLATR=100*((MIN(106800,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*.124 + ((2010 GE 1995)*((TWSINC+TBUSINC*(TBUSINC >0))*(REARN/HHEARN))*.029)+ ((2010 EQ 1992)*(MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*(REARN/HHEARN))*.029))/ ((TWSINC+TBUSINC*(TBUSINC > 0))*(REARN/HHEARN))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X4115 =-1 & X4715=-1) | (X4115 >=1 & X4715=-1) | (X4115=-1 & X4715 >=1) | (HHEARN=0) THEN DO; MPRINT(TAXSCF): IF ((TWSINC+TBUSINC*(TBUSINC >0)) <= 106800) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=(TWSINC+TBUSINC*(TBUSINC >0))*.124+ (TWSINC+TBUSINC*(TBUSINC >0))*.029; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((TWSINC+TBUSINC*(TBUSINC >0)) > 106800) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(2*106800,((TWSINC+TBUSINC*(TBUSINC >0))))*.124+ (TWSINC+TBUSINC*(TBUSINC >0))*.029*(2010 GE 1995)+ MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*.029*(2010 EQ 1992); MPRINT(TAXSCF): END; MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(.5) <= 106800)*(100*.124))+(100*.029)*(2010 GE 1995)+ (100*.029)*(2010 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB*.5 > 0) THEN PAYROLLATR=100*((PAYROLLIAB*.5)/((TWSINC+TBUSINC*(TBUSINC >0))*(.5))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X4106=0 & X4706=0 & X102^=0 & (TWSINC > 0 | TBUSINC > 0)) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=2*(MIN(106800,((TWSINC+TBUSINC*(TBUSINC >0))*(.5)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(.5))*.029*(2010 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)*(.5)))*.029)*(2010 EQ 1992)); MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(.5) <= 106800)*(100*.124))+(100*.029)*(2010 GE 1995)+ (100*.029)*(2010 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB*.5 > 0) THEN PAYROLLATR=100*((PAYROLLIAB*.5)/((TWSINC+TBUSINC*(TBUSINC >0))*(.5))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TAXUNIT >= 1 THEN DO; MPRINT(TAXSCF): IF (WSINCOME > 0 | TBUSINC > 0) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(106800,(WSINCOME+TBUSINC*(TBUSINC >0)))*.124 + ((WSINCOME+TBUSINC*(TBUSINC >0))*.029)*(2010 GE 1995)+ (MIN(125000,(WSINCOME+TBUSINC*(TBUSINC >0)))*.029)*(2010 EQ 1992); MPRINT(TAXSCF): PAYROLLMTR=(((WSINCOME+TBUSINC*(TBUSINC > 0)+1)<=106800)*(100*.124))+ (100*.029)*(2010 GE 1995)+ (100*.029)*(2010 EQ 1992)*((WSINCOME+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB >0) THEN PAYROLLATR=100*(PAYROLLIAB/(WSINCOME+TBUSINC*(TBUSINC > 0))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF PAYROLLIAB=0 & PAYROLLMTR=0 & PAYROLLATR=0 & (TWSINC > 0 | TBUSINC > 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= TWSINC= TBUSINC= R_LABORINC= R_BUSINC= R_SOLEPROP= SP_LABORINC= SP_BUSINC= SP_SOLEPROP= REARN= SPEARN= HHEARN= TAXUNIT=/; MPRINT(TAXSCF): * Check for missing variables; MPRINT(TAXSCF): ARRAY CHVARS {*} YY1 Y1 CHARITYAMT X5823 TOTITEMDCT STDDCT AGI AGICL AGIGE50K DEDCTLIM X7372 X7018 X8023 X105 PERSEXP KIDS TOTEXPT FILESTAT TOTEXPTAMT EXPTLIM RAGE SPAGE TUAGE YEAR STATE TAXUNIT WSINCOME WSINCSP TBUSINC NTAXINC INTINC DIVINC CAPGLINC RENTINC UNEMPINC CHSPALINC AFDCINC PENINC OTHINC GSSINC OTHPINC NONTAX RENT UNADJTOTDEDCT CHCAREXP TINCOME TOTXINC STCAPINC LTCAPINC PAYROLLIAB PAYROLLMTR PAYROLLATR LWP KIDSU17 KIDSU18 KIDSU13; MPRINT(TAXSCF): DO I=1 TO DIM(CHVARS); MPRINT(TAXSCF): IF CHVARS{I}=. THEN PUT "MISSING VALUE FOR " Y1= CHVARS{I}=; MPRINT(TAXSCF): END; MPRINT(TAXSCF): RUN; NOTE: The file "null.txt" is: Filename=/disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code/null.txt, 251 The SAS System 13:32 Friday, January 29, 2021 Owner Name=taxsim,Group Name=taxsim, Access Permission=-rw-r--r--, Last Modified=29Jan2021:13:33:54 NOTE: 863 records were written to the file "null.txt". The minimum record length was 0. The maximum record length was 375. NOTE: There were 40413 observations read from the data set WORK.SCF. NOTE: The data set WORK.SCF has 40413 observations and 5677 variables. NOTE: DATA statement used (Total process time): real time 1.12 seconds cpu time 1.11 seconds MPRINT(TAXSCF): * Create a dataset for full TAXSIM. Breaking out total itemized deductions into its parts - have applied the limits for the mortgage interest deduction and investment interest expense, but not for charitable contributions.; MPRINT(TAXSCF): PROC SORT DATA=SCF; MPRINT(TAXSCF): BY TAXUNITID; MPRINT(TAXSCF): RUN; NOTE: There were 40413 observations read from the data set WORK.SCF. NOTE: The data set WORK.SCF has 40413 observations and 5677 variables. NOTE: PROCEDURE SORT used (Total process time): real time 0.75 seconds cpu time 0.75 seconds MPRINT(TAXSCF): proc means; MPRINT(TAXSCF): var y1 yy1 year year; MPRINT(TAXSCF): run; NOTE: There were 40413 observations read from the data set WORK.SCF. NOTE: The PROCEDURE MEANS printed page 344. NOTE: PROCEDURE MEANS used (Total process time): real time 0.10 seconds cpu time 0.10 seconds MPRINT(TAXSCF): * Rename variables to TAXSIM names, use lowercase for TAXSIM file names; MPRINT(TAXSCF): libname swt "../swt/sas"; NOTE: Libref SWT was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/swt/sas MPRINT(TAXSCF): DATA swt.swt10; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): rep=mod(y1,10); MPRINT(TAXSCF): * IF FILESTAT > 0; MPRINT(TAXSCF): mstat=1*(FILESTAT IN(1 4))+2*(FILESTAT IN(2 5))+6*(FILESTAT IN(3)); MPRINT(TAXSCF): otherprop=RENTINC+TBUSINC; MPRINT(TAXSCF): nonprop=CHSPALINC+OTHINC; MPRINT(TAXSCF): otheritem=TOTINVEX+TOTPINEX; MPRINT(TAXSCF): mortgage=ADJDEDCT+X5823; MPRINT(TAXSCF): scorp=0; MPRINT(TAXSCF): pbusinc=0; MPRINT(TAXSCF): pprofinc=0; MPRINT(TAXSCF): sbusinc=0; MPRINT(TAXSCF): sprofinc=0; 252 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): tyear=YEAR; MPRINT(TAXSCF): tstate=STATE; MPRINT(TAXSCF): * set idtl=2 to get detailed output from TAXSIM; MPRINT(TAXSCF): idtl=2; MPRINT(TAXSCF): DROP STATE; MPRINT(TAXSCF): RENAME TAXUNITID=taxsimid TUAGE=page SPAGE=sage KIDS=depx KIDSU13=dep13 KIDSU17=dep17 KIDSU18=dep18 WSINCOME=pwages WSINCSP=swages DIVINC=dividends INTINC=intrec STCAPINC=stcg LTCAPINC=ltcg PENINC=pensions GSSINC=gssi UNEMPINC=ui AFDCINC=transfers RENT=rentpaid RESTAXM1=proptax CHCAREXP=childcare tyear=year; MPRINT(TAXSCF): RUN; WARNING: Variable tyear cannot be renamed to year because year already exists. NOTE: There were 40413 observations read from the data set WORK.SCF. NOTE: The data set SWT.SWT10 has 40413 observations and 5690 variables. NOTE: DATA statement used (Total process time): real time 9.84 seconds cpu time 1.35 seconds MPRINT(TAXSCF): proc means; MPRINT(TAXSCF): var y1 yy1 year; MPRINT(TAXSCF): run; NOTE: There were 40413 observations read from the data set SWT.SWT10. NOTE: The PROCEDURE MEANS printed page 345. NOTE: PROCEDURE MEANS used (Total process time): real time 8.89 seconds cpu time 0.57 seconds MPRINT(TAXSCF): libname taxsim "../txpydata/sas"; NOTE: Libref TAXSIM was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/txpydata/sas MPRINT(TAXSCF): proc contents data=swt.swt10; MPRINT(TAXSCF): run; NOTE: PROCEDURE CONTENTS used (Total process time): real time 0.01 seconds cpu time 0.01 seconds NOTE: The PROCEDURE CONTENTS printed pages 346-455. MPRINT(TAXSCF): DATA taxsim.txpydata10; MPRINT(TAXSCF): SET swt.swt10(KEEP=taxsimid year mstat page sage depx dep13 dep17 dep18 pwages swages dividends intrec stcg ltcg otherprop nonprop pensions gssi ui transfers rentpaid proptax otheritem childcare mortgage scorp pbusinc pprofinc sbusinc sprofinc Y1 YY1 taxunit rep); MPRINT(TAXSCF): y1=Y1; MPRINT(TAXSCF): yy1=YY1; MPRINT(TAXSCF): RUN; NOTE: There were 40413 observations read from the data set SWT.SWT10. NOTE: The data set TAXSIM.TXPYDATA10 has 40413 observations and 35 variables. NOTE: DATA statement used (Total process time): real time 0.30 seconds cpu time 0.13 seconds MPRINT(TAXSCF): proc contents data=taxsim.txpydata10; 253 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): run; NOTE: PROCEDURE CONTENTS used (Total process time): real time 0.01 seconds cpu time 0.01 seconds NOTE: The PROCEDURE CONTENTS printed pages 456-457. 3875 3876 %TAXSCF(SYEAR=2007,TYEAR=2006,WYEAR=2004,ITDLIM1=150500,ITDLIM2=75250,ITDL10=3,EXPAMT=3300, 3877 EXPAMT2=1100,EXDL9=1.5,EXPAGIT1=122500,EXPAGIT2=61250,EXLIM1=150500,EXLIM2=225750, 3878 EXLIM3=112875,EXLIM4=188150,STDAMT1=5150,STDAMT2=6400,STDAMT3=10300,STDAMT4=11300, 3879 STDAMT5=12300,STDAMT6=7550,STDAMT7=8800,FILELIM1=8450,FILELIM2=9700,FILELIM3=16900,FILELIM4=17900, 3880 FILELIM5=18900,FILELIM6=3300,FILELIM7=10850,FILELIM8=12100,FILELIM9=13600,FILELIM10=14600,LCGAGI1=.88, 3881 LCLAGI1=.66,LCGAGI2=.90,LCLAGI2=.66,LCGAGI3=.94, MPRINT(TAXSCF): * define libraries for SCF public datasets; 3882 LCLAGI3=.57,PAYTAX=.124,MEDHI=.029,PTLIM=94200,HTAXFILE=HTAXFILE=&SYSPARM); MPRINT(TAXSCF): LIBNAME SCF07 "../orig/sas7bdat" ACCESS=READONLY; NOTE: Libref SCF07 refers to the same physical library as SCF10. NOTE: Libref SCF07 was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/orig/sas7bdat MPRINT(TAXSCF): * directory for datasets created by the program; MPRINT(TAXSCF): LIBNAME OUT "."; NOTE: Libref OUT was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code MPRINT(TAXSCF): * csv file for TAXSIM v32; MPRINT(TAXSCF): FILENAME SCFTAX "txpydata07.csv"; MPRINT(TAXSCF): * csv from TAXSIM v32; MPRINT(TAXSCF): FILENAME TAXSIM "results07.csv"; MPRINT(TAXSCF): * read in public SCF data, assumes dataset name is pXXiY.sas7bdat; MPRINT(TAXSCF): * NOTE: Any changes to the libname or data set name must also be made in this data step; MPRINT(TAXSCF): DATA MAIN; MPRINT(TAXSCF): SET SCF07.P07I6; NOTE: Data file SCF07.P07I6.DATA is in a format that is native to another host, or the file encoding does not match the session encoding. Cross Environment Data Access will be used, which might require additional CPU resources and might reduce performance. MPRINT(TAXSCF): RUN; NOTE: There were 22085 observations read from the data set SCF07.P07I6. NOTE: The data set WORK.MAIN has 22085 observations and 5831 variables. NOTE: DATA statement used (Total process time): real time 6.13 seconds cpu time 6.00 seconds MPRINT(TAXSCF): PROC SORT DATA=MAIN; MPRINT(TAXSCF): BY Y1; MPRINT(TAXSCF): RUN; NOTE: There were 22085 observations read from the data set WORK.MAIN. NOTE: The data set WORK.MAIN has 22085 observations and 5831 variables. NOTE: PROCEDURE SORT used (Total process time): real time 1.20 seconds cpu time 0.52 seconds 254 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET MAIN; MPRINT(TAXSCF): file "null.txt"; MPRINT(TAXSCF): WGT=(X42001/5); MPRINT(TAXSCF): POP=1; MPRINT(TAXSCF): * setting STATE variable to zero, set to -1 if you want TAXSIM to compute state tax for all 51 states; MPRINT(TAXSCF): STATE=0; MPRINT(TAXSCF): * Small data fix for one case in 1992; MPRINT(TAXSCF): * Small data fix for one case in 1998; MPRINT(TAXSCF): * Small data fix for one case in 2007; MPRINT(TAXSCF): IF (YY1=715 & X105=2) THEN DO; MPRINT(TAXSCF): X105=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Small data fix for one case in 2013; MPRINT(TAXSCF): * Payment frequency on other loans not asked in 1989, assumed to be monthly; MPRINT(TAXSCF): * Only one other income variable after 1992, set to zero for 1992 forward; MPRINT(TAXSCF): X5726=0; MPRINT(TAXSCF): X5727=0; MPRINT(TAXSCF): * Spouse/partner in PEU, need to create X7020 for 1989 to 1998; MPRINT(TAXSCF): * A few other recodes to construct variables not asked in 1989 and 1992; MPRINT(TAXSCF): * Number of years with spouse/partner; MPRINT(TAXSCF): IF 2007=X8005 THEN X7370=-1; MPRINT(TAXSCF): ELSE X7370=2007-X8005; MPRINT(TAXSCF): * Number of people in NPEU, need to compute for 1989 to 2004, variable exists for 2007 forward; MPRINT(TAXSCF): * Absent spouse/partner indicator; MPRINT(TAXSCF): IF (X100=5) | (X106=5 & X107 IN(2 5 12)) THEN ABSP_P=1; MPRINT(TAXSCF): ELSE ABSP_P=0; MPRINT(TAXSCF): PERSEXP=1+(X105 IN(1 2))*(ABSP_P=0); MPRINT(TAXSCF): * Including children living elsewhere that are under 18, max of one extra as there is uncertainty about dependent status; MPRINT(TAXSCF): 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) + (X226 IN(4 13))*(X228 < 19) + (X5912 > 0 | X5912=-2); MPRINT(TAXSCF): * For the child tax credit - must be under 17; MPRINT(TAXSCF): 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) + (X226 IN(4 13))*(X228 < 17); MPRINT(TAXSCF): KIDSU18=(X108 IN(4 13))*(X110 < 18) + (X114 IN(4 13))*(X116 < 18) + (X120 IN(4 13))*(X122 < 18) + (X126 IN(4 13))*(X128 < 18) + (X132 IN(4 13))*(X134 < 18) + (X202 IN(4 13))*(X204 < 18) + (X208 IN(4 13))*(X210 < 18) + (X214 IN(4 13))*(X216 < 18) + (X220 IN(4 13))*(X222 < 18) + (X226 IN(4 13))*(X228 < 18); MPRINT(TAXSCF): KIDSU13=(X108 IN(4 13))*(X110 < 13) + (X114 IN(4 13))*(X116 < 13) + (X120 IN(4 13))*(X122 < 13) + (X126 IN(4 13))*(X128 < 13) + (X132 IN(4 13))*(X134 < 13) + (X202 IN(4 13))*(X204 < 13) + (X208 IN(4 13))*(X210 < 13) + (X214 IN(4 13))*(X216 < 13) + (X220 IN(4 13))*(X222 < 13) + (X226 IN(4 13))*(X228 < 13); MPRINT(TAXSCF): * Indicator for R living with a partner; MPRINT(TAXSCF): LWP=(X8023=2); MPRINT(TAXSCF): RAGE=X14; MPRINT(TAXSCF): * Set spouse/parnter age to zero if absent spouse/partner; MPRINT(TAXSCF): SPAGE=X19*(X7020=2); MPRINT(TAXSCF): * Possible scenarios, not considering NPEU right now, will create those tax units last 1. Married filing jointly households = tax unit 2. Single person households = tax unit 3. Filing separately households = split into two tax units, need to determine if single or married filing separately filing status 4. LWP households = split into two tax units even if one person is a nonfiler For 3. and 4., one of the tax units may have head of household status depending on presence of children For each new tax unit, start with replicate of household data and parse out income, deductions, exemptions; MPRINT(TAXSCF): * Create new observations from married filing separately households or LWP households. 0. Tax unit = household 1. Created tax unit for household head 2. Created tax unit for spouse/parnter 3-8. Created tax unit for NPEU member Note: If R and Sp are legally married for more than one year, treat as married filing joint even if x5746=3,4. If R and Sp LWP and report filing jointly treat as two tax units. If R and Sp married and report filing separately, 255 The SAS System 13:32 Friday, January 29, 2021 treat as filing jointly unless either R or Sp has a past marriage. Inspection of the data reveals that too many married couples report filing separately when compared to the IRS data. The past marriage condition put the number closer to the IRS data.; MPRINT(TAXSCF): MARRIED=(X8023=1 & X105=1 & X7370 >= 1 & X7020=2); MPRINT(TAXSCF): IF (X5744 IN(1 6) & X5746=1 & MARRIED=1) | (MARRIED=1 & ((X5744=5 | X5746 IN(3 4)) | (X5746=2 & X7377^=2 & X7392^=2))) | (X8023 > 0 & X105=0 & (X5744=5 | (X5744 IN(1 6) & X5746=0))) | (X8023 > 0 & X105 > 0 & X5744 IN(1 5 6) & X5746=0 & X7020=1) | (X8023=8 & X105=0 & X5744=1 & X5746=1) THEN TAXUNIT=0; MPRINT(TAXSCF): ELSE IF (X5744 IN(1 6) & X5746 IN(2 3 4)) | (X8023 > 0 & X105 > 0 & (X5744=5 | (X5744 IN(1 6) & X5746 IN(0 1)))) | (X8023=1 & X105=1 & X7370=-1 & X5744=1) THEN TAXUNIT=1; MPRINT(TAXSCF): ELSE PUT "MISSING TAXUNIT STATUS " YY1= X5744= X5746= X8023= X105= X7020= MARRIED= X7372= X7018= X7370=; MPRINT(TAXSCF): TUAGE=RAGE; MPRINT(TAXSCF): RUN; NOTE: The file "null.txt" is: Filename=/disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code/null.txt, Owner Name=taxsim,Group Name=taxsim, Access Permission=-rw-r--r--, Last Modified=29Jan2021:13:34:22 NOTE: 0 records were written to the file "null.txt". NOTE: There were 22085 observations read from the data set WORK.MAIN. NOTE: The data set WORK.SCF has 22085 observations and 5849 variables. NOTE: DATA statement used (Total process time): real time 1.76 seconds cpu time 0.64 seconds MPRINT(TAXSCF): DATA NEWUNITS; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): IF TAXUNIT=1; MPRINT(TAXSCF): TAXUNIT=2; MPRINT(TAXSCF): TUAGE=SPAGE; MPRINT(TAXSCF): SPAGE=0; MPRINT(TAXSCF): RUN; NOTE: There were 22085 observations read from the data set WORK.SCF. NOTE: The data set WORK.NEWUNITS has 1845 observations and 5849 variables. NOTE: DATA statement used (Total process time): real time 0.30 seconds cpu time 0.28 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF NEWUNITS; MPRINT(TAXSCF): RUN; NOTE: There were 22085 observations read from the data set WORK.SCF. NOTE: There were 1845 observations read from the data set WORK.NEWUNITS. NOTE: The data set WORK.SCF has 23930 observations and 5849 variables. NOTE: DATA statement used (Total process time): real time 0.80 seconds cpu time 0.61 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): * Codes for filestat, assigning status even if did not file, will determine non-filer status later, 256 The SAS System 13:32 Friday, January 29, 2021 filing status for split tax units done after splitting up income 1= Single 2= Married filing jointly 3= Married filing separately 4= Head of HH 5= Qualified widower; MPRINT(TAXSCF): FILESTAT=0; MPRINT(TAXSCF): IF TAXUNIT=0 THEN DO; MPRINT(TAXSCF): IF (MARRIED=1) THEN FILESTAT=2; MPRINT(TAXSCF): ELSE IF MARRIED=0 THEN DO; MPRINT(TAXSCF): IF PERSEXP=1 & KIDS=0 THEN FILESTAT=1; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS > 0 & X8023=5 & X7372=5 & X8007>=2004 THEN FILESTAT=5; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS > 0 THEN FILESTAT=4; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTEXPT=PERSEXP+KIDS; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * No AGI variables starting in 2010; MPRINT(TAXSCF): * Coding income variables with -1 and -2 to zero; MPRINT(TAXSCF): ARRAY NEG {*} X5704 X5714 X5724 X5726 X5729; MPRINT(TAXSCF): DO I=1 TO DIM(NEG); MPRINT(TAXSCF): IF NEG{I} IN(-2 -1) THEN NEG{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Income from wages and business; MPRINT(TAXSCF): R_LABORINC=MAX(0,X4112) MPRINT(ACONV): *((X4113=2)*52.18+(X4113=3)*26.09+(X4113=4)*12+(X4113=5)*4+(X4113=6)+(X4113=8)+ (X4113=11)*2+(X4113=12)*6+(X4113=31)*24+(X4113=14)+(X4113=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): SP_LABORINC=MAX(0,X4712) MPRINT(ACONV): *((X4713=2)*52.18+(X4713=3)*26.09+(X4713=4)*12+(X4713=5)*4+(X4713=6)+(X4713=8)+ (X4713=11)*2+(X4713=12)*6+(X4713=31)*24+(X4713=14)+(X4713=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): R_BUSINC=MAX(0,X4131) MPRINT(ACONV): *((X4132=2)*52.18+(X4132=3)*26.09+(X4132=4)*12+(X4132=5)*4+(X4132=6)+(X4132=8)+ (X4132=11)*2+(X4132=12)*6+(X4132=31)*24+(X4132=14)+(X4132=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): SP_BUSINC=MAX(0,X4731) MPRINT(ACONV): *((X4732=2)*52.18+(X4732=3)*26.09+(X4732=4)*12+(X4732=5)*4+(X4732=6)+(X4732=8)+ (X4732=11)*2+(X4732=12)*6+(X4732=31)*24+(X4732=14)+(X4732=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): * Income from pensions and tax-deferred account withdrawals. No withdrawal information for IRAs or future pensions prior to 2004. No withdrawal information for any tax-deferred accounts, aside from other income, prior to 2001; MPRINT(TAXSCF): R_REGPEN=MAX(0,(X5318 MPRINT(ACONV): *((X5319=2)*52.18+(X5319=3)*26.09+(X5319=4)*12+(X5319=5)*4+(X5319=6)+(X5319=8)+ (X5319=11)*2+(X5319=12)*6+(X5319=31)*24+(X5319=14)+(X5319=22)) MPRINT(TAXSCF): *(X5315=1)*(X5317>=1))) +MAX(0,(X5326 MPRINT(ACONV): *((X5327=2)*52.18+(X5327=3)*26.09+(X5327=4)*12+(X5327=5)*4+(X5327=6)+(X5327=8)+ (X5327=11)*2+(X5327=12)*6+(X5327=31)*24+(X5327=14)+(X5327=22)) MPRINT(TAXSCF): *(X5323=1)*(X5325>=1))) +MAX(0,(X5334 MPRINT(ACONV): *((X5335=2)*52.18+(X5335=3)*26.09+(X5335=4)*12+(X5335=5)*4+(X5335=6)+(X5335=8)+ (X5335=11)*2+(X5335=12)*6+(X5335=31)*24+(X5335=14)+(X5335=22)) MPRINT(TAXSCF): *(X5331=1)*(X5333>=1))) +MAX(0,(X5418 MPRINT(ACONV): *((X5419=2)*52.18+(X5419=3)*26.09+(X5419=4)*12+(X5419=5)*4+(X5419=6)+(X5419=8)+ (X5419=11)*2+(X5419=12)*6+(X5419=31)*24+(X5419=14)+(X5419=22)) MPRINT(TAXSCF): *(X5415=1)*(X5417>=1))) +MAX(0,(X5426 MPRINT(ACONV): *((X5427=2)*52.18+(X5427=3)*26.09+(X5427=4)*12+(X5427=5)*4+(X5427=6)+(X5427=8)+ (X5427=11)*2+(X5427=12)*6+(X5427=31)*24+(X5427=14)+(X5427=22)) MPRINT(TAXSCF): *(X5423=1)*(X5425>=1))) +MAX(0,(X5434 MPRINT(ACONV): *((X5435=2)*52.18+(X5435=3)*26.09+(X5435=4)*12+(X5435=5)*4+(X5435=6)+(X5435=8)+ (X5435=11)*2+(X5435=12)*6+(X5435=31)*24+(X5435=14)+(X5435=22)) MPRINT(TAXSCF): *(X5431=1)*(X5433>=1))); MPRINT(TAXSCF): R_WITHDRAW=X6558+(X6574*.5)+MAX(0,(X6464 257 The SAS System 13:32 Friday, January 29, 2021 MPRINT(ACONV): *((X6465=2)*52.18+(X6465=3)*26.09+(X6465=4)*12+(X6465=5)*4+(X6465=6)+(X6465=8)+ (X6465=11)*2+(X6465=12)*6+(X6465=31)*24+(X6465=14)+(X6465=22)) MPRINT(TAXSCF): *(X5315=1))) +MAX(0,(X6469 MPRINT(ACONV): *((X6470=2)*52.18+(X6470=3)*26.09+(X6470=4)*12+(X6470=5)*4+(X6470=6)+(X6470=8)+ (X6470=11)*2+(X6470=12)*6+(X6470=31)*24+(X6470=14)+(X6470=22)) MPRINT(TAXSCF): *(X5323=1)))+MAX(0,(X6474 MPRINT(ACONV): *((X6475=2)*52.18+(X6475=3)*26.09+(X6475=4)*12+(X6475=5)*4+(X6475=6)+(X6475=8)+ (X6475=11)*2+(X6475=12)*6+(X6475=31)*24+(X6475=14)+(X6475=22)) MPRINT(TAXSCF): *(X5331=1))) +MAX(0,(X6479 MPRINT(ACONV): *((X6480=2)*52.18+(X6480=3)*26.09+(X6480=4)*12+(X6480=5)*4+(X6480=6)+(X6480=8)+ (X6480=11)*2+(X6480=12)*6+(X6480=31)*24+(X6480=14)+(X6480=22)) MPRINT(TAXSCF): *(X5415=1)))+MAX(0,(X6484 MPRINT(ACONV): *((X6485=2)*52.18+(X6485=3)*26.09+(X6485=4)*12+(X6485=5)*4+(X6485=6)+(X6485=8)+ (X6485=11)*2+(X6485=12)*6+(X6485=31)*24+(X6485=14)+(X6485=22)) MPRINT(TAXSCF): *(X5423=1))) +MAX(0,(X6489 MPRINT(ACONV): *((X6490=2)*52.18+(X6490=3)*26.09+(X6490=4)*12+(X6490=5)*4+(X6490=6)+(X6490=8)+ (X6490=11)*2+(X6490=12)*6+(X6490=31)*24+(X6490=14)+(X6490=22)) MPRINT(TAXSCF): *(X5431=1)))+MAX(0,(X6965 MPRINT(ACONV): *((X6966=2)*52.18+(X6966=3)*26.09+(X6966=4)*12+(X6966=5)*4+(X6966=6)+(X6966=8)+ (X6966=11)*2+(X6966=12)*6+(X6966=31)*24+(X6966=14)+(X6966=22)) MPRINT(TAXSCF): *(X5606=1))) +MAX(0,(X6971 MPRINT(ACONV): *((X6972=2)*52.18+(X6972=3)*26.09+(X6972=4)*12+(X6972=5)*4+(X6972=6)+(X6972=8)+ (X6972=11)*2+(X6972=12)*6+(X6972=31)*24+(X6972=14)+(X6972=22)) MPRINT(TAXSCF): *(X5614=1)))+MAX(0,(X6977 MPRINT(ACONV): *((X6978=2)*52.18+(X6978=3)*26.09+(X6978=4)*12+(X6978=5)*4+(X6978=6)+(X6978=8)+ (X6978=11)*2+(X6978=12)*6+(X6978=31)*24+(X6978=14)+(X6978=22)) MPRINT(TAXSCF): *(X5622=1))) +MAX(0,(X6983 MPRINT(ACONV): *((X6984=2)*52.18+(X6984=3)*26.09+(X6984=4)*12+(X6984=5)*4+(X6984=6)+(X6984=8)+ (X6984=11)*2+(X6984=12)*6+(X6984=31)*24+(X6984=14)+(X6984=22)) MPRINT(TAXSCF): *(X5630=1)))+MAX(0,(X6989 MPRINT(ACONV): *((X6990=2)*52.18+(X6990=3)*26.09+(X6990=4)*12+(X6990=5)*4+(X6990=6)+(X6990=8)+ (X6990=11)*2+(X6990=12)*6+(X6990=31)*24+(X6990=14)+(X6990=22)) MPRINT(TAXSCF): *(X5638=1))) +MAX(0,(X6995 MPRINT(ACONV): *((X6996=2)*52.18+(X6996=3)*26.09+(X6996=4)*12+(X6996=5)*4+(X6996=6)+(X6996=8)+ (X6996=11)*2+(X6996=12)*6+(X6996=31)*24+(X6996=14)+(X6996=22)) MPRINT(TAXSCF): *(X5646=1)))+(X5724)*(X5725=11)*.5; MPRINT(TAXSCF): SP_REGPEN=MAX(0,(X5318 MPRINT(ACONV): *((X5319=2)*52.18+(X5319=3)*26.09+(X5319=4)*12+(X5319=5)*4+(X5319=6)+(X5319=8)+ (X5319=11)*2+(X5319=12)*6+(X5319=31)*24+(X5319=14)+(X5319=22)) MPRINT(TAXSCF): *(X5315=2)*(X5317>=1))) +MAX(0,(X5326 MPRINT(ACONV): *((X5327=2)*52.18+(X5327=3)*26.09+(X5327=4)*12+(X5327=5)*4+(X5327=6)+(X5327=8)+ (X5327=11)*2+(X5327=12)*6+(X5327=31)*24+(X5327=14)+(X5327=22)) MPRINT(TAXSCF): *(X5323=2)*(X5325>=1))) +MAX(0,(X5334 MPRINT(ACONV): *((X5335=2)*52.18+(X5335=3)*26.09+(X5335=4)*12+(X5335=5)*4+(X5335=6)+(X5335=8)+ (X5335=11)*2+(X5335=12)*6+(X5335=31)*24+(X5335=14)+(X5335=22)) MPRINT(TAXSCF): *(X5331=2)*(X5333>=1))) +MAX(0,(X5418 MPRINT(ACONV): *((X5419=2)*52.18+(X5419=3)*26.09+(X5419=4)*12+(X5419=5)*4+(X5419=6)+(X5419=8)+ (X5419=11)*2+(X5419=12)*6+(X5419=31)*24+(X5419=14)+(X5419=22)) MPRINT(TAXSCF): *(X5415=2)*(X5417>=1))) +MAX(0,(X5426 MPRINT(ACONV): *((X5427=2)*52.18+(X5427=3)*26.09+(X5427=4)*12+(X5427=5)*4+(X5427=6)+(X5427=8)+ (X5427=11)*2+(X5427=12)*6+(X5427=31)*24+(X5427=14)+(X5427=22)) MPRINT(TAXSCF): *(X5423=2)*(X5425>=1))) +MAX(0,(X5434 MPRINT(ACONV): *((X5435=2)*52.18+(X5435=3)*26.09+(X5435=4)*12+(X5435=5)*4+(X5435=6)+(X5435=8)+ (X5435=11)*2+(X5435=12)*6+(X5435=31)*24+(X5435=14)+(X5435=22)) MPRINT(TAXSCF): *(X5431=2)*(X5433>=1))); MPRINT(TAXSCF): SP_WITHDRAW=X6566+(X6574*.5)+MAX(0,(X6464 MPRINT(ACONV): *((X6465=2)*52.18+(X6465=3)*26.09+(X6465=4)*12+(X6465=5)*4+(X6465=6)+(X6465=8)+ (X6465=11)*2+(X6465=12)*6+(X6465=31)*24+(X6465=14)+(X6465=22)) 258 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): *(X5315=2))) +MAX(0,(X6469 MPRINT(ACONV): *((X6470=2)*52.18+(X6470=3)*26.09+(X6470=4)*12+(X6470=5)*4+(X6470=6)+(X6470=8)+ (X6470=11)*2+(X6470=12)*6+(X6470=31)*24+(X6470=14)+(X6470=22)) MPRINT(TAXSCF): *(X5323=2)))+MAX(0,(X6474 MPRINT(ACONV): *((X6475=2)*52.18+(X6475=3)*26.09+(X6475=4)*12+(X6475=5)*4+(X6475=6)+(X6475=8)+ (X6475=11)*2+(X6475=12)*6+(X6475=31)*24+(X6475=14)+(X6475=22)) MPRINT(TAXSCF): *(X5331=2))) +MAX(0,(X6479 MPRINT(ACONV): *((X6480=2)*52.18+(X6480=3)*26.09+(X6480=4)*12+(X6480=5)*4+(X6480=6)+(X6480=8)+ (X6480=11)*2+(X6480=12)*6+(X6480=31)*24+(X6480=14)+(X6480=22)) MPRINT(TAXSCF): *(X5415=2)))+MAX(0,(X6484 MPRINT(ACONV): *((X6485=2)*52.18+(X6485=3)*26.09+(X6485=4)*12+(X6485=5)*4+(X6485=6)+(X6485=8)+ (X6485=11)*2+(X6485=12)*6+(X6485=31)*24+(X6485=14)+(X6485=22)) MPRINT(TAXSCF): *(X5423=2))) +MAX(0,(X6489 MPRINT(ACONV): *((X6490=2)*52.18+(X6490=3)*26.09+(X6490=4)*12+(X6490=5)*4+(X6490=6)+(X6490=8)+ (X6490=11)*2+(X6490=12)*6+(X6490=31)*24+(X6490=14)+(X6490=22)) MPRINT(TAXSCF): *(X5431=2)))+MAX(0,(X6965 MPRINT(ACONV): *((X6966=2)*52.18+(X6966=3)*26.09+(X6966=4)*12+(X6966=5)*4+(X6966=6)+(X6966=8)+ (X6966=11)*2+(X6966=12)*6+(X6966=31)*24+(X6966=14)+(X6966=22)) MPRINT(TAXSCF): *(X5606=2))) +MAX(0,(X6971 MPRINT(ACONV): *((X6972=2)*52.18+(X6972=3)*26.09+(X6972=4)*12+(X6972=5)*4+(X6972=6)+(X6972=8)+ (X6972=11)*2+(X6972=12)*6+(X6972=31)*24+(X6972=14)+(X6972=22)) MPRINT(TAXSCF): *(X5614=2)))+MAX(0,(X6977 MPRINT(ACONV): *((X6978=2)*52.18+(X6978=3)*26.09+(X6978=4)*12+(X6978=5)*4+(X6978=6)+(X6978=8)+ (X6978=11)*2+(X6978=12)*6+(X6978=31)*24+(X6978=14)+(X6978=22)) MPRINT(TAXSCF): *(X5622=2))) +MAX(0,(X6983 MPRINT(ACONV): *((X6984=2)*52.18+(X6984=3)*26.09+(X6984=4)*12+(X6984=5)*4+(X6984=6)+(X6984=8)+ (X6984=11)*2+(X6984=12)*6+(X6984=31)*24+(X6984=14)+(X6984=22)) MPRINT(TAXSCF): *(X5630=2)))+MAX(0,(X6989 MPRINT(ACONV): *((X6990=2)*52.18+(X6990=3)*26.09+(X6990=4)*12+(X6990=5)*4+(X6990=6)+(X6990=8)+ (X6990=11)*2+(X6990=12)*6+(X6990=31)*24+(X6990=14)+(X6990=22)) MPRINT(TAXSCF): *(X5638=2))) +MAX(0,(X6995 MPRINT(ACONV): *((X6996=2)*52.18+(X6996=3)*26.09+(X6996=4)*12+(X6996=5)*4+(X6996=6)+(X6996=8)+ (X6996=11)*2+(X6996=12)*6+(X6996=31)*24+(X6996=14)+(X6996=22)) MPRINT(TAXSCF): *(X5646=2)))+(X5724)*(X5725=11)*.5; MPRINT(TAXSCF): * For new tax units need to split up income and determine which new tax unit is assigned which deductions and exemptions. Also need to zero out any variables not relevant to the new tax unit (ex. spouses wages); MPRINT(TAXSCF): IF TAXUNIT IN(1 2) THEN DO; MPRINT(TAXSCF): * age; MPRINT(TAXSCF): IF (TAXUNIT=1) THEN SPAGE=0; MPRINT(TAXSCF): * wages; MPRINT(TAXSCF): IF (TAXUNIT=1 & (R_LABORINC+SP_LABORINC>0)) THEN WSINCOME=MAX(0,X5702)*(R_LABORINC/(R_LABORINC+SP_LABORINC))*(R_LABORINC>0); MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & (R_LABORINC+SP_LABORINC>0)) THEN WSINCOME=MAX(0,X5702)*(SP_LABORINC/(R_LABORINC+SP_LABORINC))*(SP_LABORINC>0); MPRINT(TAXSCF): ELSE WSINCOME=MAX(0,X5702)*.5; MPRINT(TAXSCF): WSINCSP=0; MPRINT(TAXSCF): * business income; MPRINT(TAXSCF): R_SOLEPROP=(X4106 IN(2 3 4) | (X3113=1 & X3119=2) | (X3213=1 & X3219=2) | (X3313=1 & X3319=2)); MPRINT(TAXSCF): SP_SOLEPROP=(X4706 IN(2 3 4) | (X3114=1 & X3119=2) | (X3214=1 & X3219=2) | (X3313=1 & X3319=2)); MPRINT(TAXSCF): IF (TAXUNIT=1 & (R_BUSINC+SP_BUSINC>0) & (R_SOLEPROP=1 | SP_SOLEPROP=1)) THEN DO; MPRINT(TAXSCF): IF (R_SOLEPROP=1 & SP_SOLEPROP=1) THEN TBUSINC=X5704*(R_BUSINC/(R_BUSINC+SP_BUSINC))*(R_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=1 & SP_SOLEPROP=0) THEN TBUSINC=X5704; MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=0 & SP_SOLEPROP=1) THEN TBUSINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & (R_BUSINC+SP_BUSINC>0) & (R_SOLEPROP=1 | SP_SOLEPROP=1)) THEN DO; MPRINT(TAXSCF): IF (R_SOLEPROP=1 & SP_SOLEPROP=1) THEN TBUSINC=X5704*(SP_BUSINC/(R_BUSINC+SP_BUSINC))*(SP_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=0 & SP_SOLEPROP=1) THEN TBUSINC=X5704; MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=1 & SP_SOLEPROP=0) THEN TBUSINC=0; 259 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE TBUSINC=X5704*.5; MPRINT(TAXSCF): * interest, dividends, and capital gains - just split 50-50; MPRINT(TAXSCF): NTAXINC= MAX(0,X5706)*.5; MPRINT(TAXSCF): INTINC= MAX(0,X5708)*.5; MPRINT(TAXSCF): DIVINC= MAX(0,X5710)*.5; MPRINT(TAXSCF): IF X5712=-1 THEN CAPGLINC=0; MPRINT(TAXSCF): ELSE CAPGLINC=X5712*.5; MPRINT(TAXSCF): * rent, royalties, partnership and scorp income; MPRINT(TAXSCF): R_PARTNER_SCORP=(X4106 IN(2 3 4) | (X3113=1 & X3119 IN(1 3 6 11 12 15)) | (X3213=1 & X3219 IN(1 3 6 11 12 15))); MPRINT(TAXSCF): SP_PARTNER_SCORP=(X4106 IN(2 3 4) | (X3114=1 & X3119 IN(1 3 6 11 12 15)) | (X3214=1 & X3219 IN(1 3 6 11 12 15))); MPRINT(TAXSCF): IF (TAXUNIT=1 & (R_BUSINC+SP_BUSINC>0) & (R_PARTNER_SCORP=1 | SP_PARTNER_SCORP=1)) THEN DO; MPRINT(TAXSCF): IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=1) THEN RENTINC=X5714*(R_BUSINC/(R_BUSINC+SP_BUSINC))*(R_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=0) THEN RENTINC=X5714; MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=0 & SP_PARTNER_SCORP=1) THEN RENTINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & (R_BUSINC+SP_BUSINC>0) & (R_PARTNER_SCORP=1 | SP_PARTNER_SCORP=1)) THEN DO; MPRINT(TAXSCF): IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=1) THEN RENTINC=X5714*(SP_BUSINC/(R_BUSINC+SP_BUSINC))*(SP_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=0 & SP_PARTNER_SCORP=1) THEN RENTINC=X5714; MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=0) THEN RENTINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE RENTINC=X5714*.5; MPRINT(TAXSCF): * unemployment income, no questions about unemployed in past 12 months prior to 1998; MPRINT(TAXSCF): IF (TAXUNIT=1) THEN DO; MPRINT(TAXSCF): IF (X6780=1) THEN UNEMPINC=MAX(0,X5716)*(X6784 IN(0 5))+MAX(0,X5716)*(X6784=1)*.5; MPRINT(TAXSCF): ELSE IF (X6780=5 & X6784=1) THEN UNEMPINC=0; MPRINT(TAXSCF): ELSE UNEMPINC=MAX(0,X5716)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2) THEN DO; MPRINT(TAXSCF): IF (X6784=1) THEN UNEMPINC=MAX(0,X5716)*(X6780 IN(0 5))+MAX(0,X5716)*(X6780=1)*.5; MPRINT(TAXSCF): ELSE IF (X6784=5 & X6780=1) THEN UNEMPINC=0; MPRINT(TAXSCF): ELSE UNEMPINC=MAX(0,X5716)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * child support and alimony income; MPRINT(TAXSCF): IF (TAXUNIT=1 & X7377=2) THEN DO; MPRINT(TAXSCF): CHSPALINC=MAX(0,X5718)*(X7392^=2)+MAX(0,X5718)*(X7392=2)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & X7392=2) THEN DO; MPRINT(TAXSCF): CHSPALINC=MAX(0,X5718)*(X7377^=2)+MAX(0,X5718)*(X7377=2)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE CHSPALINC=MAX(0,X5718)*.5; MPRINT(TAXSCF): * government transfers, split 50/50; MPRINT(TAXSCF): AFDCINC=MAX(0,X5720)*.5; MPRINT(TAXSCF): * other income, split 50/50 - remove other income that is non-taxable, such as scholarships/grants, inheritances/gifts/, support from family or others, also remove IRA/Keogh income; MPRINT(TAXSCF): * special fix for 1992, removing other income coded 14, repayment of debts, it appears the total amount of the debt was reported, not just the interest on the debt; MPRINT(TAXSCF): OTHINC= (X5724)*(X5725 NOT IN(3 11 12 13 28))*.5+(X5726)*(X5727 NOT IN(3 11 12 13 28))*.5; MPRINT(TAXSCF): * social security and pension income, adding in withdrawals from IRA/Keogh/401ks; MPRINT(TAXSCF): R_GSSINC=MAX(0,(X5306 MPRINT(ACONV): *((X5307=2)*52.18+(X5307=3)*26.09+(X5307=4)*12+(X5307=5)*4+(X5307=6)+(X5307=8)+ (X5307=11)*2+(X5307=12)*6+(X5307=31)*24+(X5307=14)+(X5307=22)) MPRINT(TAXSCF): *(X5305>=1))); MPRINT(TAXSCF): SP_GSSINC=MAX(0,(X5311 260 The SAS System 13:32 Friday, January 29, 2021 MPRINT(ACONV): *((X5312=2)*52.18+(X5312=3)*26.09+(X5312=4)*12+(X5312=5)*4+(X5312=6)+(X5312=8)+ (X5312=11)*2+(X5312=12)*6+(X5312=31)*24+(X5312=14)+(X5312=22)) MPRINT(TAXSCF): *(X5310>=1))); MPRINT(TAXSCF): T_GSSINC=MAX(0,((X5306 MPRINT(ACONV): *((X5307=2)*52.18+(X5307=3)*26.09+(X5307=4)*12+(X5307=5)*4+(X5307=6)+(X5307=8)+ (X5307=11)*2+(X5307=12)*6+(X5307=31)*24+(X5307=14)+(X5307=22)) MPRINT(TAXSCF): *(X5305>=1))+(X5311 MPRINT(ACONV): *((X5312=2)*52.18+(X5312=3)*26.09+(X5312=4)*12+(X5312=5)*4+(X5312=6)+(X5312=8)+ (X5312=11)*2+(X5312=12)*6+(X5312=31)*24+(X5312=14)+(X5312=22)) MPRINT(TAXSCF): *(X5310>=1)))); MPRINT(TAXSCF): NOSS_X5722=MAX(0,(X5722-T_GSSINC)); MPRINT(TAXSCF): IF (TAXUNIT=1) THEN DO; MPRINT(TAXSCF): IF (R_REGPEN > 0) THEN PENINC=NOSS_X5722*(R_REGPEN/(R_REGPEN+SP_REGPEN))+R_WITHDRAW; MPRINT(TAXSCF): ELSE IF (R_REGPEN=0 & R_WITHDRAW > 0) THEN PENINC=R_WITHDRAW; MPRINT(TAXSCF): ELSE IF (R_REGPEN=0 & R_WITHDRAW=0 & SP_REGPEN > 0) THEN PENINC=0; MPRINT(TAXSCF): ELSE IF (R_REGPEN=0 & R_WITHDRAW=0 & SP_REGPEN=0) THEN PENINC=NOSS_X5722*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2) THEN DO; MPRINT(TAXSCF): IF (SP_REGPEN > 0) THEN PENINC=NOSS_X5722*(SP_REGPEN/(R_REGPEN+SP_REGPEN))+SP_WITHDRAW; MPRINT(TAXSCF): ELSE IF (SP_REGPEN=0 & SP_WITHDRAW > 0) THEN PENINC=SP_WITHDRAW; MPRINT(TAXSCF): ELSE IF (SP_REGPEN=0 & SP_WITHDRAW=0 & R_REGPEN > 0) THEN PENINC=0; MPRINT(TAXSCF): ELSE IF (SP_REGPEN=0 & SP_WITHDRAW=0 & R_REGPEN=0) THEN PENINC=NOSS_X5722*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): GSSINC=MAX(0,R_GSSINC)*(TAXUNIT=1)+MAX(0,SP_GSSINC)*(TAXUNIT=2); MPRINT(TAXSCF): OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; MPRINT(TAXSCF): NONTAX=NTAXINC+AFDCINC; MPRINT(TAXSCF): RENT=MAX(0,(X602 MPRINT(ACONV): *((X603=2)*52.18+(X603=3)*26.09+(X603=4)*12+(X603=5)*4+(X603=6)+(X603=8)+ (X603=11)*2+(X603=12)*6+(X603=31)*24+(X603=14)+(X603=22)) MPRINT(TAXSCF): ),(X612 MPRINT(ACONV): *((X613=2)*52.18+(X613=3)*26.09+(X613=4)*12+(X613=5)*4+(X613=6)+(X613=8)+ (X613=11)*2+(X613=12)*6+(X613=31)*24+(X613=14)+(X613=22)) MPRINT(TAXSCF): ),(X619 MPRINT(ACONV): *((X620=2)*52.18+(X620=3)*26.09+(X620=4)*12+(X620=5)*4+(X620=6)+(X620=8)+ (X620=11)*2+(X620=12)*6+(X620=31)*24+(X620=14)+(X620=22)) MPRINT(TAXSCF): ), (X708 MPRINT(ACONV): *((X709=2)*52.18+(X709=3)*26.09+(X709=4)*12+(X709=5)*4+(X709=6)+(X709=8)+ (X709=11)*2+(X709=12)*6+(X709=31)*24+(X709=14)+(X709=22)) MPRINT(TAXSCF): ))*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TAXUNIT=0 THEN DO; MPRINT(TAXSCF): R_SOLEPROP=(X4106 IN(2 3 4) | (X3113=1 & X3119=2) | (X3213=1 & X3219=2) | (X3313=1 & X3319=2)); MPRINT(TAXSCF): SP_SOLEPROP=(X4706 IN(2 3 4) | (X3114=1 & X3119=2) | (X3214=1 & X3219=2) | (X3313=1 & X3319=2)); MPRINT(TAXSCF): * Split wages across primary and secondary earner for married filing jointly households; MPRINT(TAXSCF): IF FILESTAT^=2 THEN DO; MPRINT(TAXSCF): WSINCOME=MAX(0,X5702); MPRINT(TAXSCF): WSINCSP=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF FILESTAT=2 THEN DO; MPRINT(TAXSCF): IF ((R_LABORINC > 0 & SP_LABORINC=0) | (R_LABORINC=0 & SP_LABORINC > 0) | (R_LABORINC=0 & SP_LABORINC=0)) THEN DO; MPRINT(TAXSCF): WSINCOME=MAX(0,X5702); MPRINT(TAXSCF): WSINCSP=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (R_LABORINC > 0 & SP_LABORINC > 0) THEN DO; MPRINT(TAXSCF): WSINCOME=MAX(0,X5702)*(R_LABORINC/(R_LABORINC+SP_LABORINC)); MPRINT(TAXSCF): WSINCSP=MAX(0,X5702)*(SP_LABORINC/(R_LABORINC+SP_LABORINC)); MPRINT(TAXSCF): END; 261 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): TBUSINC = X5704; MPRINT(TAXSCF): NTAXINC= MAX(0,X5706); MPRINT(TAXSCF): INTINC= MAX(0,X5708); MPRINT(TAXSCF): DIVINC= MAX(0,X5710); MPRINT(TAXSCF): IF X5712=-1 THEN CAPGLINC=0; MPRINT(TAXSCF): ELSE CAPGLINC=X5712; MPRINT(TAXSCF): RENTINC= X5714; MPRINT(TAXSCF): UNEMPINC = MAX(0,X5716); MPRINT(TAXSCF): CHSPALINC=MAX(0,X5718); MPRINT(TAXSCF): AFDCINC = MAX(0,X5720); MPRINT(TAXSCF): * Starting in 2004, IRA/Keogh/401K type income is not reported in other income, instead withdrawals are reported separately during the questions about the assets, so need to add the withdrawals to pension income. There may be a few withdrawals still reported as other income if the asset account was closed or emptied out during the year prior to the survey.; MPRINT(TAXSCF): * also remove other income that is non-taxable, such as scholarships/grants, inheritances/gifts/, support from family or others; MPRINT(TAXSCF): * special fix for 1992, removing other income coded 14, repayment of debts, it appears the total amount of the debt was report, not just the interest on the debt; MPRINT(TAXSCF): OTHINC= (X5724)*(X5725 NOT IN(3 11 12 13 28))+(X5726)*(X5727 NOT IN(3 11 12 13 28)); MPRINT(TAXSCF): GSSINC=MAX(0,((X5306 MPRINT(ACONV): *((X5307=2)*52.18+(X5307=3)*26.09+(X5307=4)*12+(X5307=5)*4+(X5307=6)+(X5307=8)+ (X5307=11)*2+(X5307=12)*6+(X5307=31)*24+(X5307=14)+(X5307=22)) MPRINT(TAXSCF): *(X5305>=1))+(X5311 MPRINT(ACONV): *((X5312=2)*52.18+(X5312=3)*26.09+(X5312=4)*12+(X5312=5)*4+(X5312=6)+(X5312=8)+ (X5312=11)*2+(X5312=12)*6+(X5312=31)*24+(X5312=14)+(X5312=22)) MPRINT(TAXSCF): *(X5310>=1)))); MPRINT(TAXSCF): IF GSSINC=0 THEN PENINC= MAX(0,X5722)+R_WITHDRAW+SP_WITHDRAW; MPRINT(TAXSCF): ELSE IF (GSSINC > 0) THEN PENINC=MAX(0,(X5722-GSSINC)) +R_WITHDRAW+SP_WITHDRAW; MPRINT(TAXSCF): OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; MPRINT(TAXSCF): NONTAX=NTAXINC+AFDCINC; MPRINT(TAXSCF): RENT=MAX(0,(X602 MPRINT(ACONV): *((X603=2)*52.18+(X603=3)*26.09+(X603=4)*12+(X603=5)*4+(X603=6)+(X603=8)+ (X603=11)*2+(X603=12)*6+(X603=31)*24+(X603=14)+(X603=22)) MPRINT(TAXSCF): ),(X612 MPRINT(ACONV): *((X613=2)*52.18+(X613=3)*26.09+(X613=4)*12+(X613=5)*4+(X613=6)+(X613=8)+ (X613=11)*2+(X613=12)*6+(X613=31)*24+(X613=14)+(X613=22)) MPRINT(TAXSCF): ),(X619 MPRINT(ACONV): *((X620=2)*52.18+(X620=3)*26.09+(X620=4)*12+(X620=5)*4+(X620=6)+(X620=8)+ (X620=11)*2+(X620=12)*6+(X620=31)*24+(X620=14)+(X620=22)) MPRINT(TAXSCF): ), (X708 MPRINT(ACONV): *((X709=2)*52.18+(X709=3)*26.09+(X709=4)*12+(X709=5)*4+(X709=6)+(X709=8)+ (X709=11)*2+(X709=12)*6+(X709=31)*24+(X709=14)+(X709=22)) MPRINT(TAXSCF): )); MPRINT(TAXSCF): END; MPRINT(TAXSCF): * AGI - note that starting in 2010, AGI questions no longer asked, so using total income minus non-taxable income plus IRA/401k withdrawals as a proxy. No information on adjustments to AGI; MPRINT(TAXSCF): AGI=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC+UNEMPINC+CHSPALINC+OTHINC+PENINC+GSSINC; MPRINT(TAXSCF): IF AGI=-1 THEN AGI=0; MPRINT(TAXSCF): AGIGE50K=(AGI>=50000); MPRINT(TAXSCF): AGICL=1*(AGI < 50000)+2*(50000 <= AGI < 100000)+3*(AGI >= 100000); MPRINT(TAXSCF): * For allocating itemized deductions - mortgage interest, investment interest expense, property taxes, and charitable contributions - between new tax units, assume tax unit with higher income assigned all itemized deductions. Creating a flag here for use in computing deductions later in the program. Using wages, business, and pension income as income measure (all other income components are split 50/50 between the new tax units).; MPRINT(TAXSCF): IF (TAXUNIT IN(1 2)) THEN DO; MPRINT(TAXSCF): R_TINCOME=R_LABORINC+R_BUSINC+R_REGPEN+R_WITHDRAW; MPRINT(TAXSCF): SP_TINCOME=SP_LABORINC+SP_BUSINC+SP_REGPEN+SP_WITHDRAW; 262 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ITEMDEDCT_FLAG=(TAXUNIT=1 & R_TINCOME >= SP_TINCOME) +(TAXUNIT=2 & SP_TINCOME > R_TINCOME); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TAXUNIT=0 THEN ITEMDEDCT_FLAG=1; MPRINT(TAXSCF): * Set personal exemption to one for split households, divide kids among split households, if one, give to both tax units, if even number, split evenly between tax units, if odd number, give more to higher income tax unit; MPRINT(TAXSCF): IF TAXUNIT IN(1 2) THEN DO; MPRINT(TAXSCF): PERSEXP=1; MPRINT(TAXSCF): IF KIDS>1 THEN DO; MPRINT(TAXSCF): IF (KIDSU13>0 & MOD(KIDSU13,2)=0) THEN KIDSU13=KIDSU13/2; MPRINT(TAXSCF): ELSE IF (KIDSU13>0 & MOD(KIDSU13,2)^=0) THEN DO; MPRINT(TAXSCF): KIDSU13=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU13/2,1))+ (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU13/2)-.5); MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (KIDSU17>0 & MOD(KIDSU17,2)=0) THEN KIDSU17=KIDSU17/2; MPRINT(TAXSCF): ELSE IF (KIDSU17>0 & MOD(KIDSU17,2)^=0) THEN DO; MPRINT(TAXSCF): KIDSU17=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU17/2,1))+ (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU17/2)-.5); MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (KIDSU18>0 & MOD(KIDSU18,2)=0) THEN KIDSU18=KIDSU18/2; MPRINT(TAXSCF): ELSE IF (KIDSU18>0 & MOD(KIDSU18,2)^=0) THEN DO; MPRINT(TAXSCF): KIDSU18=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU18/2,1))+ (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU18/2)-.5); MPRINT(TAXSCF): END; MPRINT(TAXSCF): KIDS=KIDSU13+KIDSU17+KIDSU18; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF PERSEXP=1 & MARRIED=1 THEN FILESTAT=3; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS=0 & MARRIED=0 THEN FILESTAT=1; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS>0 & MARRIED=0 THEN FILESTAT=4; MPRINT(TAXSCF): TOTEXPT=PERSEXP+KIDS; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF FILESTAT=0 THEN PUT "MISSING FILING STATUS " Y1= X5744= X5746= TAXUNIT= MARRIED= KIDS= PERSEXP=; MPRINT(TAXSCF): RUN; NOTE: There were 23930 observations read from the data set WORK.SCF. NOTE: The data set WORK.SCF has 23930 observations and 5891 variables. NOTE: DATA statement used (Total process time): real time 2.24 seconds cpu time 0.76 seconds MPRINT(TAXSCF): * Create tax units based on NPEU members. If there are multiple NPEU members, need to allocate income, assets, and debt across the members; MPRINT(TAXSCF): DATA TEMP NPEU; MPRINT(TAXSCF): SET SCF(WHERE=(TAXUNIT IN(0 1) & X7050 >=1)); MPRINT(TAXSCF): file "null.txt"; MPRINT(TAXSCF): TAXUNIT=2; MPRINT(TAXSCF): ARRAY NPEUAGE {*} X110 X116 X122 X128 X134 X204 X210 X216 X222 X228; MPRINT(TAXSCF): ARRAY LIVEWITH {*} X112 X118 X124 X130 X136 X206 X212 X218 X224 X230; MPRINT(TAXSCF): ARRAY FINDEP {*} X113 X119 X125 X131 X137 X207 X213 X219 X225 X231; MPRINT(TAXSCF): DO I=1 TO DIM(LIVEWITH); MPRINT(TAXSCF): IF LIVEWITH{I} IN(1 2 3 4) & FINDEP{I} IN(2 3 4 5) THEN DO; MPRINT(TAXSCF): TAXUNIT=TAXUNIT+1; MPRINT(TAXSCF): TUAGE=NPEUAGE{I}; MPRINT(TAXSCF): SPAGE=0; 263 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): OUTPUT NPEU; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): RUN; NOTE: The file "null.txt" is: Filename=/disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code/null.txt, Owner Name=taxsim,Group Name=taxsim, Access Permission=-rw-r--r--, Last Modified=29Jan2021:13:34:27 NOTE: 0 records were written to the file "null.txt". NOTE: There were 2035 observations read from the data set WORK.SCF. WHERE TAXUNIT in (0, 1) and (X7050>=1); NOTE: The data set WORK.TEMP has 0 observations and 5891 variables. NOTE: The data set WORK.NPEU has 2550 observations and 5891 variables. NOTE: DATA statement used (Total process time): real time 0.25 seconds cpu time 0.16 seconds MPRINT(TAXSCF): DATA NPEU; MPRINT(TAXSCF): SET NPEU; MPRINT(TAXSCF): ARRAY INCTYPES {*} WSINCOME WSINCSP TBUSINC INTINC NTAXINC DIVINC RENTINC UNEMPINC AFDCINC GSSINC PENINC OTHINC CAPGLINC; MPRINT(TAXSCF): DO I=1 TO DIM(INCTYPES); MPRINT(TAXSCF): INCTYPES{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Allocate NPEU wage income across all NPEU members less than 70 years old. If only other type of income is Social Security, allocate amount across NPEU members age 62 or more. Otherwise, allocate total amount of nonwage income divided by the number of other types of income to each type of income equally to each NPEU member; MPRINT(TAXSCF): NUMU70=(0=62 & X113=5)+(X116>=62 & X119=5)+(X122>=62 & X125=5) +(X128>=62 & X131=5)+(X134>=62 & X137=5)+(X204>=62 & X207=5) +(X210>=62 & X213=5)+(X216>=62 & X219=5)+(X222>=62 & X225=5) +(X228>=62 & X231=5); MPRINT(TAXSCF): NUMINCTYPES=(X6406=1)+(X6407=1)+(X6408=1)+(X6409=1)+(X6410=1)+(X6411=1) +(X6412=1)+(X6413=1)+(X6414 > 5); MPRINT(TAXSCF): IF (NUMU70 > 0) THEN WSINCOME=(MAX(0,X6403)/NUMU70)*(TUAGE < 70); MPRINT(TAXSCF): ELSE WSINCOME=(MAX(0,X6403)/X7050); MPRINT(TAXSCF): IF (X6415 > 0 & NUMINCTYPES > 0) THEN DO; MPRINT(TAXSCF): IF (NUMGE62 > 0) THEN GSSINC=(X6406=1)*((MAX(0,X6415)/(NUMINCTYPES))/NUMGE62)*(TUAGE>=62); MPRINT(TAXSCF): ELSE GSSINC=(X6406=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): TBUSINC=(X6412=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): INTINC=(X6410=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): DIVINC=(X6411=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): RENTINC=(X6413=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): PENINC=(X6407=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050) +(X6408=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): AFDCINC=(X6409=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): CAPGLINC=(X6414 IN(13))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): UNEMPINC=(X6414 IN(10))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): OTHINC=(X6414 IN(11 12 15))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): END; MPRINT(TAXSCF): OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; MPRINT(TAXSCF): NONTAX=NTAXINC+AFDCINC; MPRINT(TAXSCF): * All NPEU tax units take the standard deduction, have one personal exemption, and have filing status of single; MPRINT(TAXSCF): ITEMDEDCT_FLAG=0; 264 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): PERSEXP=1; MPRINT(TAXSCF): TOTEXPT=1; MPRINT(TAXSCF): KIDS=0; MPRINT(TAXSCF): KIDSU13=0; MPRINT(TAXSCF): KIDSU17=0; MPRINT(TAXSCF): KIDSU18=0; MPRINT(TAXSCF): FILESTAT=1; MPRINT(TAXSCF): AGI=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC+UNEMPINC+CHSPALINC+OTHINC+PENINC+GSSINC; MPRINT(TAXSCF): IF AGI=-1 THEN AGI=0; MPRINT(TAXSCF): AGIGE50K=(AGI>=50000); MPRINT(TAXSCF): AGICL=1*(AGI < 50000)+2*(50000 <= AGI < 100000)+3*(AGI >= 100000); MPRINT(TAXSCF): RUN; NOTE: There were 2550 observations read from the data set WORK.NPEU. NOTE: The data set WORK.NPEU has 2550 observations and 5894 variables. NOTE: DATA statement used (Total process time): real time 0.27 seconds cpu time 0.11 seconds MPRINT(TAXSCF): * Add NPEU tax units; MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF NPEU; MPRINT(TAXSCF): RUN; NOTE: There were 23930 observations read from the data set WORK.SCF. NOTE: There were 2550 observations read from the data set WORK.NPEU. NOTE: The data set WORK.SCF has 26480 observations and 5894 variables. NOTE: DATA statement used (Total process time): real time 0.90 seconds cpu time 0.69 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): ************Itemized deductions; MPRINT(TAXSCF): IF ITEMDEDCT_FLAG=1 THEN DO; MPRINT(TAXSCF): ************Mortgage interest deduction; MPRINT(TAXSCF): * Convert real estate taxes on primary residence into a yearly amount; MPRINT(TAXSCF): RESTAXM1=0; MPRINT(TAXSCF): IF (X721 > 0) THEN DO; MPRINT(TAXSCF): RESTAXM1=X721 MPRINT(ACONV): *((X722=2)*52.18+(X722=3)*26.09+(X722=4)*12+(X722=5)*4+(X722=6)+(X722=8)+ (X722=11)*2+(X722=12)*6+(X722=31)*24+(X722=14)+(X722=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Create arrays for various mortgage loan components; MPRINT(TAXSCF): ARRAY TLMTH {*} TLMTHM1 TLMTHM2 TLMTHM3; MPRINT(TAXSCF): ARRAY CMOPAY {*} CMOPAYM1 CMOPAYM2 CMOPAYM3; MPRINT(TAXSCF): ARRAY PAYLFT {*} PAYLFTM1 PAYLFTM2 PAYLFTM3; MPRINT(TAXSCF): ARRAY AMTOWE {*} AMTOWEM1 AMTOWEM2 AMTOWEM3; MPRINT(TAXSCF): ARRAY AMTOWE_1 {*} AMTOWE_1M1 AMTOWE_1M2 AMTOWE_1M3; MPRINT(TAXSCF): ARRAY AINTDCT {*} AINTDCTM1 AINTDCTM2 AINTDCTM3; MPRINT(TAXSCF): ARRAY LNAGE {*} LNAGEM1 LNAGEM2 LNAGEM3; MPRINT(TAXSCF): ARRAY CURBAL {*} CURBALM1 CURBALM2 CURBALM3; MPRINT(TAXSCF): ARRAY CURBAL_1 {*} CURBAL_1M1 CURBAL_1M2 CURBAL_1M3; MPRINT(TAXSCF): ARRAY CINTDCT {*} CINTDCTM1 CINTDCTM2 CINTDCTM3; MPRINT(TAXSCF): ARRAY DCTDIFF {*} DCTDIFFM1 DCTDIFFM2 DCTDIFFM3; 265 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ARRAY SINTDCT {*} SINTDCTM1 SINTDCTM2 SINTDCTM3; MPRINT(TAXSCF): ARRAY AVINTDCT {*} AVINTDCTM1 AVINTDCTM2 AVINTDCTM3; MPRINT(TAXSCF): ARRAY NMPMT {*} X807 X907 X1007; MPRINT(TAXSCF): ARRAY NMYR {*} X806 X906 X1006; MPRINT(TAXSCF): ARRAY REGPAYF {*} X809 X909 X1009; MPRINT(TAXSCF): ARRAY REGPAY {*} X808 X908 X1008; MPRINT(TAXSCF): ARRAY TYPAYF {*} X814 X914 X1014; MPRINT(TAXSCF): ARRAY TYPAY {*} X813 X913 X1013; MPRINT(TAXSCF): ARRAY LNSTMN {*} X801 X901 X1001; MPRINT(TAXSCF): ARRAY LNSTYR {*} X802 X902 X1002; MPRINT(TAXSCF): ARRAY HBALLN {*} X811 X911 X1011; MPRINT(TAXSCF): ARRAY BALLN {*} X812 X912 X1012; MPRINT(TAXSCF): ARRAY HAVELN {*} X723 X830 X931; MPRINT(TAXSCF): ARRAY AMTBORR {*} X804 X904 X1004; MPRINT(TAXSCF): ARRAY JAMTBORR {*} J804 J904 J1004; MPRINT(TAXSCF): ARRAY AMTOUT {*} X805 X905 X1005; MPRINT(TAXSCF): ARRAY JAMTOUT {*} J805 J905 J1005; MPRINT(TAXSCF): ARRAY INTRATE {*} X816 X916 X1016; MPRINT(TAXSCF): ARRAY ONSCHED {*} X7571 X7570 X7569; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTH); MPRINT(TAXSCF): TLMTH{I}=0; MPRINT(TAXSCF): CMOPAY{I}=0; MPRINT(TAXSCF): PAYLFT{I}=0; MPRINT(TAXSCF): AMTOWE{I}=0; MPRINT(TAXSCF): AMTOWE_1{I}=0; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): LNAGE{I}=0; MPRINT(TAXSCF): CURBAL{I}=0; MPRINT(TAXSCF): CURBAL_1{I}=0; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): DCTDIFF{I}=0; MPRINT(TAXSCF): SINTDCT{I}=0; MPRINT(TAXSCF): AVINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): NUMORT=(X723=1)+(X830=1)+(X931=1); MPRINT(TAXSCF): TOTAMTOUTM=0; MPRINT(TAXSCF): TOTDEDCTM=0; MPRINT(TAXSCF): GRFAMTOUTM=0; MPRINT(TAXSCF): A17AMTOUTM=0; MPRINT(TAXSCF): HAAMTOUTM=0; MPRINT(TAXSCF): DO I=1 TO DIM(NMPMT); MPRINT(TERMCON): IF (NMYR{I}=0 & NMPMT{I}=0) THEN DO; MPRINT(TERMCON): TLMTH{I}=0; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYR{I}^=0|NMPMT{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYR{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYR{I}=-1) THEN DO; MPRINT(TERMCON): TLMTH{I}=NMYR{I}; MPRINT(TERMCON): IF (NMPMT{I}=0) THEN DO; MPRINT(TERMCON): NMPMT{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYR{I}>0) THEN DO; MPRINT(TERMCON): TLMTH{I}=NMYR{I}*12; MPRINT(TERMCON): IF (NMPMT{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYF{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMT{I}=-7; 266 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYF{I}=-7) THEN DO; MPRINT(TERMCON): NMPMT{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYF{I}=8) THEN DO; MPRINT(TERMCON): NMPMT{I}=1; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYF{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYF{I}=1) THEN NMPMT{I}=TLMTH{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=2) THEN NMPMT{I}=TLMTH{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=3) THEN NMPMT{I}=TLMTH{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=4) THEN NMPMT{I}=TLMTH{I}; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=5) THEN NMPMT{I}=TLMTH{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=6) THEN NMPMT{I}=TLMTH{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=20) THEN NMPMT{I}=TLMTH{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=21) THEN NMPMT{I}=TLMTH{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=11) THEN NMPMT{I}=TLMTH{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=12) THEN NMPMT{I}=TLMTH{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=23) THEN NMPMT{I}=TLMTH{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=24) THEN NMPMT{I}=TLMTH{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=25) THEN NMPMT{I}=TLMTH{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=31) THEN NMPMT{I}=TLMTH{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=18) THEN NMPMT{I}=TLMTH{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=0) THEN NMPMT{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYF{I}>.Z & REGPAYF{I}^=-1 & REGPAYF{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMT{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTH{I}= REGPAYF{I}= NMPMT{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTH{I}>.Z & TLMTH{I}<-2) THEN DO; MPRINT(MOCONV): NMPMT{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTH{I}= REGPAYF{I}= NMPMT{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTH{I}<=.Z) THEN NMPMT{I}=TLMTH{I}; MPRINT(MOCONV): ELSE IF (TLMTH{I}^=-1 & TLMTH{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYF{I}= TLMTH{I}= "SETTING AMT=."; MPRINT(MOCONV): NMPMT{I}=.; MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMT{I}=-1) THEN DO; MPRINT(TERMCON): TLMTH{I}=-1; MPRINT(TERMCON): IF (NMYR{I}=0) THEN DO; MPRINT(TERMCON): NMYR{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMT{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYF{I}; MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYF{I}>0) THEN PFREQ=TYPAYF{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTH{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; MPRINT(TERMCON): TLMTH{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; 267 The SAS System 13:32 Friday, January 29, 2021 MPRINT(IMOCONV): IF (NMPMT{I}>0) THEN DO; MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTH{I}=NMPMT{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}))); MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12))); MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTH{I}=NMPMT{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTH{I}=NMPMT{I}*2/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTH{I}=NMPMT{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTH{I}=NMPMT{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTH{I}=NMPMT{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTH{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): TLMTH{I}=NMPMT{I}; MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMT{I}= PFREQ= TLMTH{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMT{I}>.Z & NMPMT{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTH{I}=NMPMT{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMT{I}= PFREQ= TLMTH{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMT{I}=0) THEN TLMTH{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMT{I}<=.Z) THEN TLMTH{I}=NMPMT{I}; MPRINT(IMOCONV): ELSE IF (NMPMT{I}^=-1 & NMPMT{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMT{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTH{I}=.; MPRINT(IMOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTH{I}>0) THEN DO; MPRINT(TERMCON): NMYR{I}=MAX(1,INT(.5+(TLMTH{I}/12))); MPRINT(TERMCON): TLMTH{I}=MAX(1,ROUND(TLMTH{I})); MPRINT(TERMCON): END; MPRINT(TERMCON): IF (NMYR{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMT{I}= NMYR{I}= TLMTH{I}= REGPAYF{I}= REGPAY{I}= TYPAYF{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAY{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYF{I}=1) THEN CMOPAY{I}=REGPAY{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=2) THEN CMOPAY{I}=REGPAY{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=3) THEN CMOPAY{I}=REGPAY{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=4) THEN CMOPAY{I}=REGPAY{I}; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=5) THEN CMOPAY{I}=REGPAY{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=6) THEN CMOPAY{I}=REGPAY{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=20) THEN CMOPAY{I}=REGPAY{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=21) THEN CMOPAY{I}=REGPAY{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=8) THEN CMOPAY{I}=REGPAY{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=11) THEN CMOPAY{I}=REGPAY{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=12) THEN CMOPAY{I}=REGPAY{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=23) THEN CMOPAY{I}=REGPAY{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=24) THEN CMOPAY{I}=REGPAY{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=25) THEN CMOPAY{I}=REGPAY{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=31) THEN CMOPAY{I}=REGPAY{I}*(52/52)*2; 268 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (REGPAYF{I}=18) THEN CMOPAY{I}=REGPAY{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=0) THEN CMOPAY{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYF{I}>.Z & REGPAYF{I}^=-1 & REGPAYF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAY{I}= REGPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAY{I}>.Z & REGPAY{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAY{I}= REGPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAY{I}<=.Z) THEN CMOPAY{I}=REGPAY{I}; MPRINT(MOCONV): ELSE IF (REGPAY{I}^=-1 & REGPAY{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYF{I}= REGPAY{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(MOCONV): IF (TYPAYF{I}=1) THEN CMOPAY{I}=TYPAY{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=2) THEN CMOPAY{I}=TYPAY{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=3) THEN CMOPAY{I}=TYPAY{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=4) THEN CMOPAY{I}=TYPAY{I}; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=5) THEN CMOPAY{I}=TYPAY{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=6) THEN CMOPAY{I}=TYPAY{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=20) THEN CMOPAY{I}=TYPAY{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=21) THEN CMOPAY{I}=TYPAY{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=8) THEN CMOPAY{I}=TYPAY{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=11) THEN CMOPAY{I}=TYPAY{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=12) THEN CMOPAY{I}=TYPAY{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=23) THEN CMOPAY{I}=TYPAY{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=24) THEN CMOPAY{I}=TYPAY{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=25) THEN CMOPAY{I}=TYPAY{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=31) THEN CMOPAY{I}=TYPAY{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=18) THEN CMOPAY{I}=TYPAY{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=0) THEN CMOPAY{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYF{I}>.Z & TYPAYF{I}^=-1 & TYPAYF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAY{I}= TYPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAY{I}>.Z & TYPAY{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAY{I}= TYPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAY{I}<=.Z) THEN CMOPAY{I}=TYPAY{I}; MPRINT(MOCONV): ELSE IF (TYPAY{I}^=-1 & TYPAY{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYF{I}= TYPAY{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF NMYR{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFT{I}=(TLMTH{I}-((2007-LNSTYR{I})*12)); MPRINT(TAXSCF): LNAGE{I}=TLMTH{I}-PAYLFT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFT{I}=0; MPRINT(TAXSCF): LNAGE{I}=0; MPRINT(TAXSCF): END; 269 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): file "null.txt"; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((X723=1) & (X810 IN(1 2 3)) & TLMTHM1 > 0 & X816 > 0) THEN DO; MPRINT(TAXSCF): IF (X811=1) THEN DO; MPRINT(MORTPAY): AMOPAYM1=ROUND((MORT((X804),.,((X816/10000)/12),(TLMTHM1))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (CMOPAYM1 > AMOPAYM1) THEN CMOPAYM1=AMOPAYM1; MPRINT(TAXSCF): 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= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X811=2) THEN DO; MPRINT(TAXSCF): IF (X804 > X812) THEN ADJBORR=X804-X812; MPRINT(TAXSCF): ELSE IF (X804 < X812) THEN ADJBORR=X804; MPRINT(TAXSCF): IF ADJBORR > 0 THEN MPRINT(MORTPAY): AMOPAYM1=ROUND((MORT((ADJBORR),.,((X816/10000)/12),(TLMTHM1))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (X804=X812) THEN AMOPAYM1=((X804)*(X816/10000))/12; MPRINT(TAXSCF): IF (CMOPAYM1 > AMOPAYM1) THEN CMOPAYM1=AMOPAYM1; MPRINT(TAXSCF): 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= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * 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); MPRINT(TAXSCF): * NOT INCLUDING LAND CONTRACTS; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELN); MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTDCT{I}=CMOPAY{I}*12; MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELN{I}=1 & HBALLN{I} IN(1 2) & NMYR{I} NOT IN(0 -1 -7) & INTRATE{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & PAYLFT{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAY{I} < AMTBORR{I}*.005) THEN CMOPAY{I}=MAX(REGPAY{I},TYPAY{I}); MPRINT(TAXSCF): 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})); MPRINT(TAXSCF): 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))); MPRINT(TAXSCF): IF LNSTYR{I}^=2007 THEN AINTDCT{I}=(CMOPAY{I}*12)-(AMTOWE_1{I}-AMTOWE{I}); MPRINT(TAXSCF): ELSE IF LNSTYR{I}=2007 THEN AINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTH{I} < 0 | CMOPAY{I} < 0 | PAYLFT{I} < 0) THEN DO; 270 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): AMTOWE{I}=0; MPRINT(TAXSCF): AMTOWE_1{I}=0; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & AMTBORR{I} > 0 & LNAGE{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTDCT{I}=(CMOPAY{I}*12)-(CURBAL_1{I}-CURBAL{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTH{I} < 0 | AMTBORR{I} < 0 | LNAGE{I} < 0) THEN DO; MPRINT(TAXSCF): CURBAL{I}=0; MPRINT(TAXSCF): CURBAL_1{I}=0; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUT{I} > 0 & INTRATE{I} > 0) THEN SINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): ELSE SINTDCT{I}=0; MPRINT(TAXSCF): * 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 the home was not purchased in the survey year. If the home was purchased in the survey year, set deduction to zero.; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & PAYLFT{I}=0) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=CURBAL_1{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): AINTDCT{I}=CINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & LNSTYR{I}=2007 & X720=2007) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): SINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & LNSTYR{I}=2007) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTDCT{I} < 0 | CINTDCT{I} < 0) & CURBAL{I} > 0 & CURBAL_1{I} > 0) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=CURBAL_1{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): AINTDCT{I}=CINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTDCT{I} < 0 | CINTDCT{I} < 0) & (CURBAL{I} <= 0 & CURBAL_1{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCT{I} > 0 & CINTDCT{I} > 0) THEN DCTDIFF{I}=CINTDCT{I}-SINTDCT{I}; MPRINT(TAXSCF): ELSE DCTDIFF{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELN{I}=1 & (NMYR{I} IN(-1 -7) | NMPMT{I} IN(-1 -7)) & AMTOUT{I} > 0 & INTRATE{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELN{I}=1 & (INTRATE{I}=-1)) THEN DO; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): CINTDCT{I}=0; 271 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): SINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest deduction; MPRINT(TAXSCF): IF ((CINTDCT{I} + AINTDCT{I} + SINTDCT{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTDCT{I}=(CINTDCT{I}+AINTDCT{I}+SINTDCT{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTDCT{I}=0; MPRINT(TAXSCF): * Constraining interest deduction amount to be no more than the reported year 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.; MPRINT(TAXSCF): IF (HAVELN{I}=1 & AVINTDCT{I} > 0 & CMOPAY{I} > 0 & (AVINTDCT{I} > CMOPAY{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTDCT{I}=CMOPAY{I}*12; MPRINT(TAXSCF): CINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): SINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELN{I}=1 & AVINTDCT{I} > 0 & AMTOUT{I} > 0 & (AVINTDCT{I} > .25*AMTOUT{I})) THEN DO; MPRINT(TAXSCF): AVINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): CINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELN{I}=1 & Y1=YY1*10+1 & AVINTDCT{I}=0 & NMYR{I}^=2007) 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}= /; MPRINT(TAXSCF): * 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; MPRINT(TAXSCF): IF (X702=1 & X714=1 & X7135=5) THEN DO; MPRINT(TAXSCF): TOTDEDCTM=TOTDEDCTM+(AVINTDCT{I}/X715)*(HAVELN{I}=1); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE TOTDEDCTM=TOTDEDCTM+AVINTDCT{I}; MPRINT(TAXSCF): * Total amount outstanding on loans; MPRINT(TAXSCF): TOTAMTOUTM=TOTAMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): * Need to divide mortgages up by date, pre 10/13/87 mortgages are considered grandfathered debt by IRS, and different limits apply to mortgages taken out after 12/15/2017; MPRINT(TAXSCF): IF ((LNSTYR{I}=1987 & LNSTMN{I} < 10) | (LNSTYR{I} < 1987)) THEN DO; MPRINT(TAXSCF): GRFAMTOUTM=GRFAMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((LNSTYR{I}=2017 & LNSTMN{I}=12) | (LNSTYR{I} > 2017)) THEN DO; MPRINT(TAXSCF): A17AMTOUTM=A17AMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((LNSTYR{I}=1987 & LNSTMN {I} >= 10) | (1987 < LNSTYR{I} < 2017) | (LNSTYR{I}=2017 & LNSTMN{I}<=11)) THEN DO; MPRINT(TAXSCF): HAAMTOUTM=HAAMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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, 3, or 4 as home acquisition debt (same as a mortgage, counts toward mortgage balance limit), while HELOCs with other use codes counted as home equity debt. Ignoring the mopup as we dont know if that LOC is secured by a home; MPRINT(TAXSCF): ARRAY CMOPAYL {*} CMOPAYL1 CMOPAYL2 CMOPAYL3; MPRINT(TAXSCF): ARRAY SINTDCTL {*} SINTDCTL1 SINTDCTL2 SINTDCTL3; MPRINT(TAXSCF): ARRAY AQDBT {*} AQDBTL1 AQDBTL2 AQDBTL3; MPRINT(TAXSCF): ARRAY AQINT {*} AQINTL1 AQINTL2 AQINTL3; MPRINT(TAXSCF): ARRAY EQDBT {*} EQDBTL1 EQDBTL2 EQDBTL3; MPRINT(TAXSCF): ARRAY SBYHOME {*} X1103 X1114 X1125; MPRINT(TAXSCF): ARRAY DOOWE {*} X1105 X1116 X1127; 272 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ARRAY LNPURP {*} X1106 X1117 X1128; MPRINT(TAXSCF): ARRAY AMTOUTL {*} X1108 X1119 X1130; MPRINT(TAXSCF): ARRAY TYPAYL {*} X1109 X1120 X1131; MPRINT(TAXSCF): ARRAY TYPAYLF {*} X1110 X1121 X1132; MPRINT(TAXSCF): ARRAY INTRATEL {*} X1111 X1122 X1133; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): TOTAQDBTL=0; MPRINT(TAXSCF): TOTEQDBTL=0; MPRINT(TAXSCF): TOTDEDCTL=0; MPRINT(TAXSCF): TOTAQDEDCTL=0; MPRINT(TAXSCF): TOTLOCINVEX=0; MPRINT(TAXSCF): DO I=1 TO DIM(CMOPAYL); MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): AQDBT{I}=0; MPRINT(TAXSCF): AQINT{I}=0; MPRINT(TAXSCF): EQDBT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (X1101=1) THEN DO; MPRINT(TAXSCF): DO I=1 TO DIM(SBYHOME); MPRINT(TAXSCF): IF (SBYHOME{I}=1 & DOOWE{I}=1) THEN DO; MPRINT(TAXSCF): IF (TYPAYL{I} > 0) THEN DO; MPRINT(MOCONV): IF (TYPAYLF{I}=1) THEN CMOPAYL{I}=TYPAYL{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=2) THEN CMOPAYL{I}=TYPAYL{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=3) THEN CMOPAYL{I}=TYPAYL{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=4) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=5) THEN CMOPAYL{I}=TYPAYL{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=6) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=20) THEN CMOPAYL{I}=TYPAYL{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=21) THEN CMOPAYL{I}=TYPAYL{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=8) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=11) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=12) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=23) THEN CMOPAYL{I}=TYPAYL{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=24) THEN CMOPAYL{I}=TYPAYL{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=25) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=31) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=18) THEN CMOPAYL{I}=TYPAYL{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=0) THEN CMOPAYL{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}>.Z & TYPAYLF{I}^=-1 & TYPAYLF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}>.Z & TYPAYL{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}<=.Z) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYL{I}^=-1 & TYPAYL{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYLF{I}= TYPAYL{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TYPAYL{I} IN(0 -1 -2)) THEN DO; MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (INTRATEL{I} > 0) THEN DO; 273 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): SINTDCTL{I}=((INTRATEL{I}/10000)*AMTOUTL{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEL{I} IN(0 -1)) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTL{I} > 0 & CMOPAYL{I} > 0 & SINTDCTL{I} > CMOPAYL{I}*12) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=CMOPAYL{I}*12; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (LNPURP{I} IN(1 3 4)) THEN DO; MPRINT(TAXSCF): AQDBT{I}=AMTOUTL{I}; MPRINT(TAXSCF): AQINT{I}=SINTDCTL{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (LNPURP{I} NOT IN(1 3 4)) THEN DO; MPRINT(TAXSCF): EQDBT{I}=AMTOUTL{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTDEDCTL=TOTDEDCTL+SINTDCTL{I}; MPRINT(TAXSCF): TOTAQDEDCTL=TOTAQDEDCTL+AQINT{I}; MPRINT(TAXSCF): TOTAQDBTL=TOTAQDBTL+AQDBT{I}; MPRINT(TAXSCF): TOTEQDBTL=TOTEQDBTL+EQDBT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * Dropped third column of grid for 2010 forward; MPRINT(TAXSCF): * Create arrays for various other property loan components; MPRINT(TAXSCF): ARRAY TLMTHO {*} TLMTHO1 TLMTHO2 TLMTHO3; MPRINT(TAXSCF): ARRAY CMOPAYO {*} CMOPAYO1 CMOPAYO2 CMOPAYO3; MPRINT(TAXSCF): ARRAY AMOPAYO {*} AMOPAYO1 AMOPAYO2 AMOPAYO3; MPRINT(TAXSCF): ARRAY PAYLFTO {*} PAYLFTO1 PAYLFTO2 PAYLFTO3; MPRINT(TAXSCF): ARRAY AMTOWEO {*} AMTOWEO1 AMTOWEO2 AMTOWEO3; MPRINT(TAXSCF): ARRAY AMTOWE_1O {*} AMTOWE_1O1 AMTOWE_1O2 AMTOWE_1O3; MPRINT(TAXSCF): ARRAY AINTDCTO {*} AINTDCTO1 AINTDCTO2 AINTDCTO3; MPRINT(TAXSCF): ARRAY LNAGEO {*} LNAGEO1 LNAGEO2 LNAGEO3; MPRINT(TAXSCF): ARRAY CURBALO {*} CURBALO1 CURBALO2 CURBALO3; MPRINT(TAXSCF): ARRAY CURBAL_1O {*} CURBAL_1O1 CURBAL_1O2 CURBAL_1O3; MPRINT(TAXSCF): ARRAY CINTDCTO {*} CINTDCTO1 CINTDCTO2 CINTDCTO3; MPRINT(TAXSCF): ARRAY DCTDIFFO {*} DCTDIFFO1 DCTDIFFO2 DCTDIFFO3; MPRINT(TAXSCF): ARRAY SINTDCTO {*} SINTDCTO1 SINTDCTO2 SINTDCTO3; MPRINT(TAXSCF): ARRAY AVINTDCTO {*} AVINTDCTO1 AVINTDCTO2 AVINTDCTO3; MPRINT(TAXSCF): ARRAY QUALPROP {*} QPROP1 QPROP2 QPROP3; MPRINT(TAXSCF): ARRAY QUALPINV {*} QPINV1 QPINV2 QPINV3; MPRINT(TAXSCF): ARRAY ADJBORRO {*} ADJBORRO1 ADJBORRO2 ADJBORRO3; MPRINT(TAXSCF): ARRAY NMPMTO {*} X1717 X1817 X1917; MPRINT(TAXSCF): ARRAY NMYRO {*} X1716 X1816 X1916; MPRINT(TAXSCF): ARRAY REGPAYFO {*} X1719 X1819 X1919; MPRINT(TAXSCF): ARRAY REGPAYO {*} X1718 X1818 X1918; MPRINT(TAXSCF): ARRAY TYPAYFO {*} X1724 X1824 X1924; MPRINT(TAXSCF): ARRAY TYPAYO {*} X1723 X1823 X1923; MPRINT(TAXSCF): ARRAY LNSTMNO {*} X1712 X1812 X1912; MPRINT(TAXSCF): ARRAY LNSTYRO {*} X1713 X1813 X1913; MPRINT(TAXSCF): ARRAY HBALLNO {*} X1721 X1821 X1921; MPRINT(TAXSCF): ARRAY BALLNO {*} X1722 X1822 X1922; MPRINT(TAXSCF): ARRAY AMTBORRO {*} X1714 X1814 X1914; MPRINT(TAXSCF): ARRAY JAMTBORRO {*} J1714 J1814 J1914; MPRINT(TAXSCF): ARRAY AMTOUTO {*} X1715 X1815 X1915; MPRINT(TAXSCF): ARRAY JAMTOUTO {*} J1715 J1815 J1915; MPRINT(TAXSCF): ARRAY HAVELNO {*} X1711 X1811 X1911; 274 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ARRAY INTRATEO {*} X1726 X1826 X1926; MPRINT(TAXSCF): ARRAY ONSCHEDO {*} X7554 X7553 X7552; MPRINT(TAXSCF): ARRAY HINCOMEO {*} X1729 X1829 X1929; MPRINT(TAXSCF): ARRAY INCOMEO {*} X1730 X1830 X1930; MPRINT(TAXSCF): ARRAY PROPTYPE {*} X1703 X1803 X1903; MPRINT(TAXSCF): ARRAY PERPROP {*} X1705 X1805 X1905; MPRINT(TAXSCF): ARRAY PROPVAL {*} X1706 X1806 X1906; MPRINT(TAXSCF): ARRAY TAXINS {*} X1720 X1820 X1920; MPRINT(TAXSCF): ARRAY PURCHYRO {*} X1708 X1808 X1908; MPRINT(TAXSCF): ARRAY LIMFLAG {*} LIMFL1 LIMFL2 LIMFL3; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTHO); MPRINT(TAXSCF): TLMTHO{I}=0; MPRINT(TAXSCF): CMOPAYO{I}=0; MPRINT(TAXSCF): PAYLFTO{I}=0; MPRINT(TAXSCF): AMTOWEO{I}=0; MPRINT(TAXSCF): AMTOWE_1O{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): LNAGEO{I}=0; MPRINT(TAXSCF): CURBALO{I}=0; MPRINT(TAXSCF): CURBAL_1O{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): DCTDIFFO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): AVINTDCTO{I}=0; MPRINT(TAXSCF): QUALPROP{I}=0; MPRINT(TAXSCF): QUALPINV{I}=0; MPRINT(TAXSCF): ADJBORRO{I}=0; MPRINT(TAXSCF): LIMFLAG{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTAMTOUTO=0; MPRINT(TAXSCF): TOTDEDCTO=0; MPRINT(TAXSCF): QUALOTHPROP=0; MPRINT(TAXSCF): QUALINVPROP=0; MPRINT(TAXSCF): TOTINVPDCT=0; MPRINT(TAXSCF): FMVOP=0; MPRINT(TAXSCF): DO I=1 TO DIM(NMPMTO); MPRINT(TERMCON): IF (NMYRO{I}=0 & NMPMTO{I}=0) THEN DO; MPRINT(TERMCON): TLMTHO{I}=0; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRO{I}^=0|NMPMTO{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRO{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRO{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHO{I}=NMYRO{I}; MPRINT(TERMCON): IF (NMPMTO{I}=0) THEN DO; MPRINT(TERMCON): NMPMTO{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRO{I}>0) THEN DO; MPRINT(TERMCON): TLMTHO{I}=NMYRO{I}*12; MPRINT(TERMCON): IF (NMPMTO{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYFO{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMTO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFO{I}=-7) THEN DO; MPRINT(TERMCON): NMPMTO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFO{I}=8) THEN DO; 275 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TERMCON): NMPMTO{I}=1; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFO{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYFO{I}=1) THEN NMPMTO{I}=TLMTHO{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=2) THEN NMPMTO{I}=TLMTHO{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=3) THEN NMPMTO{I}=TLMTHO{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=4) THEN NMPMTO{I}=TLMTHO{I}; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=5) THEN NMPMTO{I}=TLMTHO{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=6) THEN NMPMTO{I}=TLMTHO{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=20) THEN NMPMTO{I}=TLMTHO{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=21) THEN NMPMTO{I}=TLMTHO{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=11) THEN NMPMTO{I}=TLMTHO{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=12) THEN NMPMTO{I}=TLMTHO{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=23) THEN NMPMTO{I}=TLMTHO{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=24) THEN NMPMTO{I}=TLMTHO{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=25) THEN NMPMTO{I}=TLMTHO{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=31) THEN NMPMTO{I}=TLMTHO{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=18) THEN NMPMTO{I}=TLMTHO{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=0) THEN NMPMTO{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}>.Z & REGPAYFO{I}^=-1 & REGPAYFO{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMTO{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTHO{I}= REGPAYFO{I}= NMPMTO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHO{I}>.Z & TLMTHO{I}<-2) THEN DO; MPRINT(MOCONV): NMPMTO{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTHO{I}= REGPAYFO{I}= NMPMTO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHO{I}<=.Z) THEN NMPMTO{I}=TLMTHO{I}; MPRINT(MOCONV): ELSE IF (TLMTHO{I}^=-1 & TLMTHO{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFO{I}= TLMTHO{I}= "SETTING AMT=."; MPRINT(MOCONV): NMPMTO{I}=.; MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTO{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHO{I}=-1; MPRINT(TERMCON): IF (NMYRO{I}=0) THEN DO; MPRINT(TERMCON): NMYRO{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTO{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYFO{I}; MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYFO{I}>0) THEN PFREQ=TYPAYFO{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTHO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; MPRINT(TERMCON): TLMTHO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): IF (NMPMTO{I}>0) THEN DO; MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTHO{I}=NMPMTO{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}))); 276 The SAS System 13:32 Friday, January 29, 2021 MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12))); MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTHO{I}=NMPMTO{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTHO{I}=NMPMTO{I}*2/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTHO{I}=NMPMTO{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTHO{I}=NMPMTO{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTHO{I}=NMPMTO{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTHO{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): TLMTHO{I}=NMPMTO{I}; MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMTO{I}= PFREQ= TLMTHO{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}>.Z & NMPMTO{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTHO{I}=NMPMTO{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMTO{I}= PFREQ= TLMTHO{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}=0) THEN TLMTHO{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}<=.Z) THEN TLMTHO{I}=NMPMTO{I}; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}^=-1 & NMPMTO{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMTO{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTHO{I}=.; MPRINT(IMOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTHO{I}>0) THEN DO; MPRINT(TERMCON): NMYRO{I}=MAX(1,INT(.5+(TLMTHO{I}/12))); MPRINT(TERMCON): TLMTHO{I}=MAX(1,ROUND(TLMTHO{I})); MPRINT(TERMCON): END; MPRINT(TERMCON): IF (NMYRO{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMTO{I}= NMYRO{I}= TLMTHO{I}= REGPAYFO{I}= REGPAYO{I}= TYPAYFO{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAYO{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYFO{I}=1) THEN CMOPAYO{I}=REGPAYO{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=2) THEN CMOPAYO{I}=REGPAYO{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=3) THEN CMOPAYO{I}=REGPAYO{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=4) THEN CMOPAYO{I}=REGPAYO{I}; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=5) THEN CMOPAYO{I}=REGPAYO{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=6) THEN CMOPAYO{I}=REGPAYO{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=20) THEN CMOPAYO{I}=REGPAYO{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=21) THEN CMOPAYO{I}=REGPAYO{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=8) THEN CMOPAYO{I}=REGPAYO{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=11) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=12) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=23) THEN CMOPAYO{I}=REGPAYO{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=24) THEN CMOPAYO{I}=REGPAYO{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=25) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=31) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=18) THEN CMOPAYO{I}=REGPAYO{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=0) THEN CMOPAYO{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}>.Z & REGPAYFO{I}^=-1 & REGPAYFO{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; 277 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAYO{I}= REGPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYO{I}>.Z & REGPAYO{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAYO{I}= REGPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYO{I}<=.Z) THEN CMOPAYO{I}=REGPAYO{I}; MPRINT(MOCONV): ELSE IF (REGPAYO{I}^=-1 & REGPAYO{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFO{I}= REGPAYO{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(MOCONV): IF (TYPAYFO{I}=1) THEN CMOPAYO{I}=TYPAYO{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=2) THEN CMOPAYO{I}=TYPAYO{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=3) THEN CMOPAYO{I}=TYPAYO{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=4) THEN CMOPAYO{I}=TYPAYO{I}; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=5) THEN CMOPAYO{I}=TYPAYO{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=6) THEN CMOPAYO{I}=TYPAYO{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=20) THEN CMOPAYO{I}=TYPAYO{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=21) THEN CMOPAYO{I}=TYPAYO{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=8) THEN CMOPAYO{I}=TYPAYO{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=11) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=12) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=23) THEN CMOPAYO{I}=TYPAYO{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=24) THEN CMOPAYO{I}=TYPAYO{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=25) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=31) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=18) THEN CMOPAYO{I}=TYPAYO{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=0) THEN CMOPAYO{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}>.Z & TYPAYFO{I}^=-1 & TYPAYFO{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYO{I}= TYPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYO{I}>.Z & TYPAYO{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYO{I}= TYPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYO{I}<=.Z) THEN CMOPAYO{I}=TYPAYO{I}; MPRINT(MOCONV): ELSE IF (TYPAYO{I}^=-1 & TYPAYO{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYFO{I}= TYPAYO{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF NMYRO{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFTO{I}=(TLMTHO{I}-((2007-LNSTYRO{I})*12)); MPRINT(TAXSCF): LNAGEO{I}=TLMTHO{I}-PAYLFTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFTO{I}=0; MPRINT(TAXSCF): LNAGEO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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 278 The SAS System 13:32 Friday, January 29, 2021 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.; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNO); MPRINT(TAXSCF): IF ((HAVELNO{I}=1) & (TAXINS{I} IN(1 2 3)) & TLMTHO{I} > 0 & INTRATEO{I} > 0) THEN DO; MPRINT(TAXSCF): IF (HBALLNO{I}=1) THEN DO; MPRINT(MORTPAY): AMOPAYO{I}=ROUND((MORT((AMTBORRO{I}),.,((INTRATEO{I}/10000)/12),(TLMTHO{I}))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (CMOPAYO{I} > AMOPAYO{I}) THEN CMOPAYO{I}=AMOPAYO{I}; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HBALLNO{I}=5) THEN DO; MPRINT(TAXSCF): IF (AMTBORRO{I} > BALLNO{I}) THEN ADJBORRO{I}=(AMTBORRO{I}-BALLNO{I}); MPRINT(TAXSCF): ELSE IF (AMTBORRO{I} < BALLNO{I}) THEN ADJBORRO{I}=AMTBORRO{I}; MPRINT(TAXSCF): IF ADJBORRO{I} > 0 THEN MPRINT(MORTPAY): AMOPAYO{I}=ROUND((MORT((ADJBORRO{I}),.,((INTRATEO{I}/10000)/12),(TLMTHO{I}))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (AMTBORRO{I}=BALLNO{I}) THEN AMOPAYO{I}=((AMTBORRO{I})*(INTRATEO{I}/10000))/12; MPRINT(TAXSCF): IF (CMOPAYO{I} > AMOPAYO{I}) THEN CMOPAYO{I}=AMOPAYO{I}; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * 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); MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNO); MPRINT(TAXSCF): IF (PROPTYPE{I} IN(12 13 14 21 22 25 40 49 999) & (HINCOMEO{I}=5 | INCOMEO{I}=-1)) | (PROPTYPE{I} IN(12 13 14 21 22 25 40 49 999) & HINCOMEO{I}=1 & INCOMEO{I} < (CMOPAYO{I}*12)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified properties; MPRINT(TAXSCF): QUALPROP{I}=(HAVELNO{I}=1); MPRINT(TAXSCF): QUALOTHPROP=QUALOTHPROP+QUALPROP{I}; MPRINT(TAXSCF): FMVOP=FMVOP+PROPVAL{I}*(HAVELNO{I}=1); MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & HBALLNO{I} IN(1 5) & NMYRO{I} NOT IN(0 -1 -7) & INTRATEO{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAYO{I} < AMTBORRO{I}*.005) THEN CMOPAYO{I}=MAX(REGPAYO{I},TYPAYO{I}); MPRINT(TAXSCF): 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})); MPRINT(TAXSCF): 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))); MPRINT(TAXSCF): IF LNSTYRO{I}^=2007 THEN AINTDCTO{I}=(CMOPAYO{I}*12)-(AMTOWE_1O{I}-AMTOWEO{I}); 279 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE IF LNSTYRO{I}=2007 THEN AINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | CMOPAYO{I} < 0 | PAYLFTO{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEO{I}=0; MPRINT(TAXSCF): AMTOWE_1O{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & AMTBORRO{I} > 0 & LNAGEO{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTDCTO{I}=(CMOPAYO{I}*12)-(CURBAL_1O{I}-CURBALO{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | AMTBORRO{I} < 0 | LNAGEO{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALO{I}=0; MPRINT(TAXSCF): CURBAL_1O{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): ELSE SINTDCTO{I}=0; MPRINT(TAXSCF): * 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 the home was not purchased in the survey year. If the home was purchased in the survey year, set deduction to zero.; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I}=0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=2007 & PURCHYRO{I}=2007) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=2007) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & CURBALO{I} > 0 & CURBAL_1O{I} > 0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & (CURBALO{I} <= 0 & CURBAL_1O{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTO{I} > 0 & CINTDCTO{I} > 0) THEN DCTDIFFO{I}=CINTDCTO{I}-SINTDCTO{I}; MPRINT(TAXSCF): ELSE DCTDIFFO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (NMYRO{I} IN(-1 -7) & NMPMTO{I} IN(-1 -7)) & AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; 280 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (INTRATEO{I}=-1)) THEN DO; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest deduction; MPRINT(TAXSCF): IF ((CINTDCTO{I} + AINTDCTO{I} + SINTDCTO{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=(CINTDCTO{I}+AINTDCTO{I}+SINTDCTO{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTDCTO{I}=0; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & CMOPAYO{I} > 0 & (AVINTDCTO{I} > CMOPAYO{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): SINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & AMTOUTO{I} > 0 & (AVINTDCTO{I} > .25*AMTOUTO{I})) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): * Compute total deduction and total amount outstanding; MPRINT(TAXSCF): TOTDEDCTO=TOTDEDCTO+((AVINTDCTO{I})*PERPROP{I}/10000)*(HAVELNO{I}=1); MPRINT(TAXSCF): TOTAMTOUTO=TOTAMTOUTO+AMTOUTO{I}; MPRINT(TAXSCF): * Create flag for loans after 12/15/17, used in computing limits on mortgage interest deduction for home acquistion debt; MPRINT(TAXSCF): LIMFLAG{I}=(LNSTYRO{I}> 2017 | (LNSTYRO{I}=2017 & LNSTMNO{I}=12)); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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 hhs are rational and report the home/properties with the biggest deductions.; MPRINT(TAXSCF): ADJDEDCTO=0; MPRINT(TAXSCF): ADJAMTOUTO=0; MPRINT(TAXSCF): ADJ17AMTOUTO=0; MPRINT(TAXSCF): FMVOTHPROP=0; MPRINT(TAXSCF): IF (QUALOTHPROP > 0) THEN DO; MPRINT(TAXSCF): IF (QUALOTHPROP=1 & QPROP1=1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=1 & QPROP2=1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; 281 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=1 & QPROP3=1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO3; MPRINT(TAXSCF): ADJ17AMTOUTO=X1915*(LIMFL3=1); MPRINT(TAXSCF): ADJAMTOUTO=X1915*(LIMFL3=0); MPRINT(TAXSCF): FMVOTHPROP=X1906*(X1905/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=2) THEN DO; MPRINT(TAXSCF): IF (QPROP1=1 & QPROP2=1) THEN DO; MPRINT(TAXSCF): IF (AVINTDCTO1 >= AVINTDCTO2) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO2 >= AVINTDCTO1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QPROP1=1 & QPROP3=1) THEN DO; MPRINT(TAXSCF): IF (AVINTDCTO1 >= AVINTDCTO3) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO3 >= AVINTDCTO1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO3; MPRINT(TAXSCF): ADJ17AMTOUTO=X1915*(LIMFL3=1); MPRINT(TAXSCF): ADJAMTOUTO=X1915*(LIMFL3=0); MPRINT(TAXSCF): FMVOTHPROP=X1906*(X1905/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QPROP2=1 & QPROP3=1) THEN DO; MPRINT(TAXSCF): IF (AVINTDCTO2 >= AVINTDCTO3) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO3 >= AVINTDCTO2) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO3; MPRINT(TAXSCF): ADJ17AMTOUTO=X1915*(LIMFL3=1); MPRINT(TAXSCF): ADJAMTOUTO=X1915*(LIMFL3=0); MPRINT(TAXSCF): FMVOTHPROP=X1906*(X1905/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=3) THEN DO; MPRINT(TAXSCF): IF (AVINTDCTO1 >= AVINTDCTO2 & AVINTDCTO1 >= AVINTDCTO3) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO2 >= AVINTDCTO1 & AVINTDCTO2 >= AVINTDCTO3) THEN DO; 282 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO3 >= AVINTDCTO1 & AVINTDCTO3 >= AVINTDCTO2) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO3; MPRINT(TAXSCF): ADJ17AMTOUTO=X1915*(LIMFL3=1); MPRINT(TAXSCF): ADJAMTOUTO=X1915*(LIMFL3=0); MPRINT(TAXSCF): FMVOTHPROP=X1906*(X1905/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (X701=-7 & X7133=1) THEN DO; MPRINT(TAXSCF): HOUSE=(X7134/10000)*X716; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE HOUSE=SUM(0,X604,X614,X623,X716,(X513+X526)); MPRINT(TAXSCF): IF (TOTEQDBTL > 0 & GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL+TOTEQDBTL > (HOUSE)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) > 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=MIN((HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL)),TOTEQDBTL,100000); MPRINT(TAXSCF): ADJDEDCTL=TOTDEDCTL*(ADJEQDBTL/TOTEQDBTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) <= 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=0; MPRINT(TAXSCF): ADJDEDCTL=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((FILESTAT=3) & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) > 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=MIN((HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL)),TOTEQDBTL,50000); MPRINT(TAXSCF): ADJDEDCTL=TOTDEDCTL*(ADJEQDBTL/TOTEQDBTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((FILESTAT=3) & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) <= 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=0; MPRINT(TAXSCF): ADJDEDCTL=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TOTEQDBTL ^=. & TOTDEDCTL ^=.) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=TOTEQDBTL; MPRINT(TAXSCF): ADJDEDCTL=TOTDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TOTEQDBTL > 0 & GRFAMTOUTM+A17AMTOUTM+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= /; MPRINT(TAXSCF): * 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), worksheet changed in 2018; MPRINT(TAXSCF): ADJDEDCT=0; MPRINT(TAXSCF): * case 1 - grandfathered debt, no home acquisition debt, maybe home equity; MPRINT(TAXSCF): IF (GRFAMTOUTM > 0 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & ADJEQDBTL <= 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & ADJEQDBTL > 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; 283 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+100000)/(GRFAMTOUTM+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & ADJEQDBTL <= 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & ADJEQDBTL > 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+50000)/(GRFAMTOUTM+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * case 2 - some grandfathered debt, some home acquisition debt, maybe home equity; MPRINT(TAXSCF): ELSE IF (GRFAMTOUTM > 0 & (HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & (ADJEQDBTL=0 | ADJEQDBTL <= 100000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & ADJEQDBTL > 100000 & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+100000) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (ADJEQDBTL <= 100000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+ADJEQDBTL),(1000000+ADJEQDBTL))) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (ADJEQDBTL > 100000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+100000),1100000))/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (ADJEQDBTL=0 | ADJEQDBTL <= 50000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & ADJEQDBTL > 50000 & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+50000) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (ADJEQDBTL=0 | ADJEQDBTL <= 50000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+ADJEQDBTL),(500000+ADJEQDBTL))) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (ADJEQDBTL=0 | ADJEQDBTL > 50000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+50000),550000))/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); 284 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * case 3 - no grandfathered debt, maybe home acquisition, maybe home equity; MPRINT(TAXSCF): ELSE IF (GRFAMTOUTM=0 & (HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | ADJEQDBTL > 0)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 0 & ADJEQDBTL <= 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((100000)/ADJEQDBTL)*ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL <= 1000000) & ADJEQDBTL <= 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL <= 1000000) & ADJEQDBTL > 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+100000)/ (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL > 1000000) & (ADJEQDBTL <= 100000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((1000000+ADJEQDBTL)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL > 1000000) & (ADJEQDBTL > 100000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((1100000)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 0 & ADJEQDBTL <= 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((50000)/ADJEQDBTL)*ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000) & ADJEQDBTL <= 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000) & ADJEQDBTL > 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+50000)/ (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000) & (ADJEQDBTL <= 50000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((500000+ADJEQDBTL)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000) & (ADJEQDBTL > 50000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((550000)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; 285 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): * a few obs will come out here, but they either have -1 as the interest rate or are land contracts; MPRINT(TAXSCF): IF ((GRFAMTOUTM > 0 | HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | (ADJEQDBTL*(2007 LE 2016)) > 0 | A17AMTOUTM > 0 & ADJ17AMTOUTO > 0) & ADJDEDCT=0 & X5744 IN(1 5 6) & Y1=YY1*10+1 & X720^=2007) THEN PUT "MORTGAGE DEDUCTION SHOULD NOT BE ZERO " Y1= X5744= X5746= GRFAMTOUTM= HAAMTOUTM= ADJAMTOUTO= TOTAQDBTL= ADJEQDBTL= A17AMTOUTM= ADJ17AMTOUTO= TOTDEDCTM= ADJDEDCTO= ADJDEDCTL= OVERLIM= QUALOTHPROP= CINTDCTM1= CINTDCTM2= CINTDCTM3= CINTDCTO1= CINTDCTO2= X702= X714= X7135= X723=/; MPRINT(TAXSCF): IF ((GRFAMTOUTM > 0 | HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | ADJEQDBTL > 0 | A17AMTOUTM > 0 & ADJ17AMTOUTO > 0) & OVERLIM=. & Y1=YY1*10+1) THEN PUT "OVER LIMIT INDICATOR MISSING " Y1= X5744= X5746= GRFAMTOUTM= HAAMTOUTM= ADJAMTOUTO= TOTAQDBTL= ADJEQDBTL= A17AMTOUTM= ADJ17AMTOUTO= TOTDEDCTM= ADJDEDCTO= ADJDEDCTL= OVERLIM= ADJDEDCT=/; MPRINT(TAXSCF): IF ADJDEDCT >= 100000 & Y1=YY1*10+1 THEN PUT "HUGE MORTGAGE INTEREST DEDUCTION " Y1= TOTDEDCTM= GRFAMTOUTM= HAAMTOUTM= TOTAQDBTL= ADJDEDCTL= ADJEQDBTL= ADJDEDCTO= ADJAMTOUTO= A17AMTOUTM= ADJ17AMTOUTO= HOUSE= QUALOTHPROP= FMVOTHPROP= X5744= X5746= ADJDEDCT= /; MPRINT(TAXSCF): ************Real estate taxes; MPRINT(TAXSCF): * TAXSIM doesnt want local property taxes in amount of itemized deductions, listed as a separate variable; MPRINT(TAXSCF): * 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; MPRINT(TAXSCF): PROPTXRATE=0; MPRINT(TAXSCF): IF (HOUSE > 0 & RESTAXM1 > 0) THEN PROPTXRATE=(RESTAXM1/HOUSE)*100; MPRINT(TAXSCF): IF (PROPTXRATE > 10 & Y1=YY1*10+1) THEN PUT "HIGH PROPERTY TAX RATE " Y1= HOUSE= RESTAXM1= X721= J721= X722= J722= X501= X601= X701= PROPTXRATE=/; MPRINT(TAXSCF): IF (PROPTXRATE > 10 & X722=4) THEN RESTAXM1=X721; MPRINT(TAXSCF): ************Investment interest expense; MPRINT(TAXSCF): * 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 need to add up dividend/interest income. Capital gains 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.; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * LOCs - only counting loans not secured by the residence and with asset or real estate investment as loan purpose.; MPRINT(TAXSCF): IF (X1101=1) THEN DO; MPRINT(TAXSCF): DO I=1 TO DIM(SBYHOME); MPRINT(TAXSCF): IF (SBYHOME{I}=5 & DOOWE{I}=1 & LNPURP{I} IN(76 78 79)) THEN DO; MPRINT(TAXSCF): IF (TYPAYL{I} > 0) THEN DO; MPRINT(MOCONV): IF (TYPAYLF{I}=1) THEN CMOPAYL{I}=TYPAYL{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=2) THEN CMOPAYL{I}=TYPAYL{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=3) THEN CMOPAYL{I}=TYPAYL{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=4) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=5) THEN CMOPAYL{I}=TYPAYL{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=6) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=20) THEN CMOPAYL{I}=TYPAYL{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=21) THEN CMOPAYL{I}=TYPAYL{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=8) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=11) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=12) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=23) THEN CMOPAYL{I}=TYPAYL{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=24) THEN CMOPAYL{I}=TYPAYL{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=25) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=31) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=18) THEN CMOPAYL{I}=TYPAYL{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=0) THEN CMOPAYL{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}>.Z & TYPAYLF{I}^=-1 & TYPAYLF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; 286 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}>.Z & TYPAYL{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}<=.Z) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYL{I}^=-1 & TYPAYL{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYLF{I}= TYPAYL{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TYPAYL{I} IN(0 -1 -2)) THEN DO; MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (INTRATEL{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=((INTRATEL{I}/10000)*AMTOUTL{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEL{I} IN(0 -1)) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTL{I} > 0 & CMOPAYL{I} > 0 & SINTDCTL{I} > CMOPAYL{I}*12) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=CMOPAYL{I}*12; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTLOCINVEX=TOTLOCINVEX+SINTDCTL{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Other properties - only counting properties held for investment purposes, and hh must receive income from the property.; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNO); MPRINT(TAXSCF): IF (PROPTYPE{I} IN(41 42 43 44 45 46 47 48) & (INCOMEO{I} > 0)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified properties; MPRINT(TAXSCF): QUALPINV{I}=(HAVELNO{I}=1); MPRINT(TAXSCF): QUALINVPROP=QUALINVPROP+QUALPINV{I}; MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & HBALLNO{I} IN(1 5) & NMYRO{I} NOT IN(0 -1 -7) & INTRATEO{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAYO{I} < AMTBORRO{I}*.005) THEN CMOPAYO{I}=MAX(REGPAYO{I},TYPAYO{I}); MPRINT(TAXSCF): 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})); MPRINT(TAXSCF): 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))); MPRINT(TAXSCF): IF LNSTYRO{I}^=2007 THEN AINTDCTO{I}=(CMOPAYO{I}*12)-(AMTOWE_1O{I}-AMTOWEO{I}); MPRINT(TAXSCF): ELSE IF LNSTYRO{I}=2007 THEN AINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | CMOPAYO{I} < 0 | PAYLFTO{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEO{I}=0; MPRINT(TAXSCF): AMTOWE_1O{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & AMTBORRO{I} > 0 & LNAGEO{I} > 0) THEN DO; 287 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTDCTO{I}=(CMOPAYO{I}*12)-(CURBAL_1O{I}-CURBALO{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | AMTBORRO{I} < 0 | LNAGEO{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALO{I}=0; MPRINT(TAXSCF): CURBAL_1O{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): ELSE SINTDCTO{I}=0; MPRINT(TAXSCF): * 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 the home was not purchased in the survey year. If the home was purchased in the survey year, set deduction to zero.; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I}=0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=2007 & PURCHYRO{I}=2007) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=2007) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & CURBALO{I} > 0 & CURBAL_1O{I} > 0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & (CURBALO{I} <= 0 & CURBAL_1O{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTO{I} > 0 & CINTDCTO{I} > 0) THEN DCTDIFFO{I}=CINTDCTO{I}-SINTDCTO{I}; MPRINT(TAXSCF): ELSE DCTDIFFO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (NMYRO{I} IN(-1 -7) & NMPMTO{I} IN(-1 -7)) & AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (INTRATEO{I}=-1)) THEN DO; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest deduction; MPRINT(TAXSCF): IF ((CINTDCTO{I} + AINTDCTO{I} + SINTDCTO{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=(CINTDCTO{I}+AINTDCTO{I}+SINTDCTO{I})/3; 288 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTDCTO{I}=0; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & CMOPAYO{I} > 0 & (AVINTDCTO{I} > CMOPAYO{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): SINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & AMTOUTO{I} > 0 & (AVINTDCTO{I} > .25*AMTOUTO{I})) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): * Compute total investment interest expense; MPRINT(TAXSCF): TOTINVPDCT=TOTINVPDCT+((AVINTDCTO{I})*PERPROP{I}/10000)*(HAVELNO{I}=1); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Other loans - only counting loans for (non-business) investment purposes; MPRINT(TAXSCF): ARRAY TLMTHI {*} TLMTHI1 TLMTHI2 TLMTHI3 TLMTHI4 TLMTHI5 TLMTHI6; MPRINT(TAXSCF): ARRAY CMOPAYI {*} CMOPAYI1 CMOPAYI2 CMOPAYI3 CMOPAYI4 CMOPAYI5 CMOPAYI6; MPRINT(TAXSCF): ARRAY PAYLFTI {*} PAYLFTI1 PAYLFTI2 PAYLFTI3 PAYLFTI4 PAYLFTI5 PAYLFTI6; MPRINT(TAXSCF): ARRAY AMTOWEI {*} AMTOWEI1 AMTOWEI2 AMTOWEI3 AMTOWEI4 AMTOWEI5 AMTOWEI6; MPRINT(TAXSCF): ARRAY AMTOWE_1I {*} AMTOWE_1I1 AMTOWE_1I2 AMTOWE_1I3 AMTOWE_1I4 AMTOWE_1I5 AMTOWE_1I6; MPRINT(TAXSCF): ARRAY AINTEXPI {*} AINTEXPI1 AINTEXPI2 AINTEXPI3 AINTEXPI4 AINTEXPI5 AINTEXPI6; MPRINT(TAXSCF): ARRAY LNAGEI {*} LNAGEI1 LNAGEI2 LNAGEI3 LNAGEI4 LNAGEI5 LNAGEI6; MPRINT(TAXSCF): ARRAY CURBALI {*} CURBALI1 CURBALI2 CURBALI3 URBALI4 CURBALI5 CURBALI6; MPRINT(TAXSCF): ARRAY CURBAL_1I {*} CURBAL_1I1 CURBAL_1I2 CURBAL_1I3 CURBAL_1I4 CURBAL_1I5 CURBAL_1I6; MPRINT(TAXSCF): ARRAY CINTEXPI {*} CINTEXPI1 CINTEXPI2 CINTEXPI3 CINTEXPI4 CINTEXPI5 CINTEXPI6; MPRINT(TAXSCF): ARRAY DCTDIFFI {*} DCTDIFFI1 DCTDIFFI2 DCTDIFFI3 DCTDIFFI4 DCTDIFFI5 DCTDIFFI6; MPRINT(TAXSCF): ARRAY SINTEXPI {*} SINTEXPI1 SINTEXPI2 SINTEXPI3 SINTEXPI4 SINTEXPI5 SINTEXPI6; MPRINT(TAXSCF): ARRAY AVINTEXPI {*} AVINTEXPI1 AVINTEXPI2 AVINTEXPI3 AVINTEXPI4 AVINTEXPI5 AVINTEXPI6; MPRINT(TAXSCF): ARRAY QUALN {*} QLN1 QLN2 QLN3 QLN4 QLN5 QLN6; MPRINT(TAXSCF): ARRAY NMPMTI {*} X2716 X2733 X2816 X2833 X2916 X2933; MPRINT(TAXSCF): ARRAY NMYRI {*} X2717 X2734 X2817 X2834 X2917 X2934; MPRINT(TAXSCF): ARRAY REGPAYFI {*} X7527 X7526 X7525 X7524 X7523 X7522; MPRINT(TAXSCF): ARRAY REGPAYI {*} X2718 X2735 X2818 X2835 X2918 X2935; MPRINT(TAXSCF): ARRAY TYPAYFI {*} X2720 X2737 X2820 X2837 X2920 X2937; MPRINT(TAXSCF): ARRAY TYPAYI {*} X2719 X2736 X2819 X2836 X2919 X2936; MPRINT(TAXSCF): ARRAY LNSTYRI {*} X2713 X2730 X2813 X2830 X2913 X2930; MPRINT(TAXSCF): ARRAY AMTBORRI {*} X2714 X2731 X2814 X2831 X2914 X2931; MPRINT(TAXSCF): ARRAY JAMTBORRI {*} J2714 J2731 J2814 J2831 J2914 J2931; MPRINT(TAXSCF): ARRAY AMTOUTI {*} X2723 X2740 X2823 X2840 X2923 X2940; MPRINT(TAXSCF): ARRAY JAMTOUTI {*} J2723 J2740 J2823 J2840 J2923 J2940; MPRINT(TAXSCF): ARRAY INTRATEI {*} X2724 X2741 X2824 X2841 X2924 X2941; MPRINT(TAXSCF): ARRAY ONSCHEDI {*} X7521 X7520 X7519 X7518 X7517 X7516; MPRINT(TAXSCF): ; MPRINT(TAXSCF): ARRAY LNTYPE {*} X2710 X2727 X2810 X2827 X2910 X2927; MPRINT(TAXSCF): ARRAY BUSLN {*} X6842 X6843 X6844 X6845 X6846 X6847; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTHI); 289 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): TLMTHI{I}=0; MPRINT(TAXSCF): CMOPAYI{I}=0; MPRINT(TAXSCF): PAYLFTI{I}=0; MPRINT(TAXSCF): AMTOWEI{I}=0; MPRINT(TAXSCF): AMTOWE_1I{I}=0; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): LNAGEI{I}=0; MPRINT(TAXSCF): CURBALI{I}=0; MPRINT(TAXSCF): CURBAL_1I{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): DCTDIFFI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; MPRINT(TAXSCF): AVINTEXPI{I}=0; MPRINT(TAXSCF): QUALN{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTLNINVEX=0; MPRINT(TAXSCF): QUALOANINV=0; MPRINT(TAXSCF): DO I=1 TO DIM(NMPMTI); MPRINT(TERMCON): IF (NMYRI{I}=0 & NMPMTI{I}=0) THEN DO; MPRINT(TERMCON): TLMTHI{I}=0; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRI{I}^=0|NMPMTI{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRI{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRI{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHI{I}=NMYRI{I}; MPRINT(TERMCON): IF (NMPMTI{I}=0) THEN DO; MPRINT(TERMCON): NMPMTI{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRI{I}>0) THEN DO; MPRINT(TERMCON): TLMTHI{I}=NMYRI{I}*12; MPRINT(TERMCON): IF (NMPMTI{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYFI{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMTI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFI{I}=-7) THEN DO; MPRINT(TERMCON): NMPMTI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFI{I}=8) THEN DO; MPRINT(TERMCON): NMPMTI{I}=1; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFI{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYFI{I}=1) THEN NMPMTI{I}=TLMTHI{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=2) THEN NMPMTI{I}=TLMTHI{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=3) THEN NMPMTI{I}=TLMTHI{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=4) THEN NMPMTI{I}=TLMTHI{I}; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=5) THEN NMPMTI{I}=TLMTHI{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=6) THEN NMPMTI{I}=TLMTHI{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=20) THEN NMPMTI{I}=TLMTHI{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=21) THEN NMPMTI{I}=TLMTHI{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=11) THEN NMPMTI{I}=TLMTHI{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=12) THEN NMPMTI{I}=TLMTHI{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=23) THEN NMPMTI{I}=TLMTHI{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=24) THEN NMPMTI{I}=TLMTHI{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=25) THEN NMPMTI{I}=TLMTHI{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=31) THEN NMPMTI{I}=TLMTHI{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=18) THEN NMPMTI{I}=TLMTHI{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=0) THEN NMPMTI{I}=0; 290 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (REGPAYFI{I}>.Z & REGPAYFI{I}^=-1 & REGPAYFI{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMTI{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTHI{I}= REGPAYFI{I}= NMPMTI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHI{I}>.Z & TLMTHI{I}<-2) THEN DO; MPRINT(MOCONV): NMPMTI{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTHI{I}= REGPAYFI{I}= NMPMTI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHI{I}<=.Z) THEN NMPMTI{I}=TLMTHI{I}; MPRINT(MOCONV): ELSE IF (TLMTHI{I}^=-1 & TLMTHI{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFI{I}= TLMTHI{I}= "SETTING AMT=."; MPRINT(MOCONV): NMPMTI{I}=.; MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTI{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHI{I}=-1; MPRINT(TERMCON): IF (NMYRI{I}=0) THEN DO; MPRINT(TERMCON): NMYRI{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTI{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYFI{I}; MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYFI{I}>0) THEN PFREQ=TYPAYFI{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTHI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; MPRINT(TERMCON): TLMTHI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): IF (NMPMTI{I}>0) THEN DO; MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTHI{I}=NMPMTI{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}))); MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12))); MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTHI{I}=NMPMTI{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTHI{I}=NMPMTI{I}*2/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTHI{I}=NMPMTI{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTHI{I}=NMPMTI{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTHI{I}=NMPMTI{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTHI{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): TLMTHI{I}=NMPMTI{I}; MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMTI{I}= PFREQ= TLMTHI{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}>.Z & NMPMTI{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTHI{I}=NMPMTI{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMTI{I}= PFREQ= TLMTHI{I}=; MPRINT(IMOCONV): END; 291 The SAS System 13:32 Friday, January 29, 2021 MPRINT(IMOCONV): ELSE IF (NMPMTI{I}=0) THEN TLMTHI{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}<=.Z) THEN TLMTHI{I}=NMPMTI{I}; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}^=-1 & NMPMTI{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMTI{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTHI{I}=.; MPRINT(IMOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTHI{I}>0) THEN DO; MPRINT(TERMCON): NMYRI{I}=MAX(1,INT(.5+(TLMTHI{I}/12))); MPRINT(TERMCON): TLMTHI{I}=MAX(1,ROUND(TLMTHI{I})); MPRINT(TERMCON): END; MPRINT(TERMCON): IF (NMYRI{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMTI{I}= NMYRI{I}= TLMTHI{I}= REGPAYFI{I}= REGPAYI{I}= TYPAYFI{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAYI{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYFI{I}=1) THEN CMOPAYI{I}=REGPAYI{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=2) THEN CMOPAYI{I}=REGPAYI{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=3) THEN CMOPAYI{I}=REGPAYI{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=4) THEN CMOPAYI{I}=REGPAYI{I}; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=5) THEN CMOPAYI{I}=REGPAYI{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=6) THEN CMOPAYI{I}=REGPAYI{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=20) THEN CMOPAYI{I}=REGPAYI{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=21) THEN CMOPAYI{I}=REGPAYI{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=8) THEN CMOPAYI{I}=REGPAYI{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=11) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=12) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=23) THEN CMOPAYI{I}=REGPAYI{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=24) THEN CMOPAYI{I}=REGPAYI{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=25) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=31) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=18) THEN CMOPAYI{I}=REGPAYI{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=0) THEN CMOPAYI{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}>.Z & REGPAYFI{I}^=-1 & REGPAYFI{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAYI{I}= REGPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYI{I}>.Z & REGPAYI{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAYI{I}= REGPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYI{I}<=.Z) THEN CMOPAYI{I}=REGPAYI{I}; MPRINT(MOCONV): ELSE IF (REGPAYI{I}^=-1 & REGPAYI{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFI{I}= REGPAYI{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(MOCONV): IF (TYPAYFI{I}=1) THEN CMOPAYI{I}=TYPAYI{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=2) THEN CMOPAYI{I}=TYPAYI{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=3) THEN CMOPAYI{I}=TYPAYI{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=4) THEN CMOPAYI{I}=TYPAYI{I}; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=5) THEN CMOPAYI{I}=TYPAYI{I}/3; 292 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=6) THEN CMOPAYI{I}=TYPAYI{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=20) THEN CMOPAYI{I}=TYPAYI{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=21) THEN CMOPAYI{I}=TYPAYI{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=8) THEN CMOPAYI{I}=TYPAYI{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=11) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=12) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=23) THEN CMOPAYI{I}=TYPAYI{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=24) THEN CMOPAYI{I}=TYPAYI{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=25) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=31) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=18) THEN CMOPAYI{I}=TYPAYI{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=0) THEN CMOPAYI{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}>.Z & TYPAYFI{I}^=-1 & TYPAYFI{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYI{I}= TYPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYI{I}>.Z & TYPAYI{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYI{I}= TYPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYI{I}<=.Z) THEN CMOPAYI{I}=TYPAYI{I}; MPRINT(MOCONV): ELSE IF (TYPAYI{I}^=-1 & TYPAYI{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYFI{I}= TYPAYI{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF NMYRI{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFTI{I}=(TLMTHI{I}-((2007-LNSTYRI{I})*12)); MPRINT(TAXSCF): LNAGEI{I}=TLMTHI{I}-PAYLFTI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFTI{I}=0; MPRINT(TAXSCF): LNAGEI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): DO I=1 TO MIN(6,X2709); MPRINT(TAXSCF): IF (LNTYPE{I} IN(76 78 79) & BUSLN{I} IN(0 5 8)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified loans; MPRINT(TAXSCF): QUALN{I}=1; MPRINT(TAXSCF): QUALOANINV=QUALOANINV+QUALN{I}; MPRINT(TAXSCF): IF (NMYRI{I} NOT IN(0 -1 -7) & INTRATEI{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & PAYLFTI{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAYI{I} < AMTBORRI{I}*.005) THEN CMOPAYI{I}=MAX(REGPAYI{I},TYPAYI{I}); MPRINT(TAXSCF): AMTOWEI{I}=CMOPAYI{I}*((1-1/(1+(INTRATEI{I}/10000)/12)**PAYLFTI{I})/ ((INTRATEI{I}/10000)/12)); MPRINT(TAXSCF): AMTOWE_1I{I}=CMOPAYI{I}*((1-1/(1+(INTRATEI{I}/10000)/12)**(PAYLFTI{I}+12))/ ((INTRATEI{I}/10000)/12)); MPRINT(TAXSCF): IF LNSTYRI{I}^=2007 THEN AINTEXPI{I}=(CMOPAYI{I}*12)-(AMTOWE_1I{I}-AMTOWEI{I}); MPRINT(TAXSCF): ELSE IF LNSTYRI{I}=2007 THEN AINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHI{I} < 0 | CMOPAYI{I} < 0 | PAYLFTI{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEI{I}=0; MPRINT(TAXSCF): AMTOWE_1I{I}=0; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & AMTBORRI{I} > 0 & LNAGEI{I} > 0) THEN DO; MPRINT(TAXSCF): 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); 293 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTEXPI{I}=(CMOPAYI{I}*12)-(CURBAL_1I{I}-CURBALI{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHI{I} < 0 | AMTBORRI{I} < 0 | LNAGEI{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALI{I}=0; MPRINT(TAXSCF): CURBAL_1I{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUTI{I} > 0 & INTRATEI{I} > 0) THEN SINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): ELSE SINTEXPI{I}=0; MPRINT(TAXSCF): * 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, set the interest expense to zero.; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & PAYLFTI{I}=0) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=CURBAL_1I{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=CINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & LNSTYRI{I}=2007) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTEXPI{I} < 0 | CINTEXPI{I} < 0) & CURBALI{I} > 0 & CURBAL_1I{I} > 0) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=CURBAL_1I{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=CINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTEXPI{I} < 0 | CINTEXPI{I} < 0) & (CURBALI{I} <= 0 & CURBAL_1I{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTEXPI{I} > 0 & CINTEXPI{I} > 0) THEN DCTDIFFI{I}=CINTEXPI{I}-SINTEXPI{I}; MPRINT(TAXSCF): ELSE DCTDIFFI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): CINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEI{I}=-1) THEN DO; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest expense; MPRINT(TAXSCF): IF ((CINTEXPI{I} + AINTEXPI{I} + SINTEXPI{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=(CINTEXPI{I}+AINTEXPI{I}+SINTEXPI{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTEXPI{I}=0; MPRINT(TAXSCF): * 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.; 294 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): IF (AVINTEXPI{I} > 0 & CMOPAYI{I} > 0 & (AVINTEXPI{I} > CMOPAYI{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=CMOPAYI{I}*12; MPRINT(TAXSCF): CINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): SINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AVINTEXPI{I} > 0 & AMTOUTI{I} > 0 & (AVINTEXPI{I} > .25*AMTOUTI{I})) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): CINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): * Compute loan investment interest expense; MPRINT(TAXSCF): TOTLNINVEX=TOTLNINVEX+AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Total investment interest expense, if investment interest expense is greater than interest/dividend income, then expense is limited to income amount; MPRINT(TAXSCF): TOTINTINC=X5708+X5710; MPRINT(TAXSCF): TOTINVEX=0; MPRINT(TAXSCF): TOTINVEX=TOTLOCINVEX+TOTINVPDCT+TOTLNINVEX; MPRINT(TAXSCF): IF TOTINVEX > 0 THEN HINVEX=1; MPRINT(TAXSCF): ELSE HINVEX=0; MPRINT(TAXSCF): IF TOTINVEX > TOTINTINC & Y1=YY1*10+1 THEN PUT "TOO MUCH INVESTMENT INTEREST EXPENSES " Y1= TOTINVEX= TOTLOCINVEX= TOTINVPDCT= TOTLNINVEX= TOTINTINC=/; MPRINT(TAXSCF): IF (TOTINVEX > TOTINTINC) THEN TOTINVEX=TOTINTINC; MPRINT(TAXSCF): * In 1988, 40% of personal interest is deductible, this includes credit cards, car/other vehicle loans, other consumer loans, loans against life insurance policies, home improvement loans, and non-HELOC LOCs.; MPRINT(TAXSCF): TOTPINEX=0; MPRINT(TAXSCF): **************Charitable Contributions; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): GCHARITY=(X5822=1); MPRINT(TAXSCF): CHARITYAMT=0; MPRINT(TAXSCF): IF (X5822=1 & X5823 > 0) THEN DO; MPRINT(TAXSCF): IF (X5823 > .5*AGI) & (AGI>0) THEN CHARITYAMT=.5*AGI; MPRINT(TAXSCF): ELSE CHARITYAMT=X5823; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF X5822=1 & X5823 > 0 & AGI < 0 & Y1=YY1*10+1 THEN PUT "NEGATIVE AGI BUT CHARITYAMT > 0 " Y1= X5823= CHARITYAMT= X5744= X5746= AGI=; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ITEMDEDCT_FLAG=0 THEN DO; MPRINT(TAXSCF): ADJDEDCT=0; MPRINT(TAXSCF): RESTAXM1=0; MPRINT(TAXSCF): TOTINVEX=0; MPRINT(TAXSCF): CHARITYAMT=0; MPRINT(TAXSCF): TOTPINEX=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): **********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.; MPRINT(TAXSCF): TOTITEMDCT=0; 295 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): * no limits on itemized deductions in 1988, 2012 and 2018; MPRINT(TAXSCF): * starting in 2015, itemized deduction phaseout limit for AGI are the same as for personal exemptions, so using EXLIM1-4 in this code; MPRINT(TAXSCF): TEMPITEMDCT=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); MPRINT(TAXSCF): IF TEMPITEMDCT > 0 & ((AGI <= 150500 & FILESTAT^=3) | (AGI <= 75250 & FILESTAT=3)) THEN DO; MPRINT(TAXSCF): TOTITEMDCT=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); MPRINT(TAXSCF): DEDCTLIM=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TEMPITEMDCT > 0 & DEDCTLIM^=0 THEN DO; MPRINT(TAXSCF): ITDLIM=150500*(FILESTAT^=3)+75250*(FILESTAT=3); MPRINT(TAXSCF): DEDCTLIM=1; MPRINT(TAXSCF): IWLINE1=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); MPRINT(TAXSCF): IF (IWLINE1-TOTINVEX <= 0) THEN TOTITEMDCT=IWLINE1; MPRINT(TAXSCF): ELSE IF (IWLINE1-TOTINVEX > 0) THEN DO; MPRINT(TAXSCF): IWLINE4=(IWLINE1-TOTINVEX)*.80; MPRINT(TAXSCF): IWLINE7=AGI-ITDLIM; MPRINT(TAXSCF): IWLINE8=IWLINE7*.03; MPRINT(TAXSCF): IWLINE9=MIN(IWLINE4,IWLINE8); MPRINT(TAXSCF): IWLINE10=IWLINE9/3; MPRINT(TAXSCF): IWLINE11=IWLINE9-IWLINE10; MPRINT(TAXSCF): TOTITEMDCT=IWLINE1-IWLINE11; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TEMPITEMDCT=0 THEN DEDCTLIM=0; MPRINT(TAXSCF): * NOTE: Change in worksheet for 2006; MPRINT(TAXSCF): * no limits on exemptions in 1988 and 2012, no exemptions in 2018; MPRINT(TAXSCF): TOTEXPTAMT=0; MPRINT(TAXSCF): EXPTLIM=0; MPRINT(TAXSCF): EXLIM=150500*(FILESTAT=1)+225750*(FILESTAT IN(2 5)) +112875*(FILESTAT=3)+188150*(FILESTAT=4); MPRINT(TAXSCF): EXPAGIT=122500*(FILESTAT^=3)+61250*(FILESTAT=3); MPRINT(TAXSCF): DLINE6=2500*(FILESTAT^=3)+1250*(FILESTAT=3); MPRINT(TAXSCF): IF (AGI <= EXLIM) THEN TOTEXPTAMT=TOTEXPT*3300; MPRINT(TAXSCF): ELSE IF (AGI > EXLIM) THEN DO; MPRINT(TAXSCF): EXPTLIM=1; MPRINT(TAXSCF): EWLINE2=TOTEXPT*3300; MPRINT(TAXSCF): EWLINE5=AGI-EXLIM; MPRINT(TAXSCF): IF EWLINE5 > EXPAGIT THEN TOTEXPTAMT=TOTEXPT*1100; MPRINT(TAXSCF): ELSE IF EWLINE5 <= EXPAGIT THEN DO; MPRINT(TAXSCF): EWLINE6=ROUND((EWLINE5/DLINE6),1); MPRINT(TAXSCF): EWLINE7=EWLINE6*.02; MPRINT(TAXSCF): EWLINE8=EWLINE7*EWLINE2; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Standard deduction by filing status, including addition deduction amount for over 65, dont have any info on blindness. Also compute number of age exemptions and flag nonfilers based on IRS filing thresholds and a few other assumptions. Nonfilers also cannot have negative AGI, losses from business or capital gains or more than 1/3 of the lowest filing threshold, which is married, filing separately; MPRINT(TAXSCF): BUSRENTCAPLOSS=(TBUSINC < 0 | RENTINC < 0 | CAPGLINC < 0); MPRINT(TAXSCF): HWSINCSE=(WSINCOME >= (.33*3300) | WSINCSP >= (.33*3300) | TBUSINC >= (.33*3300)); MPRINT(TAXSCF): STDDCT=0; MPRINT(TAXSCF): IF (FILESTAT=1 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=5150; MPRINT(TAXSCF): NONFILER=(0 < AGI < 8450)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=1 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=6400; MPRINT(TAXSCF): NONFILER=(0 < AGI < 9700)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; 296 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE IF (FILESTAT=2 & TUAGE < 65 & SPAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=10300; MPRINT(TAXSCF): NONFILER=(0 < AGI < 16900)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=2 & TUAGE >= 65 & SPAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=12300; MPRINT(TAXSCF): NONFILER=(0 < AGI < 18900)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=2 & (TUAGE >= 65 | SPAGE >= 65)) THEN DO; MPRINT(TAXSCF): STDDCT=11300; MPRINT(TAXSCF): NONFILER=(0 < AGI < 17900)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=5150; MPRINT(TAXSCF): NONFILER=(AGI < 3300)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=6400; MPRINT(TAXSCF): NONFILER=(AGI < 3300)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=4 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=7550; MPRINT(TAXSCF): NONFILER=(0 < AGI < 10850)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=4 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=8800; MPRINT(TAXSCF): NONFILER=(0 < AGI < 12100)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=5 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=10300; MPRINT(TAXSCF): NONFILER=(AGI < 13600)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=5 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=11300; MPRINT(TAXSCF): NONFILER=(0 < AGI < 14600)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): AGEXMP=(TUAGE > 65) + (SPAGE > 65)*(FILESTAT=2); MPRINT(TAXSCF): * Did the hh itemize; MPRINT(TAXSCF): * No itemization question in 1989 or 1992, so itemize will be zero; MPRINT(TAXSCF): ITEMIZE=(TAXUNIT=0)*(X7367=1 | X7368=1 | X7369=1)+(TAXUNIT=1)*(X7368=1)+(TAXUNIT=2)*(X7369=1); MPRINT(TAXSCF): CITEMIZE=(TOTITEMDCT => STDDCT); MPRINT(TAXSCF): * Construct other variables needed for TAXSIM; MPRINT(TAXSCF): TAXUNITID=Y1*100+TAXUNIT; MPRINT(TAXSCF): YEAR=2006; MPRINT(TAXSCF): AGECL=1*(TUAGE < 26)+2*(26<=TUAGE<35)+3*(35<=TUAGE<45) +4*(45<=TUAGE<55)+5*(55<=TUAGE<65)+6*(TUAGE>=65); MPRINT(TAXSCF): * 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).; MPRINT(TAXSCF): STCAPINC=0; MPRINT(TAXSCF): LTCAPINC=0; MPRINT(TAXSCF): IF (AGICL IN(1)) THEN DO; MPRINT(TAXSCF): IF (CAPGLINC > 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.88; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.88); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (CAPGLINC < 0) THEN DO; 297 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.66; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.66); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AGICL IN(2)) THEN DO; MPRINT(TAXSCF): IF (CAPGLINC > 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.90; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.90); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (CAPGLINC < 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.66; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.66); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AGICL IN(3)) THEN DO; MPRINT(TAXSCF): IF (CAPGLINC > 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.94; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.94); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (CAPGLINC < 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.57; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.57); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ARRAY NEG_1 {*} TBUSINC OTHINC RENTINC OTHPINC; MPRINT(TAXSCF): DO I=1 TO DIM(NEG_1); MPRINT(TAXSCF): IF NEG_1{I}=-1 THEN NEG_1{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): UNADJTOTDEDCT=MAX(0,(ADJDEDCT+TOTINVEX+CHARITYAMT)); MPRINT(TAXSCF): CHCAREXP=0; MPRINT(TAXSCF): TINCOME=WSINCOME+WSINCSP+TBUSINC+INTINC+NTAXINC+DIVINC+CAPGLINC+RENTINC +UNEMPINC+GSSINC+PENINC+AFDCINC+OTHINC; MPRINT(TAXSCF): TOTXINC=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC +UNEMPINC+GSSINC+PENINC+OTHINC; MPRINT(TAXSCF): *set 3000 max loss for capital gains for comparison with IRS estimates; MPRINT(TAXSCF): IF CAPGLINC < -3000 THEN CAPGL3K=-3000; MPRINT(TAXSCF): ELSE CAPGL3K=CAPGLINC; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (TOTXINC=0 & TINCOME > 0 & AFDCINC=0 & NTAXINC=0 & TAXUNIT < 3 & Y1=YY1*10+1) THEN PUT "TOTXINC IS ZERO BUT TINCOME > 0 " YY1= Y1= TOTXINC= TINCOME= WSINCOME= WSINCSP= TBUSINC= INTINC= NTAXINC= DIVINC= RENTINC= UNEMPINC= AFDCINC= GSSINC= PENINC= OTHINC= CAPGLINC= RAGE= SPAGE= FILESTAT= TAXUNIT= X4100= X4700=/; MPRINT(TAXSCF): * Adding in payroll tax liability and mtr, assuming employee pays both employee and employer share, and 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 earning 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 tax year, 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 caculate the payroll liability and mtr. Computing the payroll atr in a similar fashion. NOTE: Need to adjust for different amounts used to compute the mtr, initially computing payroll mtr for adding $1 to earnings.; MPRINT(TAXSCF): * Need to adjust for 1988, 2% credit for SE, in 1991, limit on medicare tax; MPRINT(TAXSCF): ** earnings from wages and businesses for head and spouse/parnter; MPRINT(TAXSCF): REARN=R_LABORINC+R_BUSINC; MPRINT(TAXSCF): SPEARN=SP_LABORINC+SP_BUSINC; 298 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): HHEARN=REARN+SPEARN; MPRINT(TAXSCF): TWSINC=WSINCOME+WSINCSP; MPRINT(TAXSCF): PAYROLLIAB=0; MPRINT(TAXSCF): PAYROLLMTR=0; MPRINT(TAXSCF): PAYROLLATR=0; MPRINT(TAXSCF): IF TAXUNIT=0 THEN DO; MPRINT(TAXSCF): IF (X4106 IN(1 2 3 4 -7) & X4706=0) | (X4106=0 & X4706 IN(1 2 3 4 -7)) | (X4106=0 & X4706=0 & X102=0 & (TWSINC > 0 | TBUSINC > 0)) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(94200,(TWSINC+TBUSINC*(TBUSINC >0)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*.029)*(2007 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*.029)*(2007 EQ 1992); MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 94200)*(100*.124))+ (100*.029)*(2007 GE 1995)+ (100*.029)*(2007 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB >0) THEN PAYROLLATR=100*(PAYROLLIAB/(TWSINC+TBUSINC*(TBUSINC > 0))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X4106 IN(1 2 3 4 -7) & X4706 IN(1 2 3 4 -7)) THEN DO; MPRINT(TAXSCF): IF (X4115 >=1 & X4715 >=1 & HHEARN > 0) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(94200,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(REARN/HHEARN))*.029*(2007 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*(REARN/HHEARN))*.029*(2007 EQ 1992)+ MIN(94200,((TWSINC+TBUSINC*(TBUSINC >0))*(SPEARN/HHEARN)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(SPEARN/HHEARN))*.029*(2007 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*(SPEARN/HHEARN))*.029*(2007 EQ 1992); MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(REARN/HHEARN) <= 94200)*(100*.124))+(100*.029)*(2007 GE 1995)+ (100*.029)*(2007 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1)*(REARN/HHEARN) <= 125000); MPRINT(TAXSCF): IF ((MIN(94200,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(REARN/HHEARN))*.029) > 0) THEN PAYROLLATR=100*((MIN(94200,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*.124 + ((2007 GE 1995)*((TWSINC+TBUSINC*(TBUSINC >0))*(REARN/HHEARN))*.029)+ ((2007 EQ 1992)*(MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*(REARN/HHEARN))*.029))/ ((TWSINC+TBUSINC*(TBUSINC > 0))*(REARN/HHEARN))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X4115 =-1 & X4715=-1) | (X4115 >=1 & X4715=-1) | (X4115=-1 & X4715 >=1) | (HHEARN=0) THEN DO; MPRINT(TAXSCF): IF ((TWSINC+TBUSINC*(TBUSINC >0)) <= 94200) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=(TWSINC+TBUSINC*(TBUSINC >0))*.124+ (TWSINC+TBUSINC*(TBUSINC >0))*.029; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((TWSINC+TBUSINC*(TBUSINC >0)) > 94200) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(2*94200,((TWSINC+TBUSINC*(TBUSINC >0))))*.124+ (TWSINC+TBUSINC*(TBUSINC >0))*.029*(2007 GE 1995)+ MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*.029*(2007 EQ 1992); MPRINT(TAXSCF): END; MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(.5) <= 94200)*(100*.124))+(100*.029)*(2007 GE 1995)+ (100*.029)*(2007 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB*.5 > 0) THEN PAYROLLATR=100*((PAYROLLIAB*.5)/((TWSINC+TBUSINC*(TBUSINC >0))*(.5))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X4106=0 & X4706=0 & X102^=0 & (TWSINC > 0 | TBUSINC > 0)) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=2*(MIN(94200,((TWSINC+TBUSINC*(TBUSINC >0))*(.5)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(.5))*.029*(2007 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)*(.5)))*.029)*(2007 EQ 1992)); MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(.5) <= 94200)*(100*.124))+(100*.029)*(2007 GE 1995)+ (100*.029)*(2007 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB*.5 > 0) THEN PAYROLLATR=100*((PAYROLLIAB*.5)/((TWSINC+TBUSINC*(TBUSINC >0))*(.5))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TAXUNIT >= 1 THEN DO; MPRINT(TAXSCF): IF (WSINCOME > 0 | TBUSINC > 0) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(94200,(WSINCOME+TBUSINC*(TBUSINC >0)))*.124 + ((WSINCOME+TBUSINC*(TBUSINC >0))*.029)*(2007 GE 1995)+ (MIN(125000,(WSINCOME+TBUSINC*(TBUSINC >0)))*.029)*(2007 EQ 1992); MPRINT(TAXSCF): PAYROLLMTR=(((WSINCOME+TBUSINC*(TBUSINC > 0)+1)<=94200)*(100*.124))+ (100*.029)*(2007 GE 1995)+ (100*.029)*(2007 EQ 1992)*((WSINCOME+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB >0) THEN PAYROLLATR=100*(PAYROLLIAB/(WSINCOME+TBUSINC*(TBUSINC > 0))); MPRINT(TAXSCF): END; 299 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF PAYROLLIAB=0 & PAYROLLMTR=0 & PAYROLLATR=0 & (TWSINC > 0 | TBUSINC > 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= TWSINC= TBUSINC= R_LABORINC= R_BUSINC= R_SOLEPROP= SP_LABORINC= SP_BUSINC= SP_SOLEPROP= REARN= SPEARN= HHEARN= TAXUNIT=/; MPRINT(TAXSCF): * Check for missing variables; MPRINT(TAXSCF): ARRAY CHVARS {*} YY1 Y1 CHARITYAMT X5823 TOTITEMDCT STDDCT AGI AGICL AGIGE50K DEDCTLIM X7372 X7018 X8023 X105 PERSEXP KIDS TOTEXPT FILESTAT TOTEXPTAMT EXPTLIM RAGE SPAGE TUAGE YEAR STATE TAXUNIT WSINCOME WSINCSP TBUSINC NTAXINC INTINC DIVINC CAPGLINC RENTINC UNEMPINC CHSPALINC AFDCINC PENINC OTHINC GSSINC OTHPINC NONTAX RENT UNADJTOTDEDCT CHCAREXP TINCOME TOTXINC STCAPINC LTCAPINC PAYROLLIAB PAYROLLMTR PAYROLLATR LWP KIDSU17 KIDSU18 KIDSU13; MPRINT(TAXSCF): DO I=1 TO DIM(CHVARS); MPRINT(TAXSCF): IF CHVARS{I}=. THEN PUT "MISSING VALUE FOR " Y1= CHVARS{I}=; MPRINT(TAXSCF): END; MPRINT(TAXSCF): RUN; NOTE: The file "null.txt" is: Filename=/disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code/null.txt, Owner Name=taxsim,Group Name=taxsim, Access Permission=-rw-r--r--, Last Modified=29Jan2021:13:34:29 ERR CANNOT TRANSLATE PER FOR y1=30491 x1013=200 x1014=22 CMOPAYM3=. ERR CANNOT TRANSLATE PER FOR y1=30492 x1013=200 x1014=22 CMOPAYM3=. ERR CANNOT TRANSLATE PER FOR y1=30493 x1013=200 x1014=22 CMOPAYM3=. ERR CANNOT TRANSLATE PER FOR y1=30494 x1013=200 x1014=22 CMOPAYM3=. ERR CANNOT TRANSLATE PER FOR y1=30495 x1013=200 x1014=22 CMOPAYM3=. NOTE: 804 records were written to the file "null.txt". The minimum record length was 0. The maximum record length was 374. NOTE: Missing values were generated as a result of performing an operation on missing values. Each place is given by: (Number of times) at (Line):(Column). 5 at 3882:190 NOTE: There were 26480 observations read from the data set WORK.SCF. NOTE: The data set WORK.SCF has 26480 observations and 6176 variables. NOTE: DATA statement used (Total process time): real time 0.84 seconds cpu time 0.83 seconds MPRINT(TAXSCF): * Create a dataset for full TAXSIM. Breaking out total itemized deductions into its parts - have applied the limits for the mortgage interest deduction and investment interest expense, but not for charitable contributions.; MPRINT(TAXSCF): PROC SORT DATA=SCF; MPRINT(TAXSCF): BY TAXUNITID; MPRINT(TAXSCF): RUN; NOTE: There were 26480 observations read from the data set WORK.SCF. NOTE: The data set WORK.SCF has 26480 observations and 6176 variables. NOTE: PROCEDURE SORT used (Total process time): real time 0.52 seconds cpu time 0.53 seconds 300 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): proc means; MPRINT(TAXSCF): var y1 yy1 year year; MPRINT(TAXSCF): run; NOTE: There were 26480 observations read from the data set WORK.SCF. NOTE: The PROCEDURE MEANS printed page 458. NOTE: PROCEDURE MEANS used (Total process time): real time 0.07 seconds cpu time 0.07 seconds MPRINT(TAXSCF): * Rename variables to TAXSIM names, use lowercase for TAXSIM file names; MPRINT(TAXSCF): libname swt "../swt/sas"; NOTE: Libref SWT was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/swt/sas MPRINT(TAXSCF): DATA swt.swt07; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): rep=mod(y1,10); MPRINT(TAXSCF): * IF FILESTAT > 0; MPRINT(TAXSCF): mstat=1*(FILESTAT IN(1 4))+2*(FILESTAT IN(2 5))+6*(FILESTAT IN(3)); MPRINT(TAXSCF): otherprop=RENTINC+TBUSINC; MPRINT(TAXSCF): nonprop=CHSPALINC+OTHINC; MPRINT(TAXSCF): otheritem=TOTINVEX+TOTPINEX; MPRINT(TAXSCF): mortgage=ADJDEDCT+X5823; MPRINT(TAXSCF): scorp=0; MPRINT(TAXSCF): pbusinc=0; MPRINT(TAXSCF): pprofinc=0; MPRINT(TAXSCF): sbusinc=0; MPRINT(TAXSCF): sprofinc=0; MPRINT(TAXSCF): tyear=YEAR; MPRINT(TAXSCF): tstate=STATE; MPRINT(TAXSCF): * set idtl=2 to get detailed output from TAXSIM; MPRINT(TAXSCF): idtl=2; MPRINT(TAXSCF): DROP STATE; MPRINT(TAXSCF): RENAME TAXUNITID=taxsimid TUAGE=page SPAGE=sage KIDS=depx KIDSU13=dep13 KIDSU17=dep17 KIDSU18=dep18 WSINCOME=pwages WSINCSP=swages DIVINC=dividends INTINC=intrec STCAPINC=stcg LTCAPINC=ltcg PENINC=pensions GSSINC=gssi UNEMPINC=ui AFDCINC=transfers RENT=rentpaid RESTAXM1=proptax CHCAREXP=childcare tyear=year; MPRINT(TAXSCF): RUN; WARNING: Variable tyear cannot be renamed to year because year already exists. NOTE: There were 26480 observations read from the data set WORK.SCF. NOTE: The data set SWT.SWT07 has 26480 observations and 6189 variables. NOTE: DATA statement used (Total process time): real time 7.03 seconds cpu time 0.96 seconds MPRINT(TAXSCF): proc means; MPRINT(TAXSCF): var y1 yy1 year; MPRINT(TAXSCF): run; NOTE: There were 26480 observations read from the data set SWT.SWT07. NOTE: The PROCEDURE MEANS printed page 459. NOTE: PROCEDURE MEANS used (Total process time): real time 6.88 seconds cpu time 0.42 seconds 301 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): libname taxsim "../txpydata/sas"; NOTE: Libref TAXSIM was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/txpydata/sas MPRINT(TAXSCF): proc contents data=swt.swt07; MPRINT(TAXSCF): run; NOTE: PROCEDURE CONTENTS used (Total process time): real time 0.01 seconds cpu time 0.01 seconds NOTE: The PROCEDURE CONTENTS printed pages 460-579. MPRINT(TAXSCF): DATA taxsim.txpydata07; MPRINT(TAXSCF): SET swt.swt07(KEEP=taxsimid year mstat page sage depx dep13 dep17 dep18 pwages swages dividends intrec stcg ltcg otherprop nonprop pensions gssi ui transfers rentpaid proptax otheritem childcare mortgage scorp pbusinc pprofinc sbusinc sprofinc Y1 YY1 taxunit rep); MPRINT(TAXSCF): y1=Y1; MPRINT(TAXSCF): yy1=YY1; MPRINT(TAXSCF): RUN; NOTE: There were 26480 observations read from the data set SWT.SWT07. NOTE: The data set TAXSIM.TXPYDATA07 has 26480 observations and 35 variables. NOTE: DATA statement used (Total process time): real time 0.19 seconds cpu time 0.09 seconds MPRINT(TAXSCF): proc contents data=taxsim.txpydata07; MPRINT(TAXSCF): run; NOTE: PROCEDURE CONTENTS used (Total process time): real time 0.01 seconds cpu time 0.01 seconds NOTE: The PROCEDURE CONTENTS printed pages 580-581. 3883 3884 %TAXSCF(SYEAR=2004,TYEAR=2003,WYEAR=2001,ITDLIM1=139500,ITDLIM2=69750,ITDL10=0,EXPAMT=3050, 3885 EXPAMT2=0,EXDL9=0,EXPAGIT1=122500,EXPAGIT2=61250,EXLIM1=139500,EXLIM2=209250, 3886 EXLIM3=104625,EXLIM4=174400,STDAMT1=4750,STDAMT2=5900,STDAMT3=9500,STDAMT4=10450, 3887 STDAMT5=11400,STDAMT6=7000,STDAMT7=8150,FILELIM1=7800,FILELIM2=8950,FILELIM3=15600,FILELIM4=16550, 3888 FILELIM5=17500,FILELIM6=3030,FILELIM7=10050,FILELIM8=11200,FILELIM9=12550,FILELIM10=13500,LCGAGI1=.86, 3889 LCLAGI1=.66,LCGAGI2=.89,LCLAGI2=.67,LCGAGI3=.94,LCLAGI3=.59,PAYTAX=.124,MEDHI=.029, MPRINT(TAXSCF): * define libraries for SCF public datasets; 3890 PTLIM=87000,HTAXFILE=HTAXFILE=&SYSPARM); MPRINT(TAXSCF): LIBNAME SCF04 "../orig/sas7bdat" ACCESS=READONLY; NOTE: Libref SCF04 refers to the same physical library as SCF07. NOTE: Libref SCF04 was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/orig/sas7bdat MPRINT(TAXSCF): * directory for datasets created by the program; MPRINT(TAXSCF): LIBNAME OUT "."; NOTE: Libref OUT was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code MPRINT(TAXSCF): * csv file for TAXSIM v32; 302 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): FILENAME SCFTAX "txpydata04.csv"; MPRINT(TAXSCF): * csv from TAXSIM v32; MPRINT(TAXSCF): FILENAME TAXSIM "results04.csv"; MPRINT(TAXSCF): * read in public SCF data, assumes dataset name is pXXiY.sas7bdat; MPRINT(TAXSCF): * NOTE: Any changes to the libname or data set name must also be made in this data step; MPRINT(TAXSCF): DATA MAIN; MPRINT(TAXSCF): SET SCF04.P04I6; NOTE: Data file SCF04.P04I6.DATA is in a format that is native to another host, or the file encoding does not match the session encoding. Cross Environment Data Access will be used, which might require additional CPU resources and might reduce performance. MPRINT(TAXSCF): RUN; NOTE: There were 22595 observations read from the data set SCF04.P04I6. NOTE: The data set WORK.MAIN has 22595 observations and 5685 variables. NOTE: DATA statement used (Total process time): real time 5.12 seconds cpu time 5.14 seconds MPRINT(TAXSCF): PROC SORT DATA=MAIN; MPRINT(TAXSCF): BY Y1; MPRINT(TAXSCF): RUN; NOTE: There were 22595 observations read from the data set WORK.MAIN. NOTE: The data set WORK.MAIN has 22595 observations and 5685 variables. NOTE: PROCEDURE SORT used (Total process time): real time 0.39 seconds cpu time 0.39 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET MAIN; MPRINT(TAXSCF): file "null.txt"; MPRINT(TAXSCF): WGT=(X42001/5); MPRINT(TAXSCF): POP=1; MPRINT(TAXSCF): * setting STATE variable to zero, set to -1 if you want TAXSIM to compute state tax for all 51 states; MPRINT(TAXSCF): STATE=0; MPRINT(TAXSCF): * Small data fix for one case in 1992; MPRINT(TAXSCF): * Small data fix for one case in 1998; MPRINT(TAXSCF): * Small data fix for one case in 2007; MPRINT(TAXSCF): * Small data fix for one case in 2013; MPRINT(TAXSCF): * Payment frequency on other loans not asked in 1989, assumed to be monthly; MPRINT(TAXSCF): * Only one other income variable after 1992, set to zero for 1992 forward; MPRINT(TAXSCF): X5726=0; MPRINT(TAXSCF): X5727=0; MPRINT(TAXSCF): * Spouse/partner in PEU, need to create X7020 for 1989 to 1998; MPRINT(TAXSCF): * A few other recodes to construct variables not asked in 1989 and 1992; MPRINT(TAXSCF): * Number of years with spouse/partner; MPRINT(TAXSCF): IF 2004=X8005 THEN X7370=-1; MPRINT(TAXSCF): ELSE X7370=2004-X8005; MPRINT(TAXSCF): * Number of people in NPEU, need to compute for 1989 to 2004, variable exists for 2007 forward; MPRINT(TAXSCF): X7050=X101-X7001; MPRINT(TAXSCF): * Absent spouse/partner indicator; MPRINT(TAXSCF): IF (X100=5) | (X106=5 & X107 IN(2 5 12)) THEN ABSP_P=1; MPRINT(TAXSCF): ELSE ABSP_P=0; MPRINT(TAXSCF): PERSEXP=1+(X105 IN(1 2))*(ABSP_P=0); MPRINT(TAXSCF): * Including children living elsewhere that are under 18, max of one extra as there is uncertainty about dependent status; 303 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): 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) + (X5912 > 0 | X5912=-2); MPRINT(TAXSCF): * For the child tax credit - must be under 17; MPRINT(TAXSCF): 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) ; MPRINT(TAXSCF): KIDSU18=(X108 IN(4 13))*(X110 < 18) + (X114 IN(4 13))*(X116 < 18) + (X120 IN(4 13))*(X122 < 18) + (X126 IN(4 13))*(X128 < 18) + (X132 IN(4 13))*(X134 < 18) + (X202 IN(4 13))*(X204 < 18) + (X208 IN(4 13))*(X210 < 18) + (X214 IN(4 13))*(X216 < 18) + (X220 IN(4 13))*(X222 < 18) ; MPRINT(TAXSCF): KIDSU13=(X108 IN(4 13))*(X110 < 13) + (X114 IN(4 13))*(X116 < 13) + (X120 IN(4 13))*(X122 < 13) + (X126 IN(4 13))*(X128 < 13) + (X132 IN(4 13))*(X134 < 13) + (X202 IN(4 13))*(X204 < 13) + (X208 IN(4 13))*(X210 < 13) + (X214 IN(4 13))*(X216 < 13) + (X220 IN(4 13))*(X222 < 13) ; MPRINT(TAXSCF): * Indicator for R living with a partner; MPRINT(TAXSCF): LWP=(X8023=2); MPRINT(TAXSCF): RAGE=X14; MPRINT(TAXSCF): * Set spouse/parnter age to zero if absent spouse/partner; MPRINT(TAXSCF): SPAGE=X19*(X7020=2); MPRINT(TAXSCF): * Possible scenarios, not considering NPEU right now, will create those tax units last 1. Married filing jointly households = tax unit 2. Single person households = tax unit 3. Filing separately households = split into two tax units, need to determine if single or married filing separately filing status 4. LWP households = split into two tax units even if one person is a nonfiler For 3. and 4., one of the tax units may have head of household status depending on presence of children For each new tax unit, start with replicate of household data and parse out income, deductions, exemptions; MPRINT(TAXSCF): * Create new observations from married filing separately households or LWP households. 0. Tax unit = household 1. Created tax unit for household head 2. Created tax unit for spouse/parnter 3-8. Created tax unit for NPEU member Note: If R and Sp are legally married for more than one year, treat as married filing joint even if x5746=3,4. If R and Sp LWP and report filing jointly treat as two tax units. If R and Sp married and report filing separately, treat as filing jointly unless either R or Sp has a past marriage. Inspection of the data reveals that too many married couples report filing separately when compared to the IRS data. The past marriage condition put the number closer to the IRS data.; MPRINT(TAXSCF): MARRIED=(X8023=1 & X105=1 & X7370 >= 1 & X7020=2); MPRINT(TAXSCF): IF (X5744 IN(1 6) & X5746=1 & MARRIED=1) | (MARRIED=1 & ((X5744=5 | X5746 IN(3 4)) | (X5746=2 & X7377^=2 & X7392^=2))) | (X8023 > 0 & X105=0 & (X5744=5 | (X5744 IN(1 6) & X5746=0))) | (X8023 > 0 & X105 > 0 & X5744 IN(1 5 6) & X5746=0 & X7020=1) | (X8023=8 & X105=0 & X5744=1 & X5746=1) THEN TAXUNIT=0; MPRINT(TAXSCF): ELSE IF (X5744 IN(1 6) & X5746 IN(2 3 4)) | (X8023 > 0 & X105 > 0 & (X5744=5 | (X5744 IN(1 6) & X5746 IN(0 1)))) | (X8023=1 & X105=1 & X7370=-1 & X5744=1) THEN TAXUNIT=1; MPRINT(TAXSCF): ELSE PUT "MISSING TAXUNIT STATUS " YY1= X5744= X5746= X8023= X105= X7020= MARRIED= X7372= X7018= X7370=; MPRINT(TAXSCF): TUAGE=RAGE; MPRINT(TAXSCF): RUN; NOTE: The file "null.txt" is: Filename=/disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code/null.txt, Owner Name=taxsim,Group Name=taxsim, Access Permission=-rw-r--r--, Last Modified=29Jan2021:13:34:50 NOTE: 0 records were written to the file "null.txt". NOTE: There were 22595 observations read from the data set WORK.MAIN. NOTE: The data set WORK.SCF has 22595 observations and 5704 variables. NOTE: DATA statement used (Total process time): real time 0.52 seconds cpu time 0.52 seconds MPRINT(TAXSCF): DATA NEWUNITS; MPRINT(TAXSCF): SET SCF; 304 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): IF TAXUNIT=1; MPRINT(TAXSCF): TAXUNIT=2; MPRINT(TAXSCF): TUAGE=SPAGE; MPRINT(TAXSCF): SPAGE=0; MPRINT(TAXSCF): RUN; NOTE: There were 22595 observations read from the data set WORK.SCF. NOTE: The data set WORK.NEWUNITS has 2021 observations and 5704 variables. NOTE: DATA statement used (Total process time): real time 0.23 seconds cpu time 0.24 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF NEWUNITS; MPRINT(TAXSCF): RUN; NOTE: There were 22595 observations read from the data set WORK.SCF. NOTE: There were 2021 observations read from the data set WORK.NEWUNITS. NOTE: The data set WORK.SCF has 24616 observations and 5704 variables. NOTE: DATA statement used (Total process time): real time 0.52 seconds cpu time 0.52 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): * Codes for filestat, assigning status even if did not file, will determine non-filer status later, filing status for split tax units done after splitting up income 1= Single 2= Married filing jointly 3= Married filing separately 4= Head of HH 5= Qualified widower; MPRINT(TAXSCF): FILESTAT=0; MPRINT(TAXSCF): IF TAXUNIT=0 THEN DO; MPRINT(TAXSCF): IF (MARRIED=1) THEN FILESTAT=2; MPRINT(TAXSCF): ELSE IF MARRIED=0 THEN DO; MPRINT(TAXSCF): IF PERSEXP=1 & KIDS=0 THEN FILESTAT=1; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS > 0 & X8023=5 & X7372=5 & X8007>=2001 THEN FILESTAT=5; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS > 0 THEN FILESTAT=4; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTEXPT=PERSEXP+KIDS; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * No AGI variables starting in 2010; MPRINT(TAXSCF): * Coding income variables with -1 and -2 to zero; MPRINT(TAXSCF): ARRAY NEG {*} X5704 X5714 X5724 X5726 X5729; MPRINT(TAXSCF): DO I=1 TO DIM(NEG); MPRINT(TAXSCF): IF NEG{I} IN(-2 -1) THEN NEG{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Income from wages and business; MPRINT(TAXSCF): R_LABORINC=MAX(0,X4112) MPRINT(ACONV): *((X4113=2)*52.18+(X4113=3)*26.09+(X4113=4)*12+(X4113=5)*4+(X4113=6)+(X4113=8)+ (X4113=11)*2+(X4113=12)*6+(X4113=31)*24+(X4113=14)+(X4113=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): SP_LABORINC=MAX(0,X4712) MPRINT(ACONV): *((X4713=2)*52.18+(X4713=3)*26.09+(X4713=4)*12+(X4713=5)*4+(X4713=6)+(X4713=8)+ (X4713=11)*2+(X4713=12)*6+(X4713=31)*24+(X4713=14)+(X4713=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): R_BUSINC=MAX(0,X4131) MPRINT(ACONV): *((X4132=2)*52.18+(X4132=3)*26.09+(X4132=4)*12+(X4132=5)*4+(X4132=6)+(X4132=8)+ (X4132=11)*2+(X4132=12)*6+(X4132=31)*24+(X4132=14)+(X4132=22)) 305 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ; MPRINT(TAXSCF): SP_BUSINC=MAX(0,X4731) MPRINT(ACONV): *((X4732=2)*52.18+(X4732=3)*26.09+(X4732=4)*12+(X4732=5)*4+(X4732=6)+(X4732=8)+ (X4732=11)*2+(X4732=12)*6+(X4732=31)*24+(X4732=14)+(X4732=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): * Income from pensions and tax-deferred account withdrawals. No withdrawal information for IRAs or future pensions prior to 2004. No withdrawal information for any tax-deferred accounts, aside from other income, prior to 2001; MPRINT(TAXSCF): R_REGPEN=MAX(0,(X5318 MPRINT(ACONV): *((X5319=2)*52.18+(X5319=3)*26.09+(X5319=4)*12+(X5319=5)*4+(X5319=6)+(X5319=8)+ (X5319=11)*2+(X5319=12)*6+(X5319=31)*24+(X5319=14)+(X5319=22)) MPRINT(TAXSCF): *(X5315=1)*(X5317>=1))) +MAX(0,(X5326 MPRINT(ACONV): *((X5327=2)*52.18+(X5327=3)*26.09+(X5327=4)*12+(X5327=5)*4+(X5327=6)+(X5327=8)+ (X5327=11)*2+(X5327=12)*6+(X5327=31)*24+(X5327=14)+(X5327=22)) MPRINT(TAXSCF): *(X5323=1)*(X5325>=1))) +MAX(0,(X5334 MPRINT(ACONV): *((X5335=2)*52.18+(X5335=3)*26.09+(X5335=4)*12+(X5335=5)*4+(X5335=6)+(X5335=8)+ (X5335=11)*2+(X5335=12)*6+(X5335=31)*24+(X5335=14)+(X5335=22)) MPRINT(TAXSCF): *(X5331=1)*(X5333>=1))) +MAX(0,(X5418 MPRINT(ACONV): *((X5419=2)*52.18+(X5419=3)*26.09+(X5419=4)*12+(X5419=5)*4+(X5419=6)+(X5419=8)+ (X5419=11)*2+(X5419=12)*6+(X5419=31)*24+(X5419=14)+(X5419=22)) MPRINT(TAXSCF): *(X5415=1)*(X5417>=1))) +MAX(0,(X5426 MPRINT(ACONV): *((X5427=2)*52.18+(X5427=3)*26.09+(X5427=4)*12+(X5427=5)*4+(X5427=6)+(X5427=8)+ (X5427=11)*2+(X5427=12)*6+(X5427=31)*24+(X5427=14)+(X5427=22)) MPRINT(TAXSCF): *(X5423=1)*(X5425>=1))) +MAX(0,(X5434 MPRINT(ACONV): *((X5435=2)*52.18+(X5435=3)*26.09+(X5435=4)*12+(X5435=5)*4+(X5435=6)+(X5435=8)+ (X5435=11)*2+(X5435=12)*6+(X5435=31)*24+(X5435=14)+(X5435=22)) MPRINT(TAXSCF): *(X5431=1)*(X5433>=1))); MPRINT(TAXSCF): R_WITHDRAW=X6558+(X6574*.5)+MAX(0,(X6464 MPRINT(ACONV): *((X6465=2)*52.18+(X6465=3)*26.09+(X6465=4)*12+(X6465=5)*4+(X6465=6)+(X6465=8)+ (X6465=11)*2+(X6465=12)*6+(X6465=31)*24+(X6465=14)+(X6465=22)) MPRINT(TAXSCF): *(X5315=1))) +MAX(0,(X6469 MPRINT(ACONV): *((X6470=2)*52.18+(X6470=3)*26.09+(X6470=4)*12+(X6470=5)*4+(X6470=6)+(X6470=8)+ (X6470=11)*2+(X6470=12)*6+(X6470=31)*24+(X6470=14)+(X6470=22)) MPRINT(TAXSCF): *(X5323=1)))+MAX(0,(X6474 MPRINT(ACONV): *((X6475=2)*52.18+(X6475=3)*26.09+(X6475=4)*12+(X6475=5)*4+(X6475=6)+(X6475=8)+ (X6475=11)*2+(X6475=12)*6+(X6475=31)*24+(X6475=14)+(X6475=22)) MPRINT(TAXSCF): *(X5331=1))) +MAX(0,(X6479 MPRINT(ACONV): *((X6480=2)*52.18+(X6480=3)*26.09+(X6480=4)*12+(X6480=5)*4+(X6480=6)+(X6480=8)+ (X6480=11)*2+(X6480=12)*6+(X6480=31)*24+(X6480=14)+(X6480=22)) MPRINT(TAXSCF): *(X5415=1)))+MAX(0,(X6484 MPRINT(ACONV): *((X6485=2)*52.18+(X6485=3)*26.09+(X6485=4)*12+(X6485=5)*4+(X6485=6)+(X6485=8)+ (X6485=11)*2+(X6485=12)*6+(X6485=31)*24+(X6485=14)+(X6485=22)) MPRINT(TAXSCF): *(X5423=1))) +MAX(0,(X6489 MPRINT(ACONV): *((X6490=2)*52.18+(X6490=3)*26.09+(X6490=4)*12+(X6490=5)*4+(X6490=6)+(X6490=8)+ (X6490=11)*2+(X6490=12)*6+(X6490=31)*24+(X6490=14)+(X6490=22)) MPRINT(TAXSCF): *(X5431=1)))+MAX(0,(X6965 MPRINT(ACONV): *((X6966=2)*52.18+(X6966=3)*26.09+(X6966=4)*12+(X6966=5)*4+(X6966=6)+(X6966=8)+ (X6966=11)*2+(X6966=12)*6+(X6966=31)*24+(X6966=14)+(X6966=22)) MPRINT(TAXSCF): *(X5606=1))) +MAX(0,(X6971 MPRINT(ACONV): *((X6972=2)*52.18+(X6972=3)*26.09+(X6972=4)*12+(X6972=5)*4+(X6972=6)+(X6972=8)+ (X6972=11)*2+(X6972=12)*6+(X6972=31)*24+(X6972=14)+(X6972=22)) MPRINT(TAXSCF): *(X5614=1)))+MAX(0,(X6977 MPRINT(ACONV): *((X6978=2)*52.18+(X6978=3)*26.09+(X6978=4)*12+(X6978=5)*4+(X6978=6)+(X6978=8)+ (X6978=11)*2+(X6978=12)*6+(X6978=31)*24+(X6978=14)+(X6978=22)) MPRINT(TAXSCF): *(X5622=1))) +MAX(0,(X6983 MPRINT(ACONV): *((X6984=2)*52.18+(X6984=3)*26.09+(X6984=4)*12+(X6984=5)*4+(X6984=6)+(X6984=8)+ (X6984=11)*2+(X6984=12)*6+(X6984=31)*24+(X6984=14)+(X6984=22)) MPRINT(TAXSCF): *(X5630=1)))+MAX(0,(X6989 306 The SAS System 13:32 Friday, January 29, 2021 MPRINT(ACONV): *((X6990=2)*52.18+(X6990=3)*26.09+(X6990=4)*12+(X6990=5)*4+(X6990=6)+(X6990=8)+ (X6990=11)*2+(X6990=12)*6+(X6990=31)*24+(X6990=14)+(X6990=22)) MPRINT(TAXSCF): *(X5638=1))) +MAX(0,(X6995 MPRINT(ACONV): *((X6996=2)*52.18+(X6996=3)*26.09+(X6996=4)*12+(X6996=5)*4+(X6996=6)+(X6996=8)+ (X6996=11)*2+(X6996=12)*6+(X6996=31)*24+(X6996=14)+(X6996=22)) MPRINT(TAXSCF): *(X5646=1)))+(X5724)*(X5725=11)*.5; MPRINT(TAXSCF): SP_REGPEN=MAX(0,(X5318 MPRINT(ACONV): *((X5319=2)*52.18+(X5319=3)*26.09+(X5319=4)*12+(X5319=5)*4+(X5319=6)+(X5319=8)+ (X5319=11)*2+(X5319=12)*6+(X5319=31)*24+(X5319=14)+(X5319=22)) MPRINT(TAXSCF): *(X5315=2)*(X5317>=1))) +MAX(0,(X5326 MPRINT(ACONV): *((X5327=2)*52.18+(X5327=3)*26.09+(X5327=4)*12+(X5327=5)*4+(X5327=6)+(X5327=8)+ (X5327=11)*2+(X5327=12)*6+(X5327=31)*24+(X5327=14)+(X5327=22)) MPRINT(TAXSCF): *(X5323=2)*(X5325>=1))) +MAX(0,(X5334 MPRINT(ACONV): *((X5335=2)*52.18+(X5335=3)*26.09+(X5335=4)*12+(X5335=5)*4+(X5335=6)+(X5335=8)+ (X5335=11)*2+(X5335=12)*6+(X5335=31)*24+(X5335=14)+(X5335=22)) MPRINT(TAXSCF): *(X5331=2)*(X5333>=1))) +MAX(0,(X5418 MPRINT(ACONV): *((X5419=2)*52.18+(X5419=3)*26.09+(X5419=4)*12+(X5419=5)*4+(X5419=6)+(X5419=8)+ (X5419=11)*2+(X5419=12)*6+(X5419=31)*24+(X5419=14)+(X5419=22)) MPRINT(TAXSCF): *(X5415=2)*(X5417>=1))) +MAX(0,(X5426 MPRINT(ACONV): *((X5427=2)*52.18+(X5427=3)*26.09+(X5427=4)*12+(X5427=5)*4+(X5427=6)+(X5427=8)+ (X5427=11)*2+(X5427=12)*6+(X5427=31)*24+(X5427=14)+(X5427=22)) MPRINT(TAXSCF): *(X5423=2)*(X5425>=1))) +MAX(0,(X5434 MPRINT(ACONV): *((X5435=2)*52.18+(X5435=3)*26.09+(X5435=4)*12+(X5435=5)*4+(X5435=6)+(X5435=8)+ (X5435=11)*2+(X5435=12)*6+(X5435=31)*24+(X5435=14)+(X5435=22)) MPRINT(TAXSCF): *(X5431=2)*(X5433>=1))); MPRINT(TAXSCF): SP_WITHDRAW=X6566+(X6574*.5)+MAX(0,(X6464 MPRINT(ACONV): *((X6465=2)*52.18+(X6465=3)*26.09+(X6465=4)*12+(X6465=5)*4+(X6465=6)+(X6465=8)+ (X6465=11)*2+(X6465=12)*6+(X6465=31)*24+(X6465=14)+(X6465=22)) MPRINT(TAXSCF): *(X5315=2))) +MAX(0,(X6469 MPRINT(ACONV): *((X6470=2)*52.18+(X6470=3)*26.09+(X6470=4)*12+(X6470=5)*4+(X6470=6)+(X6470=8)+ (X6470=11)*2+(X6470=12)*6+(X6470=31)*24+(X6470=14)+(X6470=22)) MPRINT(TAXSCF): *(X5323=2)))+MAX(0,(X6474 MPRINT(ACONV): *((X6475=2)*52.18+(X6475=3)*26.09+(X6475=4)*12+(X6475=5)*4+(X6475=6)+(X6475=8)+ (X6475=11)*2+(X6475=12)*6+(X6475=31)*24+(X6475=14)+(X6475=22)) MPRINT(TAXSCF): *(X5331=2))) +MAX(0,(X6479 MPRINT(ACONV): *((X6480=2)*52.18+(X6480=3)*26.09+(X6480=4)*12+(X6480=5)*4+(X6480=6)+(X6480=8)+ (X6480=11)*2+(X6480=12)*6+(X6480=31)*24+(X6480=14)+(X6480=22)) MPRINT(TAXSCF): *(X5415=2)))+MAX(0,(X6484 MPRINT(ACONV): *((X6485=2)*52.18+(X6485=3)*26.09+(X6485=4)*12+(X6485=5)*4+(X6485=6)+(X6485=8)+ (X6485=11)*2+(X6485=12)*6+(X6485=31)*24+(X6485=14)+(X6485=22)) MPRINT(TAXSCF): *(X5423=2))) +MAX(0,(X6489 MPRINT(ACONV): *((X6490=2)*52.18+(X6490=3)*26.09+(X6490=4)*12+(X6490=5)*4+(X6490=6)+(X6490=8)+ (X6490=11)*2+(X6490=12)*6+(X6490=31)*24+(X6490=14)+(X6490=22)) MPRINT(TAXSCF): *(X5431=2)))+MAX(0,(X6965 MPRINT(ACONV): *((X6966=2)*52.18+(X6966=3)*26.09+(X6966=4)*12+(X6966=5)*4+(X6966=6)+(X6966=8)+ (X6966=11)*2+(X6966=12)*6+(X6966=31)*24+(X6966=14)+(X6966=22)) MPRINT(TAXSCF): *(X5606=2))) +MAX(0,(X6971 MPRINT(ACONV): *((X6972=2)*52.18+(X6972=3)*26.09+(X6972=4)*12+(X6972=5)*4+(X6972=6)+(X6972=8)+ (X6972=11)*2+(X6972=12)*6+(X6972=31)*24+(X6972=14)+(X6972=22)) MPRINT(TAXSCF): *(X5614=2)))+MAX(0,(X6977 MPRINT(ACONV): *((X6978=2)*52.18+(X6978=3)*26.09+(X6978=4)*12+(X6978=5)*4+(X6978=6)+(X6978=8)+ (X6978=11)*2+(X6978=12)*6+(X6978=31)*24+(X6978=14)+(X6978=22)) MPRINT(TAXSCF): *(X5622=2))) +MAX(0,(X6983 MPRINT(ACONV): *((X6984=2)*52.18+(X6984=3)*26.09+(X6984=4)*12+(X6984=5)*4+(X6984=6)+(X6984=8)+ (X6984=11)*2+(X6984=12)*6+(X6984=31)*24+(X6984=14)+(X6984=22)) MPRINT(TAXSCF): *(X5630=2)))+MAX(0,(X6989 MPRINT(ACONV): *((X6990=2)*52.18+(X6990=3)*26.09+(X6990=4)*12+(X6990=5)*4+(X6990=6)+(X6990=8)+ (X6990=11)*2+(X6990=12)*6+(X6990=31)*24+(X6990=14)+(X6990=22)) 307 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): *(X5638=2))) +MAX(0,(X6995 MPRINT(ACONV): *((X6996=2)*52.18+(X6996=3)*26.09+(X6996=4)*12+(X6996=5)*4+(X6996=6)+(X6996=8)+ (X6996=11)*2+(X6996=12)*6+(X6996=31)*24+(X6996=14)+(X6996=22)) MPRINT(TAXSCF): *(X5646=2)))+(X5724)*(X5725=11)*.5; MPRINT(TAXSCF): * For new tax units need to split up income and determine which new tax unit is assigned which deductions and exemptions. Also need to zero out any variables not relevant to the new tax unit (ex. spouses wages); MPRINT(TAXSCF): IF TAXUNIT IN(1 2) THEN DO; MPRINT(TAXSCF): * age; MPRINT(TAXSCF): IF (TAXUNIT=1) THEN SPAGE=0; MPRINT(TAXSCF): * wages; MPRINT(TAXSCF): IF (TAXUNIT=1 & (R_LABORINC+SP_LABORINC>0)) THEN WSINCOME=MAX(0,X5702)*(R_LABORINC/(R_LABORINC+SP_LABORINC))*(R_LABORINC>0); MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & (R_LABORINC+SP_LABORINC>0)) THEN WSINCOME=MAX(0,X5702)*(SP_LABORINC/(R_LABORINC+SP_LABORINC))*(SP_LABORINC>0); MPRINT(TAXSCF): ELSE WSINCOME=MAX(0,X5702)*.5; MPRINT(TAXSCF): WSINCSP=0; MPRINT(TAXSCF): * business income; MPRINT(TAXSCF): R_SOLEPROP=(X4106 IN(2 3 4) | (X3113=1 & X3119=2) | (X3213=1 & X3219=2) | (X3313=1 & X3319=2)); MPRINT(TAXSCF): SP_SOLEPROP=(X4706 IN(2 3 4) | (X3114=1 & X3119=2) | (X3214=1 & X3219=2) | (X3313=1 & X3319=2)); MPRINT(TAXSCF): IF (TAXUNIT=1 & (R_BUSINC+SP_BUSINC>0) & (R_SOLEPROP=1 | SP_SOLEPROP=1)) THEN DO; MPRINT(TAXSCF): IF (R_SOLEPROP=1 & SP_SOLEPROP=1) THEN TBUSINC=X5704*(R_BUSINC/(R_BUSINC+SP_BUSINC))*(R_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=1 & SP_SOLEPROP=0) THEN TBUSINC=X5704; MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=0 & SP_SOLEPROP=1) THEN TBUSINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & (R_BUSINC+SP_BUSINC>0) & (R_SOLEPROP=1 | SP_SOLEPROP=1)) THEN DO; MPRINT(TAXSCF): IF (R_SOLEPROP=1 & SP_SOLEPROP=1) THEN TBUSINC=X5704*(SP_BUSINC/(R_BUSINC+SP_BUSINC))*(SP_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=0 & SP_SOLEPROP=1) THEN TBUSINC=X5704; MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=1 & SP_SOLEPROP=0) THEN TBUSINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE TBUSINC=X5704*.5; MPRINT(TAXSCF): * interest, dividends, and capital gains - just split 50-50; MPRINT(TAXSCF): NTAXINC= MAX(0,X5706)*.5; MPRINT(TAXSCF): INTINC= MAX(0,X5708)*.5; MPRINT(TAXSCF): DIVINC= MAX(0,X5710)*.5; MPRINT(TAXSCF): IF X5712=-1 THEN CAPGLINC=0; MPRINT(TAXSCF): ELSE CAPGLINC=X5712*.5; MPRINT(TAXSCF): * rent, royalties, partnership and scorp income; MPRINT(TAXSCF): R_PARTNER_SCORP=(X4106 IN(2 3 4) | (X3113=1 & X3119 IN(1 3 6 11 12 15)) | (X3213=1 & X3219 IN(1 3 6 11 12 15))); MPRINT(TAXSCF): SP_PARTNER_SCORP=(X4106 IN(2 3 4) | (X3114=1 & X3119 IN(1 3 6 11 12 15)) | (X3214=1 & X3219 IN(1 3 6 11 12 15))); MPRINT(TAXSCF): IF (TAXUNIT=1 & (R_BUSINC+SP_BUSINC>0) & (R_PARTNER_SCORP=1 | SP_PARTNER_SCORP=1)) THEN DO; MPRINT(TAXSCF): IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=1) THEN RENTINC=X5714*(R_BUSINC/(R_BUSINC+SP_BUSINC))*(R_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=0) THEN RENTINC=X5714; MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=0 & SP_PARTNER_SCORP=1) THEN RENTINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & (R_BUSINC+SP_BUSINC>0) & (R_PARTNER_SCORP=1 | SP_PARTNER_SCORP=1)) THEN DO; MPRINT(TAXSCF): IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=1) THEN RENTINC=X5714*(SP_BUSINC/(R_BUSINC+SP_BUSINC))*(SP_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=0 & SP_PARTNER_SCORP=1) THEN RENTINC=X5714; MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=0) THEN RENTINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE RENTINC=X5714*.5; MPRINT(TAXSCF): * unemployment income, no questions about unemployed in past 12 months prior to 1998; MPRINT(TAXSCF): IF (TAXUNIT=1) THEN DO; MPRINT(TAXSCF): IF (X6780=1) THEN UNEMPINC=MAX(0,X5716)*(X6784 IN(0 5))+MAX(0,X5716)*(X6784=1)*.5; MPRINT(TAXSCF): ELSE IF (X6780=5 & X6784=1) THEN UNEMPINC=0; 308 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE UNEMPINC=MAX(0,X5716)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2) THEN DO; MPRINT(TAXSCF): IF (X6784=1) THEN UNEMPINC=MAX(0,X5716)*(X6780 IN(0 5))+MAX(0,X5716)*(X6780=1)*.5; MPRINT(TAXSCF): ELSE IF (X6784=5 & X6780=1) THEN UNEMPINC=0; MPRINT(TAXSCF): ELSE UNEMPINC=MAX(0,X5716)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * child support and alimony income; MPRINT(TAXSCF): IF (TAXUNIT=1 & X7377=2) THEN DO; MPRINT(TAXSCF): CHSPALINC=MAX(0,X5718)*(X7392^=2)+MAX(0,X5718)*(X7392=2)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & X7392=2) THEN DO; MPRINT(TAXSCF): CHSPALINC=MAX(0,X5718)*(X7377^=2)+MAX(0,X5718)*(X7377=2)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE CHSPALINC=MAX(0,X5718)*.5; MPRINT(TAXSCF): * government transfers, split 50/50; MPRINT(TAXSCF): AFDCINC=MAX(0,X5720)*.5; MPRINT(TAXSCF): * other income, split 50/50 - remove other income that is non-taxable, such as scholarships/grants, inheritances/gifts/, support from family or others, also remove IRA/Keogh income; MPRINT(TAXSCF): * special fix for 1992, removing other income coded 14, repayment of debts, it appears the total amount of the debt was reported, not just the interest on the debt; MPRINT(TAXSCF): OTHINC= (X5724)*(X5725 NOT IN(3 11 12 13 28))*.5+(X5726)*(X5727 NOT IN(3 11 12 13 28))*.5; MPRINT(TAXSCF): * social security and pension income, adding in withdrawals from IRA/Keogh/401ks; MPRINT(TAXSCF): R_GSSINC=MAX(0,(X5306 MPRINT(ACONV): *((X5307=2)*52.18+(X5307=3)*26.09+(X5307=4)*12+(X5307=5)*4+(X5307=6)+(X5307=8)+ (X5307=11)*2+(X5307=12)*6+(X5307=31)*24+(X5307=14)+(X5307=22)) MPRINT(TAXSCF): *(X5305>=1))); MPRINT(TAXSCF): SP_GSSINC=MAX(0,(X5311 MPRINT(ACONV): *((X5312=2)*52.18+(X5312=3)*26.09+(X5312=4)*12+(X5312=5)*4+(X5312=6)+(X5312=8)+ (X5312=11)*2+(X5312=12)*6+(X5312=31)*24+(X5312=14)+(X5312=22)) MPRINT(TAXSCF): *(X5310>=1))); MPRINT(TAXSCF): T_GSSINC=MAX(0,((X5306 MPRINT(ACONV): *((X5307=2)*52.18+(X5307=3)*26.09+(X5307=4)*12+(X5307=5)*4+(X5307=6)+(X5307=8)+ (X5307=11)*2+(X5307=12)*6+(X5307=31)*24+(X5307=14)+(X5307=22)) MPRINT(TAXSCF): *(X5305>=1))+(X5311 MPRINT(ACONV): *((X5312=2)*52.18+(X5312=3)*26.09+(X5312=4)*12+(X5312=5)*4+(X5312=6)+(X5312=8)+ (X5312=11)*2+(X5312=12)*6+(X5312=31)*24+(X5312=14)+(X5312=22)) MPRINT(TAXSCF): *(X5310>=1)))); MPRINT(TAXSCF): NOSS_X5722=MAX(0,(X5722-T_GSSINC)); MPRINT(TAXSCF): IF (TAXUNIT=1) THEN DO; MPRINT(TAXSCF): IF (R_REGPEN > 0) THEN PENINC=NOSS_X5722*(R_REGPEN/(R_REGPEN+SP_REGPEN))+R_WITHDRAW; MPRINT(TAXSCF): ELSE IF (R_REGPEN=0 & R_WITHDRAW > 0) THEN PENINC=R_WITHDRAW; MPRINT(TAXSCF): ELSE IF (R_REGPEN=0 & R_WITHDRAW=0 & SP_REGPEN > 0) THEN PENINC=0; MPRINT(TAXSCF): ELSE IF (R_REGPEN=0 & R_WITHDRAW=0 & SP_REGPEN=0) THEN PENINC=NOSS_X5722*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2) THEN DO; MPRINT(TAXSCF): IF (SP_REGPEN > 0) THEN PENINC=NOSS_X5722*(SP_REGPEN/(R_REGPEN+SP_REGPEN))+SP_WITHDRAW; MPRINT(TAXSCF): ELSE IF (SP_REGPEN=0 & SP_WITHDRAW > 0) THEN PENINC=SP_WITHDRAW; MPRINT(TAXSCF): ELSE IF (SP_REGPEN=0 & SP_WITHDRAW=0 & R_REGPEN > 0) THEN PENINC=0; MPRINT(TAXSCF): ELSE IF (SP_REGPEN=0 & SP_WITHDRAW=0 & R_REGPEN=0) THEN PENINC=NOSS_X5722*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): GSSINC=MAX(0,R_GSSINC)*(TAXUNIT=1)+MAX(0,SP_GSSINC)*(TAXUNIT=2); MPRINT(TAXSCF): OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; MPRINT(TAXSCF): NONTAX=NTAXINC+AFDCINC; MPRINT(TAXSCF): RENT=MAX(0,(X602 MPRINT(ACONV): *((X603=2)*52.18+(X603=3)*26.09+(X603=4)*12+(X603=5)*4+(X603=6)+(X603=8)+ (X603=11)*2+(X603=12)*6+(X603=31)*24+(X603=14)+(X603=22)) MPRINT(TAXSCF): ),(X612 309 The SAS System 13:32 Friday, January 29, 2021 MPRINT(ACONV): *((X613=2)*52.18+(X613=3)*26.09+(X613=4)*12+(X613=5)*4+(X613=6)+(X613=8)+ (X613=11)*2+(X613=12)*6+(X613=31)*24+(X613=14)+(X613=22)) MPRINT(TAXSCF): ),(X619 MPRINT(ACONV): *((X620=2)*52.18+(X620=3)*26.09+(X620=4)*12+(X620=5)*4+(X620=6)+(X620=8)+ (X620=11)*2+(X620=12)*6+(X620=31)*24+(X620=14)+(X620=22)) MPRINT(TAXSCF): ), (X708 MPRINT(ACONV): *((X709=2)*52.18+(X709=3)*26.09+(X709=4)*12+(X709=5)*4+(X709=6)+(X709=8)+ (X709=11)*2+(X709=12)*6+(X709=31)*24+(X709=14)+(X709=22)) MPRINT(TAXSCF): ))*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TAXUNIT=0 THEN DO; MPRINT(TAXSCF): R_SOLEPROP=(X4106 IN(2 3 4) | (X3113=1 & X3119=2) | (X3213=1 & X3219=2) | (X3313=1 & X3319=2)); MPRINT(TAXSCF): SP_SOLEPROP=(X4706 IN(2 3 4) | (X3114=1 & X3119=2) | (X3214=1 & X3219=2) | (X3313=1 & X3319=2)); MPRINT(TAXSCF): * Split wages across primary and secondary earner for married filing jointly households; MPRINT(TAXSCF): IF FILESTAT^=2 THEN DO; MPRINT(TAXSCF): WSINCOME=MAX(0,X5702); MPRINT(TAXSCF): WSINCSP=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF FILESTAT=2 THEN DO; MPRINT(TAXSCF): IF ((R_LABORINC > 0 & SP_LABORINC=0) | (R_LABORINC=0 & SP_LABORINC > 0) | (R_LABORINC=0 & SP_LABORINC=0)) THEN DO; MPRINT(TAXSCF): WSINCOME=MAX(0,X5702); MPRINT(TAXSCF): WSINCSP=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (R_LABORINC > 0 & SP_LABORINC > 0) THEN DO; MPRINT(TAXSCF): WSINCOME=MAX(0,X5702)*(R_LABORINC/(R_LABORINC+SP_LABORINC)); MPRINT(TAXSCF): WSINCSP=MAX(0,X5702)*(SP_LABORINC/(R_LABORINC+SP_LABORINC)); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TBUSINC = X5704; MPRINT(TAXSCF): NTAXINC= MAX(0,X5706); MPRINT(TAXSCF): INTINC= MAX(0,X5708); MPRINT(TAXSCF): DIVINC= MAX(0,X5710); MPRINT(TAXSCF): IF X5712=-1 THEN CAPGLINC=0; MPRINT(TAXSCF): ELSE CAPGLINC=X5712; MPRINT(TAXSCF): RENTINC= X5714; MPRINT(TAXSCF): UNEMPINC = MAX(0,X5716); MPRINT(TAXSCF): CHSPALINC=MAX(0,X5718); MPRINT(TAXSCF): AFDCINC = MAX(0,X5720); MPRINT(TAXSCF): * Starting in 2004, IRA/Keogh/401K type income is not reported in other income, instead withdrawals are reported separately during the questions about the assets, so need to add the withdrawals to pension income. There may be a few withdrawals still reported as other income if the asset account was closed or emptied out during the year prior to the survey.; MPRINT(TAXSCF): * also remove other income that is non-taxable, such as scholarships/grants, inheritances/gifts/, support from family or others; MPRINT(TAXSCF): * special fix for 1992, removing other income coded 14, repayment of debts, it appears the total amount of the debt was report, not just the interest on the debt; MPRINT(TAXSCF): OTHINC= (X5724)*(X5725 NOT IN(3 11 12 13 28))+(X5726)*(X5727 NOT IN(3 11 12 13 28)); MPRINT(TAXSCF): GSSINC=MAX(0,((X5306 MPRINT(ACONV): *((X5307=2)*52.18+(X5307=3)*26.09+(X5307=4)*12+(X5307=5)*4+(X5307=6)+(X5307=8)+ (X5307=11)*2+(X5307=12)*6+(X5307=31)*24+(X5307=14)+(X5307=22)) MPRINT(TAXSCF): *(X5305>=1))+(X5311 MPRINT(ACONV): *((X5312=2)*52.18+(X5312=3)*26.09+(X5312=4)*12+(X5312=5)*4+(X5312=6)+(X5312=8)+ (X5312=11)*2+(X5312=12)*6+(X5312=31)*24+(X5312=14)+(X5312=22)) MPRINT(TAXSCF): *(X5310>=1)))); MPRINT(TAXSCF): IF GSSINC=0 THEN PENINC= MAX(0,X5722)+R_WITHDRAW+SP_WITHDRAW; MPRINT(TAXSCF): ELSE IF (GSSINC > 0) THEN PENINC=MAX(0,(X5722-GSSINC)) +R_WITHDRAW+SP_WITHDRAW; MPRINT(TAXSCF): OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; 310 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): NONTAX=NTAXINC+AFDCINC; MPRINT(TAXSCF): RENT=MAX(0,(X602 MPRINT(ACONV): *((X603=2)*52.18+(X603=3)*26.09+(X603=4)*12+(X603=5)*4+(X603=6)+(X603=8)+ (X603=11)*2+(X603=12)*6+(X603=31)*24+(X603=14)+(X603=22)) MPRINT(TAXSCF): ),(X612 MPRINT(ACONV): *((X613=2)*52.18+(X613=3)*26.09+(X613=4)*12+(X613=5)*4+(X613=6)+(X613=8)+ (X613=11)*2+(X613=12)*6+(X613=31)*24+(X613=14)+(X613=22)) MPRINT(TAXSCF): ),(X619 MPRINT(ACONV): *((X620=2)*52.18+(X620=3)*26.09+(X620=4)*12+(X620=5)*4+(X620=6)+(X620=8)+ (X620=11)*2+(X620=12)*6+(X620=31)*24+(X620=14)+(X620=22)) MPRINT(TAXSCF): ), (X708 MPRINT(ACONV): *((X709=2)*52.18+(X709=3)*26.09+(X709=4)*12+(X709=5)*4+(X709=6)+(X709=8)+ (X709=11)*2+(X709=12)*6+(X709=31)*24+(X709=14)+(X709=22)) MPRINT(TAXSCF): )); MPRINT(TAXSCF): END; MPRINT(TAXSCF): * AGI - note that starting in 2010, AGI questions no longer asked, so using total income minus non-taxable income plus IRA/401k withdrawals as a proxy. No information on adjustments to AGI; MPRINT(TAXSCF): AGI=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC+UNEMPINC+CHSPALINC+OTHINC+PENINC+GSSINC; MPRINT(TAXSCF): IF AGI=-1 THEN AGI=0; MPRINT(TAXSCF): AGIGE50K=(AGI>=50000); MPRINT(TAXSCF): AGICL=1*(AGI < 50000)+2*(50000 <= AGI < 100000)+3*(AGI >= 100000); MPRINT(TAXSCF): * For allocating itemized deductions - mortgage interest, investment interest expense, property taxes, and charitable contributions - between new tax units, assume tax unit with higher income assigned all itemized deductions. Creating a flag here for use in computing deductions later in the program. Using wages, business, and pension income as income measure (all other income components are split 50/50 between the new tax units).; MPRINT(TAXSCF): IF (TAXUNIT IN(1 2)) THEN DO; MPRINT(TAXSCF): R_TINCOME=R_LABORINC+R_BUSINC+R_REGPEN+R_WITHDRAW; MPRINT(TAXSCF): SP_TINCOME=SP_LABORINC+SP_BUSINC+SP_REGPEN+SP_WITHDRAW; MPRINT(TAXSCF): ITEMDEDCT_FLAG=(TAXUNIT=1 & R_TINCOME >= SP_TINCOME) +(TAXUNIT=2 & SP_TINCOME > R_TINCOME); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TAXUNIT=0 THEN ITEMDEDCT_FLAG=1; MPRINT(TAXSCF): * Set personal exemption to one for split households, divide kids among split households, if one, give to both tax units, if even number, split evenly between tax units, if odd number, give more to higher income tax unit; MPRINT(TAXSCF): IF TAXUNIT IN(1 2) THEN DO; MPRINT(TAXSCF): PERSEXP=1; MPRINT(TAXSCF): IF KIDS>1 THEN DO; MPRINT(TAXSCF): IF (KIDSU13>0 & MOD(KIDSU13,2)=0) THEN KIDSU13=KIDSU13/2; MPRINT(TAXSCF): ELSE IF (KIDSU13>0 & MOD(KIDSU13,2)^=0) THEN DO; MPRINT(TAXSCF): KIDSU13=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU13/2,1))+ (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU13/2)-.5); MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (KIDSU17>0 & MOD(KIDSU17,2)=0) THEN KIDSU17=KIDSU17/2; MPRINT(TAXSCF): ELSE IF (KIDSU17>0 & MOD(KIDSU17,2)^=0) THEN DO; MPRINT(TAXSCF): KIDSU17=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU17/2,1))+ (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU17/2)-.5); MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (KIDSU18>0 & MOD(KIDSU18,2)=0) THEN KIDSU18=KIDSU18/2; MPRINT(TAXSCF): ELSE IF (KIDSU18>0 & MOD(KIDSU18,2)^=0) THEN DO; MPRINT(TAXSCF): KIDSU18=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU18/2,1))+ (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU18/2)-.5); MPRINT(TAXSCF): END; MPRINT(TAXSCF): KIDS=KIDSU13+KIDSU17+KIDSU18; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF PERSEXP=1 & MARRIED=1 THEN FILESTAT=3; 311 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS=0 & MARRIED=0 THEN FILESTAT=1; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS>0 & MARRIED=0 THEN FILESTAT=4; MPRINT(TAXSCF): TOTEXPT=PERSEXP+KIDS; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF FILESTAT=0 THEN PUT "MISSING FILING STATUS " Y1= X5744= X5746= TAXUNIT= MARRIED= KIDS= PERSEXP=; MPRINT(TAXSCF): RUN; NOTE: There were 24616 observations read from the data set WORK.SCF. NOTE: The data set WORK.SCF has 24616 observations and 5746 variables. NOTE: DATA statement used (Total process time): real time 0.95 seconds cpu time 0.73 seconds MPRINT(TAXSCF): * Create tax units based on NPEU members. If there are multiple NPEU members, need to allocate income, assets, and debt across the members; MPRINT(TAXSCF): DATA TEMP NPEU; MPRINT(TAXSCF): SET SCF(WHERE=(TAXUNIT IN(0 1) & X7050 >=1)); MPRINT(TAXSCF): file "null.txt"; MPRINT(TAXSCF): TAXUNIT=2; MPRINT(TAXSCF): ARRAY NPEUAGE {*} X110 X116 X122 X128 X134 X204 X210 X216 X222; MPRINT(TAXSCF): ARRAY LIVEWITH {*} X112 X118 X124 X130 X136 X206 X212 X218 X224; MPRINT(TAXSCF): ARRAY FINDEP {*} X113 X119 X125 X131 X137 X207 X213 X219 X225; MPRINT(TAXSCF): DO I=1 TO DIM(LIVEWITH); MPRINT(TAXSCF): IF LIVEWITH{I} IN(1 2 3 4) & FINDEP{I} IN(2 3 4 5) THEN DO; MPRINT(TAXSCF): TAXUNIT=TAXUNIT+1; MPRINT(TAXSCF): TUAGE=NPEUAGE{I}; MPRINT(TAXSCF): SPAGE=0; MPRINT(TAXSCF): OUTPUT NPEU; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): RUN; NOTE: The file "null.txt" is: Filename=/disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code/null.txt, Owner Name=taxsim,Group Name=taxsim, Access Permission=-rw-r--r--, Last Modified=29Jan2021:13:34:52 NOTE: 0 records were written to the file "null.txt". NOTE: There were 2170 observations read from the data set WORK.SCF. WHERE TAXUNIT in (0, 1) and (X7050>=1); NOTE: The data set WORK.TEMP has 0 observations and 5746 variables. NOTE: The data set WORK.NPEU has 2925 observations and 5746 variables. NOTE: DATA statement used (Total process time): real time 0.14 seconds cpu time 0.14 seconds MPRINT(TAXSCF): DATA NPEU; MPRINT(TAXSCF): SET NPEU; MPRINT(TAXSCF): ARRAY INCTYPES {*} WSINCOME WSINCSP TBUSINC INTINC NTAXINC DIVINC RENTINC UNEMPINC AFDCINC GSSINC PENINC OTHINC CAPGLINC; MPRINT(TAXSCF): DO I=1 TO DIM(INCTYPES); MPRINT(TAXSCF): INCTYPES{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Allocate NPEU wage income across all NPEU members less than 70 years old. If only other type of income is Social Security, allocate amount across NPEU members age 62 or more. Otherwise, allocate total amount of 312 The SAS System 13:32 Friday, January 29, 2021 nonwage income divided by the number of other types of income to each type of income equally to each NPEU member; MPRINT(TAXSCF): NUMU70=(0=62 & X113=5)+(X116>=62 & X119=5)+(X122>=62 & X125=5) +(X128>=62 & X131=5)+(X134>=62 & X137=5)+(X204>=62 & X207=5) +(X210>=62 & X213=5)+(X216>=62 & X219=5)+(X222>=62 & X225=5); MPRINT(TAXSCF): NUMINCTYPES=(X6406=1)+(X6407=1)+(X6408=1)+(X6409=1)+(X6410=1)+(X6411=1) +(X6412=1)+(X6413=1)+(X6414 > 5); MPRINT(TAXSCF): IF (NUMU70 > 0) THEN WSINCOME=(MAX(0,X6403)/NUMU70)*(TUAGE < 70); MPRINT(TAXSCF): ELSE WSINCOME=(MAX(0,X6403)/X7050); MPRINT(TAXSCF): IF (X6415 > 0 & NUMINCTYPES > 0) THEN DO; MPRINT(TAXSCF): IF (NUMGE62 > 0) THEN GSSINC=(X6406=1)*((MAX(0,X6415)/(NUMINCTYPES))/NUMGE62)*(TUAGE>=62); MPRINT(TAXSCF): ELSE GSSINC=(X6406=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): TBUSINC=(X6412=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): INTINC=(X6410=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): DIVINC=(X6411=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): RENTINC=(X6413=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): PENINC=(X6407=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050) +(X6408=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): AFDCINC=(X6409=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): CAPGLINC=(X6414 IN(13))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): UNEMPINC=(X6414 IN(10))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): OTHINC=(X6414 IN(11 12 15))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): END; MPRINT(TAXSCF): OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; MPRINT(TAXSCF): NONTAX=NTAXINC+AFDCINC; MPRINT(TAXSCF): * All NPEU tax units take the standard deduction, have one personal exemption, and have filing status of single; MPRINT(TAXSCF): ITEMDEDCT_FLAG=0; MPRINT(TAXSCF): PERSEXP=1; MPRINT(TAXSCF): TOTEXPT=1; MPRINT(TAXSCF): KIDS=0; MPRINT(TAXSCF): KIDSU13=0; MPRINT(TAXSCF): KIDSU17=0; MPRINT(TAXSCF): KIDSU18=0; MPRINT(TAXSCF): FILESTAT=1; MPRINT(TAXSCF): AGI=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC+UNEMPINC+CHSPALINC+OTHINC+PENINC+GSSINC; MPRINT(TAXSCF): IF AGI=-1 THEN AGI=0; MPRINT(TAXSCF): AGIGE50K=(AGI>=50000); MPRINT(TAXSCF): AGICL=1*(AGI < 50000)+2*(50000 <= AGI < 100000)+3*(AGI >= 100000); MPRINT(TAXSCF): RUN; NOTE: There were 2925 observations read from the data set WORK.NPEU. NOTE: The data set WORK.NPEU has 2925 observations and 5749 variables. NOTE: DATA statement used (Total process time): real time 0.08 seconds cpu time 0.09 seconds MPRINT(TAXSCF): * Add NPEU tax units; MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF NPEU; MPRINT(TAXSCF): RUN; NOTE: There were 24616 observations read from the data set WORK.SCF. NOTE: There were 2925 observations read from the data set WORK.NPEU. NOTE: The data set WORK.SCF has 27541 observations and 5749 variables. NOTE: DATA statement used (Total process time): real time 2.13 seconds cpu time 0.81 seconds 313 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): ************Itemized deductions; MPRINT(TAXSCF): IF ITEMDEDCT_FLAG=1 THEN DO; MPRINT(TAXSCF): ************Mortgage interest deduction; MPRINT(TAXSCF): * Convert real estate taxes on primary residence into a yearly amount; MPRINT(TAXSCF): RESTAXM1=0; MPRINT(TAXSCF): IF (X721 > 0) THEN DO; MPRINT(TAXSCF): RESTAXM1=X721 MPRINT(ACONV): *((X722=2)*52.18+(X722=3)*26.09+(X722=4)*12+(X722=5)*4+(X722=6)+(X722=8)+ (X722=11)*2+(X722=12)*6+(X722=31)*24+(X722=14)+(X722=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Create arrays for various mortgage loan components; MPRINT(TAXSCF): ARRAY TLMTH {*} TLMTHM1 TLMTHM2 TLMTHM3; MPRINT(TAXSCF): ARRAY CMOPAY {*} CMOPAYM1 CMOPAYM2 CMOPAYM3; MPRINT(TAXSCF): ARRAY PAYLFT {*} PAYLFTM1 PAYLFTM2 PAYLFTM3; MPRINT(TAXSCF): ARRAY AMTOWE {*} AMTOWEM1 AMTOWEM2 AMTOWEM3; MPRINT(TAXSCF): ARRAY AMTOWE_1 {*} AMTOWE_1M1 AMTOWE_1M2 AMTOWE_1M3; MPRINT(TAXSCF): ARRAY AINTDCT {*} AINTDCTM1 AINTDCTM2 AINTDCTM3; MPRINT(TAXSCF): ARRAY LNAGE {*} LNAGEM1 LNAGEM2 LNAGEM3; MPRINT(TAXSCF): ARRAY CURBAL {*} CURBALM1 CURBALM2 CURBALM3; MPRINT(TAXSCF): ARRAY CURBAL_1 {*} CURBAL_1M1 CURBAL_1M2 CURBAL_1M3; MPRINT(TAXSCF): ARRAY CINTDCT {*} CINTDCTM1 CINTDCTM2 CINTDCTM3; MPRINT(TAXSCF): ARRAY DCTDIFF {*} DCTDIFFM1 DCTDIFFM2 DCTDIFFM3; MPRINT(TAXSCF): ARRAY SINTDCT {*} SINTDCTM1 SINTDCTM2 SINTDCTM3; MPRINT(TAXSCF): ARRAY AVINTDCT {*} AVINTDCTM1 AVINTDCTM2 AVINTDCTM3; MPRINT(TAXSCF): ARRAY NMPMT {*} X807 X907 X1007; MPRINT(TAXSCF): ARRAY NMYR {*} X806 X906 X1006; MPRINT(TAXSCF): ARRAY REGPAYF {*} X809 X909 X1009; MPRINT(TAXSCF): ARRAY REGPAY {*} X808 X908 X1008; MPRINT(TAXSCF): ARRAY TYPAYF {*} X814 X914 X1014; MPRINT(TAXSCF): ARRAY TYPAY {*} X813 X913 X1013; MPRINT(TAXSCF): ARRAY LNSTMN {*} X801 X901 X1001; MPRINT(TAXSCF): ARRAY LNSTYR {*} X802 X902 X1002; MPRINT(TAXSCF): ARRAY HBALLN {*} X811 X911 X1011; MPRINT(TAXSCF): ARRAY BALLN {*} X812 X912 X1012; MPRINT(TAXSCF): ARRAY HAVELN {*} X723 X830 X931; MPRINT(TAXSCF): ARRAY AMTBORR {*} X804 X904 X1004; MPRINT(TAXSCF): ARRAY JAMTBORR {*} J804 J904 J1004; MPRINT(TAXSCF): ARRAY AMTOUT {*} X805 X905 X1005; MPRINT(TAXSCF): ARRAY JAMTOUT {*} J805 J905 J1005; MPRINT(TAXSCF): ARRAY INTRATE {*} X816 X916 X1016; MPRINT(TAXSCF): ARRAY ONSCHED {*} X7571 X7570 X7569; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTH); MPRINT(TAXSCF): TLMTH{I}=0; MPRINT(TAXSCF): CMOPAY{I}=0; MPRINT(TAXSCF): PAYLFT{I}=0; MPRINT(TAXSCF): AMTOWE{I}=0; MPRINT(TAXSCF): AMTOWE_1{I}=0; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): LNAGE{I}=0; MPRINT(TAXSCF): CURBAL{I}=0; MPRINT(TAXSCF): CURBAL_1{I}=0; MPRINT(TAXSCF): CINTDCT{I}=0; 314 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): DCTDIFF{I}=0; MPRINT(TAXSCF): SINTDCT{I}=0; MPRINT(TAXSCF): AVINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): NUMORT=(X723=1)+(X830=1)+(X931=1); MPRINT(TAXSCF): TOTAMTOUTM=0; MPRINT(TAXSCF): TOTDEDCTM=0; MPRINT(TAXSCF): GRFAMTOUTM=0; MPRINT(TAXSCF): A17AMTOUTM=0; MPRINT(TAXSCF): HAAMTOUTM=0; MPRINT(TAXSCF): DO I=1 TO DIM(NMPMT); MPRINT(TERMCON): IF (NMYR{I}=0 & NMPMT{I}=0) THEN DO; MPRINT(TERMCON): TLMTH{I}=0; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYR{I}^=0|NMPMT{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYR{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYR{I}=-1) THEN DO; MPRINT(TERMCON): TLMTH{I}=NMYR{I}; MPRINT(TERMCON): IF (NMPMT{I}=0) THEN DO; MPRINT(TERMCON): NMPMT{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYR{I}>0) THEN DO; MPRINT(TERMCON): TLMTH{I}=NMYR{I}*12; MPRINT(TERMCON): IF (NMPMT{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYF{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMT{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYF{I}=-7) THEN DO; MPRINT(TERMCON): NMPMT{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYF{I}=8) THEN DO; MPRINT(TERMCON): NMPMT{I}=1; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYF{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYF{I}=1) THEN NMPMT{I}=TLMTH{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=2) THEN NMPMT{I}=TLMTH{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=3) THEN NMPMT{I}=TLMTH{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=4) THEN NMPMT{I}=TLMTH{I}; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=5) THEN NMPMT{I}=TLMTH{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=6) THEN NMPMT{I}=TLMTH{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=20) THEN NMPMT{I}=TLMTH{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=21) THEN NMPMT{I}=TLMTH{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=11) THEN NMPMT{I}=TLMTH{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=12) THEN NMPMT{I}=TLMTH{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=23) THEN NMPMT{I}=TLMTH{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=24) THEN NMPMT{I}=TLMTH{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=25) THEN NMPMT{I}=TLMTH{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=31) THEN NMPMT{I}=TLMTH{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=18) THEN NMPMT{I}=TLMTH{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=0) THEN NMPMT{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYF{I}>.Z & REGPAYF{I}^=-1 & REGPAYF{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMT{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTH{I}= REGPAYF{I}= NMPMT{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTH{I}>.Z & TLMTH{I}<-2) THEN DO; MPRINT(MOCONV): NMPMT{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTH{I}= REGPAYF{I}= NMPMT{I}=; 315 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTH{I}<=.Z) THEN NMPMT{I}=TLMTH{I}; MPRINT(MOCONV): ELSE IF (TLMTH{I}^=-1 & TLMTH{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYF{I}= TLMTH{I}= "SETTING AMT=."; MPRINT(MOCONV): NMPMT{I}=.; MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMT{I}=-1) THEN DO; MPRINT(TERMCON): TLMTH{I}=-1; MPRINT(TERMCON): IF (NMYR{I}=0) THEN DO; MPRINT(TERMCON): NMYR{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMT{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYF{I}; MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYF{I}>0) THEN PFREQ=TYPAYF{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTH{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; MPRINT(TERMCON): TLMTH{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): IF (NMPMT{I}>0) THEN DO; MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTH{I}=NMPMT{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}))); MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12))); MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTH{I}=NMPMT{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTH{I}=NMPMT{I}*2/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTH{I}=NMPMT{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTH{I}=NMPMT{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTH{I}=NMPMT{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTH{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): TLMTH{I}=NMPMT{I}; MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMT{I}= PFREQ= TLMTH{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMT{I}>.Z & NMPMT{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTH{I}=NMPMT{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMT{I}= PFREQ= TLMTH{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMT{I}=0) THEN TLMTH{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMT{I}<=.Z) THEN TLMTH{I}=NMPMT{I}; MPRINT(IMOCONV): ELSE IF (NMPMT{I}^=-1 & NMPMT{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMT{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTH{I}=.; MPRINT(IMOCONV): END; MPRINT(TERMCON): ; 316 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTH{I}>0) THEN DO; MPRINT(TERMCON): NMYR{I}=MAX(1,INT(.5+(TLMTH{I}/12))); MPRINT(TERMCON): TLMTH{I}=MAX(1,ROUND(TLMTH{I})); MPRINT(TERMCON): END; MPRINT(TERMCON): IF (NMYR{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMT{I}= NMYR{I}= TLMTH{I}= REGPAYF{I}= REGPAY{I}= TYPAYF{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAY{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYF{I}=1) THEN CMOPAY{I}=REGPAY{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=2) THEN CMOPAY{I}=REGPAY{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=3) THEN CMOPAY{I}=REGPAY{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=4) THEN CMOPAY{I}=REGPAY{I}; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=5) THEN CMOPAY{I}=REGPAY{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=6) THEN CMOPAY{I}=REGPAY{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=20) THEN CMOPAY{I}=REGPAY{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=21) THEN CMOPAY{I}=REGPAY{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=8) THEN CMOPAY{I}=REGPAY{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=11) THEN CMOPAY{I}=REGPAY{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=12) THEN CMOPAY{I}=REGPAY{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=23) THEN CMOPAY{I}=REGPAY{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=24) THEN CMOPAY{I}=REGPAY{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=25) THEN CMOPAY{I}=REGPAY{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=31) THEN CMOPAY{I}=REGPAY{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=18) THEN CMOPAY{I}=REGPAY{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=0) THEN CMOPAY{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYF{I}>.Z & REGPAYF{I}^=-1 & REGPAYF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAY{I}= REGPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAY{I}>.Z & REGPAY{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAY{I}= REGPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAY{I}<=.Z) THEN CMOPAY{I}=REGPAY{I}; MPRINT(MOCONV): ELSE IF (REGPAY{I}^=-1 & REGPAY{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYF{I}= REGPAY{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(MOCONV): IF (TYPAYF{I}=1) THEN CMOPAY{I}=TYPAY{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=2) THEN CMOPAY{I}=TYPAY{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=3) THEN CMOPAY{I}=TYPAY{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=4) THEN CMOPAY{I}=TYPAY{I}; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=5) THEN CMOPAY{I}=TYPAY{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=6) THEN CMOPAY{I}=TYPAY{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=20) THEN CMOPAY{I}=TYPAY{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=21) THEN CMOPAY{I}=TYPAY{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=8) THEN CMOPAY{I}=TYPAY{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=11) THEN CMOPAY{I}=TYPAY{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=12) THEN CMOPAY{I}=TYPAY{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=23) THEN CMOPAY{I}=TYPAY{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=24) THEN CMOPAY{I}=TYPAY{I}*8.67/12; 317 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (TYPAYF{I}=25) THEN CMOPAY{I}=TYPAY{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=31) THEN CMOPAY{I}=TYPAY{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=18) THEN CMOPAY{I}=TYPAY{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=0) THEN CMOPAY{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYF{I}>.Z & TYPAYF{I}^=-1 & TYPAYF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAY{I}= TYPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAY{I}>.Z & TYPAY{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAY{I}= TYPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAY{I}<=.Z) THEN CMOPAY{I}=TYPAY{I}; MPRINT(MOCONV): ELSE IF (TYPAY{I}^=-1 & TYPAY{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYF{I}= TYPAY{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF NMYR{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFT{I}=(TLMTH{I}-((2004-LNSTYR{I})*12)); MPRINT(TAXSCF): LNAGE{I}=TLMTH{I}-PAYLFT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFT{I}=0; MPRINT(TAXSCF): LNAGE{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): file "null.txt"; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((X723=1) & (X810 IN(1 2 3)) & TLMTHM1 > 0 & X816 > 0) THEN DO; MPRINT(TAXSCF): IF (X811=1) THEN DO; MPRINT(MORTPAY): AMOPAYM1=ROUND((MORT((X804),.,((X816/10000)/12),(TLMTHM1))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (CMOPAYM1 > AMOPAYM1) THEN CMOPAYM1=AMOPAYM1; MPRINT(TAXSCF): 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= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X811=2) THEN DO; MPRINT(TAXSCF): IF (X804 > X812) THEN ADJBORR=X804-X812; MPRINT(TAXSCF): ELSE IF (X804 < X812) THEN ADJBORR=X804; MPRINT(TAXSCF): IF ADJBORR > 0 THEN MPRINT(MORTPAY): AMOPAYM1=ROUND((MORT((ADJBORR),.,((X816/10000)/12),(TLMTHM1))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (X804=X812) THEN AMOPAYM1=((X804)*(X816/10000))/12; MPRINT(TAXSCF): IF (CMOPAYM1 > AMOPAYM1) THEN CMOPAYM1=AMOPAYM1; MPRINT(TAXSCF): 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= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; 318 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * 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); MPRINT(TAXSCF): * NOT INCLUDING LAND CONTRACTS; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELN); MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTDCT{I}=CMOPAY{I}*12; MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELN{I}=1 & HBALLN{I} IN(1 2) & NMYR{I} NOT IN(0 -1 -7) & INTRATE{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & PAYLFT{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAY{I} < AMTBORR{I}*.005) THEN CMOPAY{I}=MAX(REGPAY{I},TYPAY{I}); MPRINT(TAXSCF): 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})); MPRINT(TAXSCF): 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))); MPRINT(TAXSCF): IF LNSTYR{I}^=2004 THEN AINTDCT{I}=(CMOPAY{I}*12)-(AMTOWE_1{I}-AMTOWE{I}); MPRINT(TAXSCF): ELSE IF LNSTYR{I}=2004 THEN AINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTH{I} < 0 | CMOPAY{I} < 0 | PAYLFT{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWE{I}=0; MPRINT(TAXSCF): AMTOWE_1{I}=0; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & AMTBORR{I} > 0 & LNAGE{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTDCT{I}=(CMOPAY{I}*12)-(CURBAL_1{I}-CURBAL{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTH{I} < 0 | AMTBORR{I} < 0 | LNAGE{I} < 0) THEN DO; MPRINT(TAXSCF): CURBAL{I}=0; MPRINT(TAXSCF): CURBAL_1{I}=0; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUT{I} > 0 & INTRATE{I} > 0) THEN SINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): ELSE SINTDCT{I}=0; MPRINT(TAXSCF): * 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 the home was not purchased in the survey year. If the home was purchased in the survey year, set deduction to zero.; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & PAYLFT{I}=0) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=CURBAL_1{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): AINTDCT{I}=CINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & LNSTYR{I}=2004 & X720=2004) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): SINTDCT{I}=0; MPRINT(TAXSCF): END; 319 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & LNSTYR{I}=2004) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTDCT{I} < 0 | CINTDCT{I} < 0) & CURBAL{I} > 0 & CURBAL_1{I} > 0) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=CURBAL_1{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): AINTDCT{I}=CINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTDCT{I} < 0 | CINTDCT{I} < 0) & (CURBAL{I} <= 0 & CURBAL_1{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCT{I} > 0 & CINTDCT{I} > 0) THEN DCTDIFF{I}=CINTDCT{I}-SINTDCT{I}; MPRINT(TAXSCF): ELSE DCTDIFF{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELN{I}=1 & (NMYR{I} IN(-1 -7) | NMPMT{I} IN(-1 -7)) & AMTOUT{I} > 0 & INTRATE{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELN{I}=1 & (INTRATE{I}=-1)) THEN DO; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): SINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest deduction; MPRINT(TAXSCF): IF ((CINTDCT{I} + AINTDCT{I} + SINTDCT{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTDCT{I}=(CINTDCT{I}+AINTDCT{I}+SINTDCT{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTDCT{I}=0; MPRINT(TAXSCF): * Constraining interest deduction amount to be no more than the reported year 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.; MPRINT(TAXSCF): IF (HAVELN{I}=1 & AVINTDCT{I} > 0 & CMOPAY{I} > 0 & (AVINTDCT{I} > CMOPAY{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTDCT{I}=CMOPAY{I}*12; MPRINT(TAXSCF): CINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): SINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELN{I}=1 & AVINTDCT{I} > 0 & AMTOUT{I} > 0 & (AVINTDCT{I} > .25*AMTOUT{I})) THEN DO; MPRINT(TAXSCF): AVINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): CINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELN{I}=1 & Y1=YY1*10+1 & AVINTDCT{I}=0 & NMYR{I}^=2004) 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}= /; MPRINT(TAXSCF): * 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; MPRINT(TAXSCF): IF (X702=1 & X714=1 & X7135=5) THEN DO; MPRINT(TAXSCF): TOTDEDCTM=TOTDEDCTM+(AVINTDCT{I}/X715)*(HAVELN{I}=1); MPRINT(TAXSCF): END; 320 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE TOTDEDCTM=TOTDEDCTM+AVINTDCT{I}; MPRINT(TAXSCF): * Total amount outstanding on loans; MPRINT(TAXSCF): TOTAMTOUTM=TOTAMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): * Need to divide mortgages up by date, pre 10/13/87 mortgages are considered grandfathered debt by IRS, and different limits apply to mortgages taken out after 12/15/2017; MPRINT(TAXSCF): IF ((LNSTYR{I}=1987 & LNSTMN{I} < 10) | (LNSTYR{I} < 1987)) THEN DO; MPRINT(TAXSCF): GRFAMTOUTM=GRFAMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((LNSTYR{I}=2017 & LNSTMN{I}=12) | (LNSTYR{I} > 2017)) THEN DO; MPRINT(TAXSCF): A17AMTOUTM=A17AMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((LNSTYR{I}=1987 & LNSTMN {I} >= 10) | (1987 < LNSTYR{I} < 2017) | (LNSTYR{I}=2017 & LNSTMN{I}<=11)) THEN DO; MPRINT(TAXSCF): HAAMTOUTM=HAAMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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, 3, or 4 as home acquisition debt (same as a mortgage, counts toward mortgage balance limit), while HELOCs with other use codes counted as home equity debt. Ignoring the mopup as we dont know if that LOC is secured by a home; MPRINT(TAXSCF): ARRAY CMOPAYL {*} CMOPAYL1 CMOPAYL2 CMOPAYL3; MPRINT(TAXSCF): ARRAY SINTDCTL {*} SINTDCTL1 SINTDCTL2 SINTDCTL3; MPRINT(TAXSCF): ARRAY AQDBT {*} AQDBTL1 AQDBTL2 AQDBTL3; MPRINT(TAXSCF): ARRAY AQINT {*} AQINTL1 AQINTL2 AQINTL3; MPRINT(TAXSCF): ARRAY EQDBT {*} EQDBTL1 EQDBTL2 EQDBTL3; MPRINT(TAXSCF): ARRAY SBYHOME {*} X1103 X1114 X1125; MPRINT(TAXSCF): ARRAY DOOWE {*} X1105 X1116 X1127; MPRINT(TAXSCF): ARRAY LNPURP {*} X1106 X1117 X1128; MPRINT(TAXSCF): ARRAY AMTOUTL {*} X1108 X1119 X1130; MPRINT(TAXSCF): ARRAY TYPAYL {*} X1109 X1120 X1131; MPRINT(TAXSCF): ARRAY TYPAYLF {*} X1110 X1121 X1132; MPRINT(TAXSCF): ARRAY INTRATEL {*} X1111 X1122 X1133; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): TOTAQDBTL=0; MPRINT(TAXSCF): TOTEQDBTL=0; MPRINT(TAXSCF): TOTDEDCTL=0; MPRINT(TAXSCF): TOTAQDEDCTL=0; MPRINT(TAXSCF): TOTLOCINVEX=0; MPRINT(TAXSCF): DO I=1 TO DIM(CMOPAYL); MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): AQDBT{I}=0; MPRINT(TAXSCF): AQINT{I}=0; MPRINT(TAXSCF): EQDBT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (X1101=1) THEN DO; MPRINT(TAXSCF): DO I=1 TO DIM(SBYHOME); MPRINT(TAXSCF): IF (SBYHOME{I}=1 & DOOWE{I}=1) THEN DO; MPRINT(TAXSCF): IF (TYPAYL{I} > 0) THEN DO; MPRINT(MOCONV): IF (TYPAYLF{I}=1) THEN CMOPAYL{I}=TYPAYL{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=2) THEN CMOPAYL{I}=TYPAYL{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=3) THEN CMOPAYL{I}=TYPAYL{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=4) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=5) THEN CMOPAYL{I}=TYPAYL{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=6) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=20) THEN CMOPAYL{I}=TYPAYL{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=21) THEN CMOPAYL{I}=TYPAYL{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=8) THEN CMOPAYL{I}=TYPAYL{I}/12; 321 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=11) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=12) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=23) THEN CMOPAYL{I}=TYPAYL{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=24) THEN CMOPAYL{I}=TYPAYL{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=25) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=31) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=18) THEN CMOPAYL{I}=TYPAYL{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=0) THEN CMOPAYL{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}>.Z & TYPAYLF{I}^=-1 & TYPAYLF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}>.Z & TYPAYL{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}<=.Z) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYL{I}^=-1 & TYPAYL{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYLF{I}= TYPAYL{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TYPAYL{I} IN(0 -1 -2)) THEN DO; MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (INTRATEL{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=((INTRATEL{I}/10000)*AMTOUTL{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEL{I} IN(0 -1)) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTL{I} > 0 & CMOPAYL{I} > 0 & SINTDCTL{I} > CMOPAYL{I}*12) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=CMOPAYL{I}*12; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (LNPURP{I} IN(1 3 4)) THEN DO; MPRINT(TAXSCF): AQDBT{I}=AMTOUTL{I}; MPRINT(TAXSCF): AQINT{I}=SINTDCTL{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (LNPURP{I} NOT IN(1 3 4)) THEN DO; MPRINT(TAXSCF): EQDBT{I}=AMTOUTL{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTDEDCTL=TOTDEDCTL+SINTDCTL{I}; MPRINT(TAXSCF): TOTAQDEDCTL=TOTAQDEDCTL+AQINT{I}; MPRINT(TAXSCF): TOTAQDBTL=TOTAQDBTL+AQDBT{I}; MPRINT(TAXSCF): TOTEQDBTL=TOTEQDBTL+EQDBT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * Dropped third column of grid for 2010 forward; MPRINT(TAXSCF): * Create arrays for various other property loan components; MPRINT(TAXSCF): ARRAY TLMTHO {*} TLMTHO1 TLMTHO2 TLMTHO3; MPRINT(TAXSCF): ARRAY CMOPAYO {*} CMOPAYO1 CMOPAYO2 CMOPAYO3; MPRINT(TAXSCF): ARRAY AMOPAYO {*} AMOPAYO1 AMOPAYO2 AMOPAYO3; MPRINT(TAXSCF): ARRAY PAYLFTO {*} PAYLFTO1 PAYLFTO2 PAYLFTO3; MPRINT(TAXSCF): ARRAY AMTOWEO {*} AMTOWEO1 AMTOWEO2 AMTOWEO3; 322 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ARRAY AMTOWE_1O {*} AMTOWE_1O1 AMTOWE_1O2 AMTOWE_1O3; MPRINT(TAXSCF): ARRAY AINTDCTO {*} AINTDCTO1 AINTDCTO2 AINTDCTO3; MPRINT(TAXSCF): ARRAY LNAGEO {*} LNAGEO1 LNAGEO2 LNAGEO3; MPRINT(TAXSCF): ARRAY CURBALO {*} CURBALO1 CURBALO2 CURBALO3; MPRINT(TAXSCF): ARRAY CURBAL_1O {*} CURBAL_1O1 CURBAL_1O2 CURBAL_1O3; MPRINT(TAXSCF): ARRAY CINTDCTO {*} CINTDCTO1 CINTDCTO2 CINTDCTO3; MPRINT(TAXSCF): ARRAY DCTDIFFO {*} DCTDIFFO1 DCTDIFFO2 DCTDIFFO3; MPRINT(TAXSCF): ARRAY SINTDCTO {*} SINTDCTO1 SINTDCTO2 SINTDCTO3; MPRINT(TAXSCF): ARRAY AVINTDCTO {*} AVINTDCTO1 AVINTDCTO2 AVINTDCTO3; MPRINT(TAXSCF): ARRAY QUALPROP {*} QPROP1 QPROP2 QPROP3; MPRINT(TAXSCF): ARRAY QUALPINV {*} QPINV1 QPINV2 QPINV3; MPRINT(TAXSCF): ARRAY ADJBORRO {*} ADJBORRO1 ADJBORRO2 ADJBORRO3; MPRINT(TAXSCF): ARRAY NMPMTO {*} X1717 X1817 X1917; MPRINT(TAXSCF): ARRAY NMYRO {*} X1716 X1816 X1916; MPRINT(TAXSCF): ARRAY REGPAYFO {*} X1719 X1819 X1919; MPRINT(TAXSCF): ARRAY REGPAYO {*} X1718 X1818 X1918; MPRINT(TAXSCF): ARRAY TYPAYFO {*} X1724 X1824 X1924; MPRINT(TAXSCF): ARRAY TYPAYO {*} X1723 X1823 X1923; MPRINT(TAXSCF): ARRAY LNSTMNO {*} X1712 X1812 X1912; MPRINT(TAXSCF): ARRAY LNSTYRO {*} X1713 X1813 X1913; MPRINT(TAXSCF): ARRAY HBALLNO {*} X1721 X1821 X1921; MPRINT(TAXSCF): ARRAY BALLNO {*} X1722 X1822 X1922; MPRINT(TAXSCF): ARRAY AMTBORRO {*} X1714 X1814 X1914; MPRINT(TAXSCF): ARRAY JAMTBORRO {*} J1714 J1814 J1914; MPRINT(TAXSCF): ARRAY AMTOUTO {*} X1715 X1815 X1915; MPRINT(TAXSCF): ARRAY JAMTOUTO {*} J1715 J1815 J1915; MPRINT(TAXSCF): ARRAY HAVELNO {*} X1711 X1811 X1911; MPRINT(TAXSCF): ARRAY INTRATEO {*} X1726 X1826 X1926; MPRINT(TAXSCF): ARRAY ONSCHEDO {*} X7554 X7553 X7552; MPRINT(TAXSCF): ARRAY HINCOMEO {*} X1729 X1829 X1929; MPRINT(TAXSCF): ARRAY INCOMEO {*} X1730 X1830 X1930; MPRINT(TAXSCF): ARRAY PROPTYPE {*} X1703 X1803 X1903; MPRINT(TAXSCF): ARRAY PERPROP {*} X1705 X1805 X1905; MPRINT(TAXSCF): ARRAY PROPVAL {*} X1706 X1806 X1906; MPRINT(TAXSCF): ARRAY TAXINS {*} X1720 X1820 X1920; MPRINT(TAXSCF): ARRAY PURCHYRO {*} X1708 X1808 X1908; MPRINT(TAXSCF): ARRAY LIMFLAG {*} LIMFL1 LIMFL2 LIMFL3; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTHO); MPRINT(TAXSCF): TLMTHO{I}=0; MPRINT(TAXSCF): CMOPAYO{I}=0; MPRINT(TAXSCF): PAYLFTO{I}=0; MPRINT(TAXSCF): AMTOWEO{I}=0; MPRINT(TAXSCF): AMTOWE_1O{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): LNAGEO{I}=0; MPRINT(TAXSCF): CURBALO{I}=0; MPRINT(TAXSCF): CURBAL_1O{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): DCTDIFFO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): AVINTDCTO{I}=0; MPRINT(TAXSCF): QUALPROP{I}=0; MPRINT(TAXSCF): QUALPINV{I}=0; MPRINT(TAXSCF): ADJBORRO{I}=0; MPRINT(TAXSCF): LIMFLAG{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTAMTOUTO=0; 323 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): TOTDEDCTO=0; MPRINT(TAXSCF): QUALOTHPROP=0; MPRINT(TAXSCF): QUALINVPROP=0; MPRINT(TAXSCF): TOTINVPDCT=0; MPRINT(TAXSCF): FMVOP=0; MPRINT(TAXSCF): DO I=1 TO DIM(NMPMTO); MPRINT(TERMCON): IF (NMYRO{I}=0 & NMPMTO{I}=0) THEN DO; MPRINT(TERMCON): TLMTHO{I}=0; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRO{I}^=0|NMPMTO{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRO{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRO{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHO{I}=NMYRO{I}; MPRINT(TERMCON): IF (NMPMTO{I}=0) THEN DO; MPRINT(TERMCON): NMPMTO{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRO{I}>0) THEN DO; MPRINT(TERMCON): TLMTHO{I}=NMYRO{I}*12; MPRINT(TERMCON): IF (NMPMTO{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYFO{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMTO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFO{I}=-7) THEN DO; MPRINT(TERMCON): NMPMTO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFO{I}=8) THEN DO; MPRINT(TERMCON): NMPMTO{I}=1; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFO{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYFO{I}=1) THEN NMPMTO{I}=TLMTHO{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=2) THEN NMPMTO{I}=TLMTHO{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=3) THEN NMPMTO{I}=TLMTHO{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=4) THEN NMPMTO{I}=TLMTHO{I}; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=5) THEN NMPMTO{I}=TLMTHO{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=6) THEN NMPMTO{I}=TLMTHO{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=20) THEN NMPMTO{I}=TLMTHO{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=21) THEN NMPMTO{I}=TLMTHO{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=11) THEN NMPMTO{I}=TLMTHO{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=12) THEN NMPMTO{I}=TLMTHO{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=23) THEN NMPMTO{I}=TLMTHO{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=24) THEN NMPMTO{I}=TLMTHO{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=25) THEN NMPMTO{I}=TLMTHO{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=31) THEN NMPMTO{I}=TLMTHO{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=18) THEN NMPMTO{I}=TLMTHO{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=0) THEN NMPMTO{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}>.Z & REGPAYFO{I}^=-1 & REGPAYFO{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMTO{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTHO{I}= REGPAYFO{I}= NMPMTO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHO{I}>.Z & TLMTHO{I}<-2) THEN DO; MPRINT(MOCONV): NMPMTO{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTHO{I}= REGPAYFO{I}= NMPMTO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHO{I}<=.Z) THEN NMPMTO{I}=TLMTHO{I}; MPRINT(MOCONV): ELSE IF (TLMTHO{I}^=-1 & TLMTHO{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFO{I}= TLMTHO{I}= "SETTING AMT=."; MPRINT(MOCONV): NMPMTO{I}=.; 324 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTO{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHO{I}=-1; MPRINT(TERMCON): IF (NMYRO{I}=0) THEN DO; MPRINT(TERMCON): NMYRO{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTO{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYFO{I}; MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYFO{I}>0) THEN PFREQ=TYPAYFO{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTHO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; MPRINT(TERMCON): TLMTHO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): IF (NMPMTO{I}>0) THEN DO; MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTHO{I}=NMPMTO{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}))); MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12))); MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTHO{I}=NMPMTO{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTHO{I}=NMPMTO{I}*2/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTHO{I}=NMPMTO{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTHO{I}=NMPMTO{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTHO{I}=NMPMTO{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTHO{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): TLMTHO{I}=NMPMTO{I}; MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMTO{I}= PFREQ= TLMTHO{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}>.Z & NMPMTO{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTHO{I}=NMPMTO{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMTO{I}= PFREQ= TLMTHO{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}=0) THEN TLMTHO{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}<=.Z) THEN TLMTHO{I}=NMPMTO{I}; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}^=-1 & NMPMTO{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMTO{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTHO{I}=.; MPRINT(IMOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTHO{I}>0) THEN DO; MPRINT(TERMCON): NMYRO{I}=MAX(1,INT(.5+(TLMTHO{I}/12))); MPRINT(TERMCON): TLMTHO{I}=MAX(1,ROUND(TLMTHO{I})); MPRINT(TERMCON): END; 325 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TERMCON): IF (NMYRO{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMTO{I}= NMYRO{I}= TLMTHO{I}= REGPAYFO{I}= REGPAYO{I}= TYPAYFO{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAYO{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYFO{I}=1) THEN CMOPAYO{I}=REGPAYO{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=2) THEN CMOPAYO{I}=REGPAYO{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=3) THEN CMOPAYO{I}=REGPAYO{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=4) THEN CMOPAYO{I}=REGPAYO{I}; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=5) THEN CMOPAYO{I}=REGPAYO{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=6) THEN CMOPAYO{I}=REGPAYO{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=20) THEN CMOPAYO{I}=REGPAYO{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=21) THEN CMOPAYO{I}=REGPAYO{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=8) THEN CMOPAYO{I}=REGPAYO{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=11) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=12) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=23) THEN CMOPAYO{I}=REGPAYO{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=24) THEN CMOPAYO{I}=REGPAYO{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=25) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=31) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=18) THEN CMOPAYO{I}=REGPAYO{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=0) THEN CMOPAYO{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}>.Z & REGPAYFO{I}^=-1 & REGPAYFO{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAYO{I}= REGPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYO{I}>.Z & REGPAYO{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAYO{I}= REGPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYO{I}<=.Z) THEN CMOPAYO{I}=REGPAYO{I}; MPRINT(MOCONV): ELSE IF (REGPAYO{I}^=-1 & REGPAYO{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFO{I}= REGPAYO{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(MOCONV): IF (TYPAYFO{I}=1) THEN CMOPAYO{I}=TYPAYO{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=2) THEN CMOPAYO{I}=TYPAYO{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=3) THEN CMOPAYO{I}=TYPAYO{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=4) THEN CMOPAYO{I}=TYPAYO{I}; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=5) THEN CMOPAYO{I}=TYPAYO{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=6) THEN CMOPAYO{I}=TYPAYO{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=20) THEN CMOPAYO{I}=TYPAYO{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=21) THEN CMOPAYO{I}=TYPAYO{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=8) THEN CMOPAYO{I}=TYPAYO{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=11) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=12) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=23) THEN CMOPAYO{I}=TYPAYO{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=24) THEN CMOPAYO{I}=TYPAYO{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=25) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=31) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=18) THEN CMOPAYO{I}=TYPAYO{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=0) THEN CMOPAYO{I}=0; 326 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (TYPAYFO{I}>.Z & TYPAYFO{I}^=-1 & TYPAYFO{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYO{I}= TYPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYO{I}>.Z & TYPAYO{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYO{I}= TYPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYO{I}<=.Z) THEN CMOPAYO{I}=TYPAYO{I}; MPRINT(MOCONV): ELSE IF (TYPAYO{I}^=-1 & TYPAYO{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYFO{I}= TYPAYO{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF NMYRO{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFTO{I}=(TLMTHO{I}-((2004-LNSTYRO{I})*12)); MPRINT(TAXSCF): LNAGEO{I}=TLMTHO{I}-PAYLFTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFTO{I}=0; MPRINT(TAXSCF): LNAGEO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNO); MPRINT(TAXSCF): IF ((HAVELNO{I}=1) & (TAXINS{I} IN(1 2 3)) & TLMTHO{I} > 0 & INTRATEO{I} > 0) THEN DO; MPRINT(TAXSCF): IF (HBALLNO{I}=1) THEN DO; MPRINT(MORTPAY): AMOPAYO{I}=ROUND((MORT((AMTBORRO{I}),.,((INTRATEO{I}/10000)/12),(TLMTHO{I}))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (CMOPAYO{I} > AMOPAYO{I}) THEN CMOPAYO{I}=AMOPAYO{I}; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HBALLNO{I}=5) THEN DO; MPRINT(TAXSCF): IF (AMTBORRO{I} > BALLNO{I}) THEN ADJBORRO{I}=(AMTBORRO{I}-BALLNO{I}); MPRINT(TAXSCF): ELSE IF (AMTBORRO{I} < BALLNO{I}) THEN ADJBORRO{I}=AMTBORRO{I}; MPRINT(TAXSCF): IF ADJBORRO{I} > 0 THEN MPRINT(MORTPAY): AMOPAYO{I}=ROUND((MORT((ADJBORRO{I}),.,((INTRATEO{I}/10000)/12),(TLMTHO{I}))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (AMTBORRO{I}=BALLNO{I}) THEN AMOPAYO{I}=((AMTBORRO{I})*(INTRATEO{I}/10000))/12; MPRINT(TAXSCF): IF (CMOPAYO{I} > AMOPAYO{I}) THEN CMOPAYO{I}=AMOPAYO{I}; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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. 327 The SAS System 13:32 Friday, January 29, 2021 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.; MPRINT(TAXSCF): * 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); MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNO); MPRINT(TAXSCF): IF (PROPTYPE{I} IN(12 13 14 21 22 25 40 49 999) & (HINCOMEO{I}=5 | INCOMEO{I}=-1)) | (PROPTYPE{I} IN(12 13 14 21 22 25 40 49 999) & HINCOMEO{I}=1 & INCOMEO{I} < (CMOPAYO{I}*12)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified properties; MPRINT(TAXSCF): QUALPROP{I}=(HAVELNO{I}=1); MPRINT(TAXSCF): QUALOTHPROP=QUALOTHPROP+QUALPROP{I}; MPRINT(TAXSCF): FMVOP=FMVOP+PROPVAL{I}*(HAVELNO{I}=1); MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & HBALLNO{I} IN(1 5) & NMYRO{I} NOT IN(0 -1 -7) & INTRATEO{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAYO{I} < AMTBORRO{I}*.005) THEN CMOPAYO{I}=MAX(REGPAYO{I},TYPAYO{I}); MPRINT(TAXSCF): 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})); MPRINT(TAXSCF): 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))); MPRINT(TAXSCF): IF LNSTYRO{I}^=2004 THEN AINTDCTO{I}=(CMOPAYO{I}*12)-(AMTOWE_1O{I}-AMTOWEO{I}); MPRINT(TAXSCF): ELSE IF LNSTYRO{I}=2004 THEN AINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | CMOPAYO{I} < 0 | PAYLFTO{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEO{I}=0; MPRINT(TAXSCF): AMTOWE_1O{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & AMTBORRO{I} > 0 & LNAGEO{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTDCTO{I}=(CMOPAYO{I}*12)-(CURBAL_1O{I}-CURBALO{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | AMTBORRO{I} < 0 | LNAGEO{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALO{I}=0; MPRINT(TAXSCF): CURBAL_1O{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): ELSE SINTDCTO{I}=0; MPRINT(TAXSCF): * 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 the home was not purchased in the survey year. If the home was purchased in the survey year, set deduction to zero.; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I}=0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=2004 & PURCHYRO{I}=2004) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=0; 328 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=2004) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & CURBALO{I} > 0 & CURBAL_1O{I} > 0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & (CURBALO{I} <= 0 & CURBAL_1O{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTO{I} > 0 & CINTDCTO{I} > 0) THEN DCTDIFFO{I}=CINTDCTO{I}-SINTDCTO{I}; MPRINT(TAXSCF): ELSE DCTDIFFO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (NMYRO{I} IN(-1 -7) & NMPMTO{I} IN(-1 -7)) & AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (INTRATEO{I}=-1)) THEN DO; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest deduction; MPRINT(TAXSCF): IF ((CINTDCTO{I} + AINTDCTO{I} + SINTDCTO{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=(CINTDCTO{I}+AINTDCTO{I}+SINTDCTO{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTDCTO{I}=0; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & CMOPAYO{I} > 0 & (AVINTDCTO{I} > CMOPAYO{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): SINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & AMTOUTO{I} > 0 & (AVINTDCTO{I} > .25*AMTOUTO{I})) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): * Compute total deduction and total amount outstanding; MPRINT(TAXSCF): TOTDEDCTO=TOTDEDCTO+((AVINTDCTO{I})*PERPROP{I}/10000)*(HAVELNO{I}=1); 329 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): TOTAMTOUTO=TOTAMTOUTO+AMTOUTO{I}; MPRINT(TAXSCF): * Create flag for loans after 12/15/17, used in computing limits on mortgage interest deduction for home acquistion debt; MPRINT(TAXSCF): LIMFLAG{I}=(LNSTYRO{I}> 2017 | (LNSTYRO{I}=2017 & LNSTMNO{I}=12)); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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 hhs are rational and report the home/properties with the biggest deductions.; MPRINT(TAXSCF): ADJDEDCTO=0; MPRINT(TAXSCF): ADJAMTOUTO=0; MPRINT(TAXSCF): ADJ17AMTOUTO=0; MPRINT(TAXSCF): FMVOTHPROP=0; MPRINT(TAXSCF): IF (QUALOTHPROP > 0) THEN DO; MPRINT(TAXSCF): IF (QUALOTHPROP=1 & QPROP1=1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=1 & QPROP2=1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=1 & QPROP3=1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO3; MPRINT(TAXSCF): ADJ17AMTOUTO=X1915*(LIMFL3=1); MPRINT(TAXSCF): ADJAMTOUTO=X1915*(LIMFL3=0); MPRINT(TAXSCF): FMVOTHPROP=X1906*(X1905/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=2) THEN DO; MPRINT(TAXSCF): IF (QPROP1=1 & QPROP2=1) THEN DO; MPRINT(TAXSCF): IF (AVINTDCTO1 >= AVINTDCTO2) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO2 >= AVINTDCTO1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QPROP1=1 & QPROP3=1) THEN DO; MPRINT(TAXSCF): IF (AVINTDCTO1 >= AVINTDCTO3) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO3 >= AVINTDCTO1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO3; MPRINT(TAXSCF): ADJ17AMTOUTO=X1915*(LIMFL3=1); 330 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ADJAMTOUTO=X1915*(LIMFL3=0); MPRINT(TAXSCF): FMVOTHPROP=X1906*(X1905/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QPROP2=1 & QPROP3=1) THEN DO; MPRINT(TAXSCF): IF (AVINTDCTO2 >= AVINTDCTO3) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO3 >= AVINTDCTO2) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO3; MPRINT(TAXSCF): ADJ17AMTOUTO=X1915*(LIMFL3=1); MPRINT(TAXSCF): ADJAMTOUTO=X1915*(LIMFL3=0); MPRINT(TAXSCF): FMVOTHPROP=X1906*(X1905/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=3) THEN DO; MPRINT(TAXSCF): IF (AVINTDCTO1 >= AVINTDCTO2 & AVINTDCTO1 >= AVINTDCTO3) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO2 >= AVINTDCTO1 & AVINTDCTO2 >= AVINTDCTO3) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO3 >= AVINTDCTO1 & AVINTDCTO3 >= AVINTDCTO2) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO3; MPRINT(TAXSCF): ADJ17AMTOUTO=X1915*(LIMFL3=1); MPRINT(TAXSCF): ADJAMTOUTO=X1915*(LIMFL3=0); MPRINT(TAXSCF): FMVOTHPROP=X1906*(X1905/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (X701=-7 & X7133=1) THEN DO; MPRINT(TAXSCF): HOUSE=(X7134/10000)*X716; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE HOUSE=SUM(0,X604,X614,X623,X716,(X513+X526)); MPRINT(TAXSCF): IF (TOTEQDBTL > 0 & GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL+TOTEQDBTL > (HOUSE)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) > 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=MIN((HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL)),TOTEQDBTL,100000); MPRINT(TAXSCF): ADJDEDCTL=TOTDEDCTL*(ADJEQDBTL/TOTEQDBTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) <= 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=0; MPRINT(TAXSCF): ADJDEDCTL=0; MPRINT(TAXSCF): END; 331 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE IF ((FILESTAT=3) & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) > 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=MIN((HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL)),TOTEQDBTL,50000); MPRINT(TAXSCF): ADJDEDCTL=TOTDEDCTL*(ADJEQDBTL/TOTEQDBTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((FILESTAT=3) & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) <= 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=0; MPRINT(TAXSCF): ADJDEDCTL=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TOTEQDBTL ^=. & TOTDEDCTL ^=.) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=TOTEQDBTL; MPRINT(TAXSCF): ADJDEDCTL=TOTDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TOTEQDBTL > 0 & GRFAMTOUTM+A17AMTOUTM+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= /; MPRINT(TAXSCF): * 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), worksheet changed in 2018; MPRINT(TAXSCF): ADJDEDCT=0; MPRINT(TAXSCF): * case 1 - grandfathered debt, no home acquisition debt, maybe home equity; MPRINT(TAXSCF): IF (GRFAMTOUTM > 0 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & ADJEQDBTL <= 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & ADJEQDBTL > 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+100000)/(GRFAMTOUTM+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & ADJEQDBTL <= 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & ADJEQDBTL > 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+50000)/(GRFAMTOUTM+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * case 2 - some grandfathered debt, some home acquisition debt, maybe home equity; MPRINT(TAXSCF): ELSE IF (GRFAMTOUTM > 0 & (HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & (ADJEQDBTL=0 | ADJEQDBTL <= 100000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & ADJEQDBTL > 100000 & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+100000) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (ADJEQDBTL <= 100000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+ADJEQDBTL),(1000000+ADJEQDBTL))) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (ADJEQDBTL > 100000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 1000000)) 332 The SAS System 13:32 Friday, January 29, 2021 THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+100000),1100000))/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (ADJEQDBTL=0 | ADJEQDBTL <= 50000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & ADJEQDBTL > 50000 & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+50000) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (ADJEQDBTL=0 | ADJEQDBTL <= 50000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+ADJEQDBTL),(500000+ADJEQDBTL))) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (ADJEQDBTL=0 | ADJEQDBTL > 50000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+50000),550000))/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * case 3 - no grandfathered debt, maybe home acquisition, maybe home equity; MPRINT(TAXSCF): ELSE IF (GRFAMTOUTM=0 & (HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | ADJEQDBTL > 0)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 0 & ADJEQDBTL <= 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((100000)/ADJEQDBTL)*ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL <= 1000000) & ADJEQDBTL <= 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL <= 1000000) & ADJEQDBTL > 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+100000)/ (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL > 1000000) & (ADJEQDBTL <= 100000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((1000000+ADJEQDBTL)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL > 1000000) & (ADJEQDBTL > 100000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((1100000)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; 333 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 0 & ADJEQDBTL <= 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((50000)/ADJEQDBTL)*ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000) & ADJEQDBTL <= 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000) & ADJEQDBTL > 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+50000)/ (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000) & (ADJEQDBTL <= 50000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((500000+ADJEQDBTL)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000) & (ADJEQDBTL > 50000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((550000)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * a few obs will come out here, but they either have -1 as the interest rate or are land contracts; MPRINT(TAXSCF): IF ((GRFAMTOUTM > 0 | HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | (ADJEQDBTL*(2004 LE 2016)) > 0 | A17AMTOUTM > 0 & ADJ17AMTOUTO > 0) & ADJDEDCT=0 & X5744 IN(1 5 6) & Y1=YY1*10+1 & X720^=2004) THEN PUT "MORTGAGE DEDUCTION SHOULD NOT BE ZERO " Y1= X5744= X5746= GRFAMTOUTM= HAAMTOUTM= ADJAMTOUTO= TOTAQDBTL= ADJEQDBTL= A17AMTOUTM= ADJ17AMTOUTO= TOTDEDCTM= ADJDEDCTO= ADJDEDCTL= OVERLIM= QUALOTHPROP= CINTDCTM1= CINTDCTM2= CINTDCTM3= CINTDCTO1= CINTDCTO2= X702= X714= X7135= X723=/; MPRINT(TAXSCF): IF ((GRFAMTOUTM > 0 | HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | ADJEQDBTL > 0 | A17AMTOUTM > 0 & ADJ17AMTOUTO > 0) & OVERLIM=. & Y1=YY1*10+1) THEN PUT "OVER LIMIT INDICATOR MISSING " Y1= X5744= X5746= GRFAMTOUTM= HAAMTOUTM= ADJAMTOUTO= TOTAQDBTL= ADJEQDBTL= A17AMTOUTM= ADJ17AMTOUTO= TOTDEDCTM= ADJDEDCTO= ADJDEDCTL= OVERLIM= ADJDEDCT=/; MPRINT(TAXSCF): IF ADJDEDCT >= 100000 & Y1=YY1*10+1 THEN PUT "HUGE MORTGAGE INTEREST DEDUCTION " Y1= TOTDEDCTM= GRFAMTOUTM= HAAMTOUTM= TOTAQDBTL= ADJDEDCTL= ADJEQDBTL= ADJDEDCTO= ADJAMTOUTO= A17AMTOUTM= ADJ17AMTOUTO= HOUSE= QUALOTHPROP= FMVOTHPROP= X5744= X5746= ADJDEDCT= /; MPRINT(TAXSCF): ************Real estate taxes; MPRINT(TAXSCF): * TAXSIM doesnt want local property taxes in amount of itemized deductions, listed as a separate variable; MPRINT(TAXSCF): * 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; MPRINT(TAXSCF): PROPTXRATE=0; MPRINT(TAXSCF): IF (HOUSE > 0 & RESTAXM1 > 0) THEN PROPTXRATE=(RESTAXM1/HOUSE)*100; MPRINT(TAXSCF): IF (PROPTXRATE > 10 & Y1=YY1*10+1) THEN PUT "HIGH PROPERTY TAX RATE " Y1= HOUSE= RESTAXM1= X721= J721= X722= J722= X501= X601= X701= PROPTXRATE=/; MPRINT(TAXSCF): IF (PROPTXRATE > 10 & X722=4) THEN RESTAXM1=X721; MPRINT(TAXSCF): ************Investment interest expense; MPRINT(TAXSCF): * 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 need to add up dividend/interest income. Capital gains 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.; MPRINT(TAXSCF): * 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 334 The SAS System 13:32 Friday, January 29, 2021 loans for investments.; MPRINT(TAXSCF): * LOCs - only counting loans not secured by the residence and with asset or real estate investment as loan purpose.; MPRINT(TAXSCF): IF (X1101=1) THEN DO; MPRINT(TAXSCF): DO I=1 TO DIM(SBYHOME); MPRINT(TAXSCF): IF (SBYHOME{I}=5 & DOOWE{I}=1 & LNPURP{I} IN(76 78 79)) THEN DO; MPRINT(TAXSCF): IF (TYPAYL{I} > 0) THEN DO; MPRINT(MOCONV): IF (TYPAYLF{I}=1) THEN CMOPAYL{I}=TYPAYL{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=2) THEN CMOPAYL{I}=TYPAYL{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=3) THEN CMOPAYL{I}=TYPAYL{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=4) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=5) THEN CMOPAYL{I}=TYPAYL{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=6) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=20) THEN CMOPAYL{I}=TYPAYL{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=21) THEN CMOPAYL{I}=TYPAYL{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=8) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=11) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=12) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=23) THEN CMOPAYL{I}=TYPAYL{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=24) THEN CMOPAYL{I}=TYPAYL{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=25) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=31) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=18) THEN CMOPAYL{I}=TYPAYL{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=0) THEN CMOPAYL{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}>.Z & TYPAYLF{I}^=-1 & TYPAYLF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}>.Z & TYPAYL{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}<=.Z) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYL{I}^=-1 & TYPAYL{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYLF{I}= TYPAYL{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TYPAYL{I} IN(0 -1 -2)) THEN DO; MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (INTRATEL{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=((INTRATEL{I}/10000)*AMTOUTL{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEL{I} IN(0 -1)) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTL{I} > 0 & CMOPAYL{I} > 0 & SINTDCTL{I} > CMOPAYL{I}*12) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=CMOPAYL{I}*12; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTLOCINVEX=TOTLOCINVEX+SINTDCTL{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Other properties - only counting properties held for investment purposes, and hh must receive income from the property.; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNO); 335 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): IF (PROPTYPE{I} IN(41 42 43 44 45 46 47 48) & (INCOMEO{I} > 0)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified properties; MPRINT(TAXSCF): QUALPINV{I}=(HAVELNO{I}=1); MPRINT(TAXSCF): QUALINVPROP=QUALINVPROP+QUALPINV{I}; MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & HBALLNO{I} IN(1 5) & NMYRO{I} NOT IN(0 -1 -7) & INTRATEO{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAYO{I} < AMTBORRO{I}*.005) THEN CMOPAYO{I}=MAX(REGPAYO{I},TYPAYO{I}); MPRINT(TAXSCF): 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})); MPRINT(TAXSCF): 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))); MPRINT(TAXSCF): IF LNSTYRO{I}^=2004 THEN AINTDCTO{I}=(CMOPAYO{I}*12)-(AMTOWE_1O{I}-AMTOWEO{I}); MPRINT(TAXSCF): ELSE IF LNSTYRO{I}=2004 THEN AINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | CMOPAYO{I} < 0 | PAYLFTO{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEO{I}=0; MPRINT(TAXSCF): AMTOWE_1O{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & AMTBORRO{I} > 0 & LNAGEO{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTDCTO{I}=(CMOPAYO{I}*12)-(CURBAL_1O{I}-CURBALO{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | AMTBORRO{I} < 0 | LNAGEO{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALO{I}=0; MPRINT(TAXSCF): CURBAL_1O{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): ELSE SINTDCTO{I}=0; MPRINT(TAXSCF): * 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 the home was not purchased in the survey year. If the home was purchased in the survey year, set deduction to zero.; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I}=0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=2004 & PURCHYRO{I}=2004) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=2004) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Ad hoc fix for negative interest deductions. Basically sets the interest deduction equal to 336 The SAS System 13:32 Friday, January 29, 2021 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.; MPRINT(TAXSCF): IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & CURBALO{I} > 0 & CURBAL_1O{I} > 0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & (CURBALO{I} <= 0 & CURBAL_1O{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTO{I} > 0 & CINTDCTO{I} > 0) THEN DCTDIFFO{I}=CINTDCTO{I}-SINTDCTO{I}; MPRINT(TAXSCF): ELSE DCTDIFFO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (NMYRO{I} IN(-1 -7) & NMPMTO{I} IN(-1 -7)) & AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (INTRATEO{I}=-1)) THEN DO; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest deduction; MPRINT(TAXSCF): IF ((CINTDCTO{I} + AINTDCTO{I} + SINTDCTO{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=(CINTDCTO{I}+AINTDCTO{I}+SINTDCTO{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTDCTO{I}=0; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & CMOPAYO{I} > 0 & (AVINTDCTO{I} > CMOPAYO{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): SINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & AMTOUTO{I} > 0 & (AVINTDCTO{I} > .25*AMTOUTO{I})) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): * Compute total investment interest expense; MPRINT(TAXSCF): TOTINVPDCT=TOTINVPDCT+((AVINTDCTO{I})*PERPROP{I}/10000)*(HAVELNO{I}=1); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Other loans - only counting loans for (non-business) investment purposes; MPRINT(TAXSCF): ARRAY TLMTHI {*} TLMTHI1 TLMTHI2 TLMTHI3 TLMTHI4 TLMTHI5 TLMTHI6; MPRINT(TAXSCF): ARRAY CMOPAYI {*} CMOPAYI1 CMOPAYI2 CMOPAYI3 CMOPAYI4 CMOPAYI5 CMOPAYI6; MPRINT(TAXSCF): ARRAY PAYLFTI {*} PAYLFTI1 PAYLFTI2 PAYLFTI3 PAYLFTI4 PAYLFTI5 PAYLFTI6; MPRINT(TAXSCF): ARRAY AMTOWEI {*} AMTOWEI1 AMTOWEI2 AMTOWEI3 AMTOWEI4 AMTOWEI5 AMTOWEI6; MPRINT(TAXSCF): ARRAY AMTOWE_1I {*} AMTOWE_1I1 AMTOWE_1I2 AMTOWE_1I3 AMTOWE_1I4 AMTOWE_1I5 AMTOWE_1I6; 337 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ARRAY AINTEXPI {*} AINTEXPI1 AINTEXPI2 AINTEXPI3 AINTEXPI4 AINTEXPI5 AINTEXPI6; MPRINT(TAXSCF): ARRAY LNAGEI {*} LNAGEI1 LNAGEI2 LNAGEI3 LNAGEI4 LNAGEI5 LNAGEI6; MPRINT(TAXSCF): ARRAY CURBALI {*} CURBALI1 CURBALI2 CURBALI3 URBALI4 CURBALI5 CURBALI6; MPRINT(TAXSCF): ARRAY CURBAL_1I {*} CURBAL_1I1 CURBAL_1I2 CURBAL_1I3 CURBAL_1I4 CURBAL_1I5 CURBAL_1I6; MPRINT(TAXSCF): ARRAY CINTEXPI {*} CINTEXPI1 CINTEXPI2 CINTEXPI3 CINTEXPI4 CINTEXPI5 CINTEXPI6; MPRINT(TAXSCF): ARRAY DCTDIFFI {*} DCTDIFFI1 DCTDIFFI2 DCTDIFFI3 DCTDIFFI4 DCTDIFFI5 DCTDIFFI6; MPRINT(TAXSCF): ARRAY SINTEXPI {*} SINTEXPI1 SINTEXPI2 SINTEXPI3 SINTEXPI4 SINTEXPI5 SINTEXPI6; MPRINT(TAXSCF): ARRAY AVINTEXPI {*} AVINTEXPI1 AVINTEXPI2 AVINTEXPI3 AVINTEXPI4 AVINTEXPI5 AVINTEXPI6; MPRINT(TAXSCF): ARRAY QUALN {*} QLN1 QLN2 QLN3 QLN4 QLN5 QLN6; MPRINT(TAXSCF): ARRAY NMPMTI {*} X2716 X2733 X2816 X2833 X2916 X2933; MPRINT(TAXSCF): ARRAY NMYRI {*} X2717 X2734 X2817 X2834 X2917 X2934; MPRINT(TAXSCF): ARRAY REGPAYFI {*} X7527 X7526 X7525 X7524 X7523 X7522; MPRINT(TAXSCF): ARRAY REGPAYI {*} X2718 X2735 X2818 X2835 X2918 X2935; MPRINT(TAXSCF): ARRAY TYPAYFI {*} X2720 X2737 X2820 X2837 X2920 X2937; MPRINT(TAXSCF): ARRAY TYPAYI {*} X2719 X2736 X2819 X2836 X2919 X2936; MPRINT(TAXSCF): ARRAY LNSTYRI {*} X2713 X2730 X2813 X2830 X2913 X2930; MPRINT(TAXSCF): ARRAY AMTBORRI {*} X2714 X2731 X2814 X2831 X2914 X2931; MPRINT(TAXSCF): ARRAY JAMTBORRI {*} J2714 J2731 J2814 J2831 J2914 J2931; MPRINT(TAXSCF): ARRAY AMTOUTI {*} X2723 X2740 X2823 X2840 X2923 X2940; MPRINT(TAXSCF): ARRAY JAMTOUTI {*} J2723 J2740 J2823 J2840 J2923 J2940; MPRINT(TAXSCF): ARRAY INTRATEI {*} X2724 X2741 X2824 X2841 X2924 X2941; MPRINT(TAXSCF): ARRAY ONSCHEDI {*} X7521 X7520 X7519 X7518 X7517 X7516; MPRINT(TAXSCF): ; MPRINT(TAXSCF): ARRAY LNTYPE {*} X2710 X2727 X2810 X2827 X2910 X2927; MPRINT(TAXSCF): ARRAY BUSLN {*} X6842 X6843 X6844 X6845 X6846 X6847; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTHI); MPRINT(TAXSCF): TLMTHI{I}=0; MPRINT(TAXSCF): CMOPAYI{I}=0; MPRINT(TAXSCF): PAYLFTI{I}=0; MPRINT(TAXSCF): AMTOWEI{I}=0; MPRINT(TAXSCF): AMTOWE_1I{I}=0; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): LNAGEI{I}=0; MPRINT(TAXSCF): CURBALI{I}=0; MPRINT(TAXSCF): CURBAL_1I{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): DCTDIFFI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; MPRINT(TAXSCF): AVINTEXPI{I}=0; MPRINT(TAXSCF): QUALN{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTLNINVEX=0; MPRINT(TAXSCF): QUALOANINV=0; MPRINT(TAXSCF): DO I=1 TO DIM(NMPMTI); MPRINT(TERMCON): IF (NMYRI{I}=0 & NMPMTI{I}=0) THEN DO; MPRINT(TERMCON): TLMTHI{I}=0; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRI{I}^=0|NMPMTI{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRI{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRI{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHI{I}=NMYRI{I}; MPRINT(TERMCON): IF (NMPMTI{I}=0) THEN DO; MPRINT(TERMCON): NMPMTI{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRI{I}>0) THEN DO; MPRINT(TERMCON): TLMTHI{I}=NMYRI{I}*12; 338 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TERMCON): IF (NMPMTI{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYFI{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMTI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFI{I}=-7) THEN DO; MPRINT(TERMCON): NMPMTI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFI{I}=8) THEN DO; MPRINT(TERMCON): NMPMTI{I}=1; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFI{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYFI{I}=1) THEN NMPMTI{I}=TLMTHI{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=2) THEN NMPMTI{I}=TLMTHI{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=3) THEN NMPMTI{I}=TLMTHI{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=4) THEN NMPMTI{I}=TLMTHI{I}; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=5) THEN NMPMTI{I}=TLMTHI{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=6) THEN NMPMTI{I}=TLMTHI{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=20) THEN NMPMTI{I}=TLMTHI{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=21) THEN NMPMTI{I}=TLMTHI{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=11) THEN NMPMTI{I}=TLMTHI{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=12) THEN NMPMTI{I}=TLMTHI{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=23) THEN NMPMTI{I}=TLMTHI{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=24) THEN NMPMTI{I}=TLMTHI{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=25) THEN NMPMTI{I}=TLMTHI{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=31) THEN NMPMTI{I}=TLMTHI{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=18) THEN NMPMTI{I}=TLMTHI{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=0) THEN NMPMTI{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}>.Z & REGPAYFI{I}^=-1 & REGPAYFI{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMTI{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTHI{I}= REGPAYFI{I}= NMPMTI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHI{I}>.Z & TLMTHI{I}<-2) THEN DO; MPRINT(MOCONV): NMPMTI{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTHI{I}= REGPAYFI{I}= NMPMTI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHI{I}<=.Z) THEN NMPMTI{I}=TLMTHI{I}; MPRINT(MOCONV): ELSE IF (TLMTHI{I}^=-1 & TLMTHI{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFI{I}= TLMTHI{I}= "SETTING AMT=."; MPRINT(MOCONV): NMPMTI{I}=.; MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTI{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHI{I}=-1; MPRINT(TERMCON): IF (NMYRI{I}=0) THEN DO; MPRINT(TERMCON): NMYRI{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTI{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYFI{I}; MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYFI{I}>0) THEN PFREQ=TYPAYFI{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTHI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; 339 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TERMCON): TLMTHI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): IF (NMPMTI{I}>0) THEN DO; MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTHI{I}=NMPMTI{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}))); MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12))); MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTHI{I}=NMPMTI{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTHI{I}=NMPMTI{I}*2/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTHI{I}=NMPMTI{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTHI{I}=NMPMTI{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTHI{I}=NMPMTI{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTHI{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): TLMTHI{I}=NMPMTI{I}; MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMTI{I}= PFREQ= TLMTHI{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}>.Z & NMPMTI{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTHI{I}=NMPMTI{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMTI{I}= PFREQ= TLMTHI{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}=0) THEN TLMTHI{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}<=.Z) THEN TLMTHI{I}=NMPMTI{I}; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}^=-1 & NMPMTI{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMTI{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTHI{I}=.; MPRINT(IMOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTHI{I}>0) THEN DO; MPRINT(TERMCON): NMYRI{I}=MAX(1,INT(.5+(TLMTHI{I}/12))); MPRINT(TERMCON): TLMTHI{I}=MAX(1,ROUND(TLMTHI{I})); MPRINT(TERMCON): END; MPRINT(TERMCON): IF (NMYRI{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMTI{I}= NMYRI{I}= TLMTHI{I}= REGPAYFI{I}= REGPAYI{I}= TYPAYFI{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAYI{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYFI{I}=1) THEN CMOPAYI{I}=REGPAYI{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=2) THEN CMOPAYI{I}=REGPAYI{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=3) THEN CMOPAYI{I}=REGPAYI{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=4) THEN CMOPAYI{I}=REGPAYI{I}; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=5) THEN CMOPAYI{I}=REGPAYI{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=6) THEN CMOPAYI{I}=REGPAYI{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=20) THEN CMOPAYI{I}=REGPAYI{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=21) THEN CMOPAYI{I}=REGPAYI{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=8) THEN CMOPAYI{I}=REGPAYI{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=11) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=12) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)/2; 340 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=23) THEN CMOPAYI{I}=REGPAYI{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=24) THEN CMOPAYI{I}=REGPAYI{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=25) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=31) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=18) THEN CMOPAYI{I}=REGPAYI{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=0) THEN CMOPAYI{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}>.Z & REGPAYFI{I}^=-1 & REGPAYFI{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAYI{I}= REGPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYI{I}>.Z & REGPAYI{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAYI{I}= REGPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYI{I}<=.Z) THEN CMOPAYI{I}=REGPAYI{I}; MPRINT(MOCONV): ELSE IF (REGPAYI{I}^=-1 & REGPAYI{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFI{I}= REGPAYI{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(MOCONV): IF (TYPAYFI{I}=1) THEN CMOPAYI{I}=TYPAYI{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=2) THEN CMOPAYI{I}=TYPAYI{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=3) THEN CMOPAYI{I}=TYPAYI{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=4) THEN CMOPAYI{I}=TYPAYI{I}; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=5) THEN CMOPAYI{I}=TYPAYI{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=6) THEN CMOPAYI{I}=TYPAYI{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=20) THEN CMOPAYI{I}=TYPAYI{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=21) THEN CMOPAYI{I}=TYPAYI{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=8) THEN CMOPAYI{I}=TYPAYI{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=11) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=12) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=23) THEN CMOPAYI{I}=TYPAYI{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=24) THEN CMOPAYI{I}=TYPAYI{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=25) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=31) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=18) THEN CMOPAYI{I}=TYPAYI{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=0) THEN CMOPAYI{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}>.Z & TYPAYFI{I}^=-1 & TYPAYFI{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYI{I}= TYPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYI{I}>.Z & TYPAYI{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYI{I}= TYPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYI{I}<=.Z) THEN CMOPAYI{I}=TYPAYI{I}; MPRINT(MOCONV): ELSE IF (TYPAYI{I}^=-1 & TYPAYI{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYFI{I}= TYPAYI{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF NMYRI{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFTI{I}=(TLMTHI{I}-((2004-LNSTYRI{I})*12)); MPRINT(TAXSCF): LNAGEI{I}=TLMTHI{I}-PAYLFTI{I}; MPRINT(TAXSCF): END; 341 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFTI{I}=0; MPRINT(TAXSCF): LNAGEI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): DO I=1 TO MIN(6,X2709); MPRINT(TAXSCF): IF (LNTYPE{I} IN(76 78 79) & BUSLN{I} IN(0 5 8)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified loans; MPRINT(TAXSCF): QUALN{I}=1; MPRINT(TAXSCF): QUALOANINV=QUALOANINV+QUALN{I}; MPRINT(TAXSCF): IF (NMYRI{I} NOT IN(0 -1 -7) & INTRATEI{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & PAYLFTI{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAYI{I} < AMTBORRI{I}*.005) THEN CMOPAYI{I}=MAX(REGPAYI{I},TYPAYI{I}); MPRINT(TAXSCF): AMTOWEI{I}=CMOPAYI{I}*((1-1/(1+(INTRATEI{I}/10000)/12)**PAYLFTI{I})/ ((INTRATEI{I}/10000)/12)); MPRINT(TAXSCF): AMTOWE_1I{I}=CMOPAYI{I}*((1-1/(1+(INTRATEI{I}/10000)/12)**(PAYLFTI{I}+12))/ ((INTRATEI{I}/10000)/12)); MPRINT(TAXSCF): IF LNSTYRI{I}^=2004 THEN AINTEXPI{I}=(CMOPAYI{I}*12)-(AMTOWE_1I{I}-AMTOWEI{I}); MPRINT(TAXSCF): ELSE IF LNSTYRI{I}=2004 THEN AINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHI{I} < 0 | CMOPAYI{I} < 0 | PAYLFTI{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEI{I}=0; MPRINT(TAXSCF): AMTOWE_1I{I}=0; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & AMTBORRI{I} > 0 & LNAGEI{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTEXPI{I}=(CMOPAYI{I}*12)-(CURBAL_1I{I}-CURBALI{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHI{I} < 0 | AMTBORRI{I} < 0 | LNAGEI{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALI{I}=0; MPRINT(TAXSCF): CURBAL_1I{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUTI{I} > 0 & INTRATEI{I} > 0) THEN SINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): ELSE SINTEXPI{I}=0; MPRINT(TAXSCF): * 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, set the interest expense to zero.; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & PAYLFTI{I}=0) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=CURBAL_1I{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=CINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & LNSTYRI{I}=2004) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTEXPI{I} < 0 | CINTEXPI{I} < 0) & CURBALI{I} > 0 & CURBAL_1I{I} > 0) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=CURBAL_1I{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=CINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTEXPI{I} < 0 | CINTEXPI{I} < 0) & (CURBALI{I} <= 0 & CURBAL_1I{I} <= 0)) THEN DO; 342 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): CINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTEXPI{I} > 0 & CINTEXPI{I} > 0) THEN DCTDIFFI{I}=CINTEXPI{I}-SINTEXPI{I}; MPRINT(TAXSCF): ELSE DCTDIFFI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): CINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEI{I}=-1) THEN DO; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest expense; MPRINT(TAXSCF): IF ((CINTEXPI{I} + AINTEXPI{I} + SINTEXPI{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=(CINTEXPI{I}+AINTEXPI{I}+SINTEXPI{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTEXPI{I}=0; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (AVINTEXPI{I} > 0 & CMOPAYI{I} > 0 & (AVINTEXPI{I} > CMOPAYI{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=CMOPAYI{I}*12; MPRINT(TAXSCF): CINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): SINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AVINTEXPI{I} > 0 & AMTOUTI{I} > 0 & (AVINTEXPI{I} > .25*AMTOUTI{I})) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): CINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): * Compute loan investment interest expense; MPRINT(TAXSCF): TOTLNINVEX=TOTLNINVEX+AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Total investment interest expense, if investment interest expense is greater than interest/dividend income, then expense is limited to income amount; MPRINT(TAXSCF): TOTINTINC=X5708+X5710; MPRINT(TAXSCF): TOTINVEX=0; MPRINT(TAXSCF): TOTINVEX=TOTLOCINVEX+TOTINVPDCT+TOTLNINVEX; MPRINT(TAXSCF): IF TOTINVEX > 0 THEN HINVEX=1; MPRINT(TAXSCF): ELSE HINVEX=0; MPRINT(TAXSCF): IF TOTINVEX > TOTINTINC & Y1=YY1*10+1 THEN PUT "TOO MUCH INVESTMENT INTEREST EXPENSES " Y1= TOTINVEX= TOTLOCINVEX= TOTINVPDCT= TOTLNINVEX= TOTINTINC=/; MPRINT(TAXSCF): IF (TOTINVEX > TOTINTINC) THEN TOTINVEX=TOTINTINC; MPRINT(TAXSCF): * In 1988, 40% of personal interest is deductible, this includes credit cards, car/other vehicle 343 The SAS System 13:32 Friday, January 29, 2021 loans, other consumer loans, loans against life insurance policies, home improvement loans, and non-HELOC LOCs.; MPRINT(TAXSCF): TOTPINEX=0; MPRINT(TAXSCF): **************Charitable Contributions; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): GCHARITY=(X5822=1); MPRINT(TAXSCF): CHARITYAMT=0; MPRINT(TAXSCF): IF (X5822=1 & X5823 > 0) THEN DO; MPRINT(TAXSCF): IF (X5823 > .5*AGI) & (AGI>0) THEN CHARITYAMT=.5*AGI; MPRINT(TAXSCF): ELSE CHARITYAMT=X5823; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF X5822=1 & X5823 > 0 & AGI < 0 & Y1=YY1*10+1 THEN PUT "NEGATIVE AGI BUT CHARITYAMT > 0 " Y1= X5823= CHARITYAMT= X5744= X5746= AGI=; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ITEMDEDCT_FLAG=0 THEN DO; MPRINT(TAXSCF): ADJDEDCT=0; MPRINT(TAXSCF): RESTAXM1=0; MPRINT(TAXSCF): TOTINVEX=0; MPRINT(TAXSCF): CHARITYAMT=0; MPRINT(TAXSCF): TOTPINEX=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): **********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.; MPRINT(TAXSCF): TOTITEMDCT=0; MPRINT(TAXSCF): * no limits on itemized deductions in 1988, 2012 and 2018; MPRINT(TAXSCF): * starting in 2015, itemized deduction phaseout limit for AGI are the same as for personal exemptions, so using EXLIM1-4 in this code; MPRINT(TAXSCF): TEMPITEMDCT=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); MPRINT(TAXSCF): IF TEMPITEMDCT > 0 & ((AGI <= 139500 & FILESTAT^=3) | (AGI <= 69750 & FILESTAT=3)) THEN DO; MPRINT(TAXSCF): TOTITEMDCT=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); MPRINT(TAXSCF): DEDCTLIM=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TEMPITEMDCT > 0 & DEDCTLIM^=0 THEN DO; MPRINT(TAXSCF): ITDLIM=139500*(FILESTAT^=3)+69750*(FILESTAT=3); MPRINT(TAXSCF): DEDCTLIM=1; MPRINT(TAXSCF): IWLINE1=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); MPRINT(TAXSCF): IF (IWLINE1-TOTINVEX <= 0) THEN TOTITEMDCT=IWLINE1; MPRINT(TAXSCF): ELSE IF (IWLINE1-TOTINVEX > 0) THEN DO; MPRINT(TAXSCF): IWLINE4=(IWLINE1-TOTINVEX)*.80; MPRINT(TAXSCF): IWLINE7=AGI-ITDLIM; MPRINT(TAXSCF): IWLINE8=IWLINE7*.03; MPRINT(TAXSCF): IWLINE9=MIN(IWLINE4,IWLINE8); MPRINT(TAXSCF): TOTITEMDCT=IWLINE1-IWLINE9; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TEMPITEMDCT=0 THEN DEDCTLIM=0; MPRINT(TAXSCF): * NOTE: Change in worksheet for 2006; MPRINT(TAXSCF): * no limits on exemptions in 1988 and 2012, no exemptions in 2018; MPRINT(TAXSCF): TOTEXPTAMT=0; MPRINT(TAXSCF): EXPTLIM=0; MPRINT(TAXSCF): EXLIM=139500*(FILESTAT=1)+209250*(FILESTAT IN(2 5)) +104625*(FILESTAT=3)+174400*(FILESTAT=4); MPRINT(TAXSCF): EXPAGIT=122500*(FILESTAT^=3)+61250*(FILESTAT=3); MPRINT(TAXSCF): DLINE6=2500*(FILESTAT^=3)+1250*(FILESTAT=3); MPRINT(TAXSCF): IF (AGI <= EXLIM) THEN TOTEXPTAMT=TOTEXPT*3050; MPRINT(TAXSCF): ELSE IF (AGI > EXLIM) THEN DO; 344 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): EXPTLIM=1; MPRINT(TAXSCF): EWLINE2=TOTEXPT*3050; MPRINT(TAXSCF): EWLINE5=AGI-EXLIM; MPRINT(TAXSCF): IF EWLINE5 > EXPAGIT THEN TOTEXPTAMT=TOTEXPT*0; MPRINT(TAXSCF): ELSE IF EWLINE5 <= EXPAGIT THEN DO; MPRINT(TAXSCF): EWLINE6=ROUND((EWLINE5/DLINE6),1); MPRINT(TAXSCF): EWLINE7=EWLINE6*.02; MPRINT(TAXSCF): EWLINE8=EWLINE7*EWLINE2; MPRINT(TAXSCF): TOTEXPTAMT=EWLINE2-EWLINE8; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Standard deduction by filing status, including addition deduction amount for over 65, dont have any info on blindness. Also compute number of age exemptions and flag nonfilers based on IRS filing thresholds and a few other assumptions. Nonfilers also cannot have negative AGI, losses from business or capital gains or more than 1/3 of the lowest filing threshold, which is married, filing separately; MPRINT(TAXSCF): BUSRENTCAPLOSS=(TBUSINC < 0 | RENTINC < 0 | CAPGLINC < 0); MPRINT(TAXSCF): HWSINCSE=(WSINCOME >= (.33*3030) | WSINCSP >= (.33*3030) | TBUSINC >= (.33*3030)); MPRINT(TAXSCF): STDDCT=0; MPRINT(TAXSCF): IF (FILESTAT=1 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=4750; MPRINT(TAXSCF): NONFILER=(0 < AGI < 7800)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=1 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=5900; MPRINT(TAXSCF): NONFILER=(0 < AGI < 8950)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=2 & TUAGE < 65 & SPAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=9500; MPRINT(TAXSCF): NONFILER=(0 < AGI < 15600)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=2 & TUAGE >= 65 & SPAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=11400; MPRINT(TAXSCF): NONFILER=(0 < AGI < 17500)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=2 & (TUAGE >= 65 | SPAGE >= 65)) THEN DO; MPRINT(TAXSCF): STDDCT=10450; MPRINT(TAXSCF): NONFILER=(0 < AGI < 16550)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=4750; MPRINT(TAXSCF): NONFILER=(AGI < 3030)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=5900; MPRINT(TAXSCF): NONFILER=(AGI < 3030)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=4 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=7000; MPRINT(TAXSCF): NONFILER=(0 < AGI < 10050)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=4 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=8150; MPRINT(TAXSCF): NONFILER=(0 < AGI < 11200)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=5 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=9500; MPRINT(TAXSCF): NONFILER=(AGI < 12550)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; 345 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE IF (FILESTAT=5 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=10450; MPRINT(TAXSCF): NONFILER=(0 < AGI < 13500)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): AGEXMP=(TUAGE > 65) + (SPAGE > 65)*(FILESTAT=2); MPRINT(TAXSCF): * Did the hh itemize; MPRINT(TAXSCF): * No itemization question in 1989 or 1992, so itemize will be zero; MPRINT(TAXSCF): ITEMIZE=(TAXUNIT=0)*(X7367=1 | X7368=1 | X7369=1)+(TAXUNIT=1)*(X7368=1)+(TAXUNIT=2)*(X7369=1); MPRINT(TAXSCF): CITEMIZE=(TOTITEMDCT => STDDCT); MPRINT(TAXSCF): * Construct other variables needed for TAXSIM; MPRINT(TAXSCF): TAXUNITID=Y1*100+TAXUNIT; MPRINT(TAXSCF): YEAR=2003; MPRINT(TAXSCF): AGECL=1*(TUAGE < 26)+2*(26<=TUAGE<35)+3*(35<=TUAGE<45) +4*(45<=TUAGE<55)+5*(55<=TUAGE<65)+6*(TUAGE>=65); MPRINT(TAXSCF): * 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).; MPRINT(TAXSCF): STCAPINC=0; MPRINT(TAXSCF): LTCAPINC=0; MPRINT(TAXSCF): IF (AGICL IN(1)) THEN DO; MPRINT(TAXSCF): IF (CAPGLINC > 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.86; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.86); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (CAPGLINC < 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.66; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.66); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AGICL IN(2)) THEN DO; MPRINT(TAXSCF): IF (CAPGLINC > 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.89; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.89); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (CAPGLINC < 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.67; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.67); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AGICL IN(3)) THEN DO; MPRINT(TAXSCF): IF (CAPGLINC > 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.94; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.94); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (CAPGLINC < 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.59; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.59); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ARRAY NEG_1 {*} TBUSINC OTHINC RENTINC OTHPINC; MPRINT(TAXSCF): DO I=1 TO DIM(NEG_1); MPRINT(TAXSCF): IF NEG_1{I}=-1 THEN NEG_1{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): UNADJTOTDEDCT=MAX(0,(ADJDEDCT+TOTINVEX+CHARITYAMT)); MPRINT(TAXSCF): CHCAREXP=0; MPRINT(TAXSCF): TINCOME=WSINCOME+WSINCSP+TBUSINC+INTINC+NTAXINC+DIVINC+CAPGLINC+RENTINC +UNEMPINC+GSSINC+PENINC+AFDCINC+OTHINC; 346 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): TOTXINC=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC +UNEMPINC+GSSINC+PENINC+OTHINC; MPRINT(TAXSCF): *set 3000 max loss for capital gains for comparison with IRS estimates; MPRINT(TAXSCF): IF CAPGLINC < -3000 THEN CAPGL3K=-3000; MPRINT(TAXSCF): ELSE CAPGL3K=CAPGLINC; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (TOTXINC=0 & TINCOME > 0 & AFDCINC=0 & NTAXINC=0 & TAXUNIT < 3 & Y1=YY1*10+1) THEN PUT "TOTXINC IS ZERO BUT TINCOME > 0 " YY1= Y1= TOTXINC= TINCOME= WSINCOME= WSINCSP= TBUSINC= INTINC= NTAXINC= DIVINC= RENTINC= UNEMPINC= AFDCINC= GSSINC= PENINC= OTHINC= CAPGLINC= RAGE= SPAGE= FILESTAT= TAXUNIT= X4100= X4700=/; MPRINT(TAXSCF): * Adding in payroll tax liability and mtr, assuming employee pays both employee and employer share, and 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 earning 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 tax year, 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 caculate the payroll liability and mtr. Computing the payroll atr in a similar fashion. NOTE: Need to adjust for different amounts used to compute the mtr, initially computing payroll mtr for adding $1 to earnings.; MPRINT(TAXSCF): * Need to adjust for 1988, 2% credit for SE, in 1991, limit on medicare tax; MPRINT(TAXSCF): ** earnings from wages and businesses for head and spouse/parnter; MPRINT(TAXSCF): REARN=R_LABORINC+R_BUSINC; MPRINT(TAXSCF): SPEARN=SP_LABORINC+SP_BUSINC; MPRINT(TAXSCF): HHEARN=REARN+SPEARN; MPRINT(TAXSCF): TWSINC=WSINCOME+WSINCSP; MPRINT(TAXSCF): PAYROLLIAB=0; MPRINT(TAXSCF): PAYROLLMTR=0; MPRINT(TAXSCF): PAYROLLATR=0; MPRINT(TAXSCF): IF TAXUNIT=0 THEN DO; MPRINT(TAXSCF): IF (X4106 IN(1 2 3 4 -7) & X4706=0) | (X4106=0 & X4706 IN(1 2 3 4 -7)) | (X4106=0 & X4706=0 & X102=0 & (TWSINC > 0 | TBUSINC > 0)) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(87000,(TWSINC+TBUSINC*(TBUSINC >0)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*.029)*(2004 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*.029)*(2004 EQ 1992); MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 87000)*(100*.124))+ (100*.029)*(2004 GE 1995)+ (100*.029)*(2004 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB >0) THEN PAYROLLATR=100*(PAYROLLIAB/(TWSINC+TBUSINC*(TBUSINC > 0))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X4106 IN(1 2 3 4 -7) & X4706 IN(1 2 3 4 -7)) THEN DO; MPRINT(TAXSCF): IF (X4115 >=1 & X4715 >=1 & HHEARN > 0) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(87000,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(REARN/HHEARN))*.029*(2004 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*(REARN/HHEARN))*.029*(2004 EQ 1992)+ MIN(87000,((TWSINC+TBUSINC*(TBUSINC >0))*(SPEARN/HHEARN)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(SPEARN/HHEARN))*.029*(2004 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*(SPEARN/HHEARN))*.029*(2004 EQ 1992); MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(REARN/HHEARN) <= 87000)*(100*.124))+(100*.029)*(2004 GE 1995)+ (100*.029)*(2004 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1)*(REARN/HHEARN) <= 125000); MPRINT(TAXSCF): IF ((MIN(87000,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(REARN/HHEARN))*.029) > 0) THEN PAYROLLATR=100*((MIN(87000,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*.124 + ((2004 GE 1995)*((TWSINC+TBUSINC*(TBUSINC >0))*(REARN/HHEARN))*.029)+ ((2004 EQ 1992)*(MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*(REARN/HHEARN))*.029))/ ((TWSINC+TBUSINC*(TBUSINC > 0))*(REARN/HHEARN))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X4115 =-1 & X4715=-1) | (X4115 >=1 & X4715=-1) | (X4115=-1 & X4715 >=1) | (HHEARN=0) THEN DO; MPRINT(TAXSCF): IF ((TWSINC+TBUSINC*(TBUSINC >0)) <= 87000) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=(TWSINC+TBUSINC*(TBUSINC >0))*.124+ (TWSINC+TBUSINC*(TBUSINC >0))*.029; 347 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((TWSINC+TBUSINC*(TBUSINC >0)) > 87000) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(2*87000,((TWSINC+TBUSINC*(TBUSINC >0))))*.124+ (TWSINC+TBUSINC*(TBUSINC >0))*.029*(2004 GE 1995)+ MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*.029*(2004 EQ 1992); MPRINT(TAXSCF): END; MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(.5) <= 87000)*(100*.124))+(100*.029)*(2004 GE 1995)+ (100*.029)*(2004 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB*.5 > 0) THEN PAYROLLATR=100*((PAYROLLIAB*.5)/((TWSINC+TBUSINC*(TBUSINC >0))*(.5))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X4106=0 & X4706=0 & X102^=0 & (TWSINC > 0 | TBUSINC > 0)) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=2*(MIN(87000,((TWSINC+TBUSINC*(TBUSINC >0))*(.5)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(.5))*.029*(2004 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)*(.5)))*.029)*(2004 EQ 1992)); MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(.5) <= 87000)*(100*.124))+(100*.029)*(2004 GE 1995)+ (100*.029)*(2004 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB*.5 > 0) THEN PAYROLLATR=100*((PAYROLLIAB*.5)/((TWSINC+TBUSINC*(TBUSINC >0))*(.5))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TAXUNIT >= 1 THEN DO; MPRINT(TAXSCF): IF (WSINCOME > 0 | TBUSINC > 0) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(87000,(WSINCOME+TBUSINC*(TBUSINC >0)))*.124 + ((WSINCOME+TBUSINC*(TBUSINC >0))*.029)*(2004 GE 1995)+ (MIN(125000,(WSINCOME+TBUSINC*(TBUSINC >0)))*.029)*(2004 EQ 1992); MPRINT(TAXSCF): PAYROLLMTR=(((WSINCOME+TBUSINC*(TBUSINC > 0)+1)<=87000)*(100*.124))+ (100*.029)*(2004 GE 1995)+ (100*.029)*(2004 EQ 1992)*((WSINCOME+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB >0) THEN PAYROLLATR=100*(PAYROLLIAB/(WSINCOME+TBUSINC*(TBUSINC > 0))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF PAYROLLIAB=0 & PAYROLLMTR=0 & PAYROLLATR=0 & (TWSINC > 0 | TBUSINC > 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= TWSINC= TBUSINC= R_LABORINC= R_BUSINC= R_SOLEPROP= SP_LABORINC= SP_BUSINC= SP_SOLEPROP= REARN= SPEARN= HHEARN= TAXUNIT=/; MPRINT(TAXSCF): * Check for missing variables; MPRINT(TAXSCF): ARRAY CHVARS {*} YY1 Y1 CHARITYAMT X5823 TOTITEMDCT STDDCT AGI AGICL AGIGE50K DEDCTLIM X7372 X7018 X8023 X105 PERSEXP KIDS TOTEXPT FILESTAT TOTEXPTAMT EXPTLIM RAGE SPAGE TUAGE YEAR STATE TAXUNIT WSINCOME WSINCSP TBUSINC NTAXINC INTINC DIVINC CAPGLINC RENTINC UNEMPINC CHSPALINC AFDCINC PENINC OTHINC GSSINC OTHPINC NONTAX RENT UNADJTOTDEDCT CHCAREXP TINCOME TOTXINC STCAPINC LTCAPINC PAYROLLIAB PAYROLLMTR PAYROLLATR LWP KIDSU17 KIDSU18 KIDSU13; MPRINT(TAXSCF): DO I=1 TO DIM(CHVARS); MPRINT(TAXSCF): IF CHVARS{I}=. THEN PUT "MISSING VALUE FOR " Y1= CHVARS{I}=; MPRINT(TAXSCF): END; MPRINT(TAXSCF): RUN; NOTE: The file "null.txt" is: Filename=/disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code/null.txt, Owner Name=taxsim,Group Name=taxsim, Access Permission=-rw-r--r--, Last Modified=29Jan2021:13:34:55 NOTE: 862 records were written to the file "null.txt". The minimum record length was 0. The maximum record length was 373. NOTE: There were 27541 observations read from the data set WORK.SCF. NOTE: The data set WORK.SCF has 27541 observations and 6029 variables. NOTE: DATA statement used (Total process time): real time 0.83 seconds cpu time 0.83 seconds MPRINT(TAXSCF): * Create a dataset for full TAXSIM. Breaking out total itemized deductions into its parts - have 348 The SAS System 13:32 Friday, January 29, 2021 applied the limits for the mortgage interest deduction and investment interest expense, but not for charitable contributions.; MPRINT(TAXSCF): PROC SORT DATA=SCF; MPRINT(TAXSCF): BY TAXUNITID; MPRINT(TAXSCF): RUN; NOTE: There were 27541 observations read from the data set WORK.SCF. NOTE: The data set WORK.SCF has 27541 observations and 6029 variables. NOTE: PROCEDURE SORT used (Total process time): real time 0.54 seconds cpu time 0.54 seconds MPRINT(TAXSCF): proc means; MPRINT(TAXSCF): var y1 yy1 year year; MPRINT(TAXSCF): run; NOTE: There were 27541 observations read from the data set WORK.SCF. NOTE: The PROCEDURE MEANS printed page 582. NOTE: PROCEDURE MEANS used (Total process time): real time 0.07 seconds cpu time 0.08 seconds MPRINT(TAXSCF): * Rename variables to TAXSIM names, use lowercase for TAXSIM file names; MPRINT(TAXSCF): libname swt "../swt/sas"; NOTE: Libref SWT was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/swt/sas MPRINT(TAXSCF): DATA swt.swt04; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): rep=mod(y1,10); MPRINT(TAXSCF): * IF FILESTAT > 0; MPRINT(TAXSCF): mstat=1*(FILESTAT IN(1 4))+2*(FILESTAT IN(2 5))+6*(FILESTAT IN(3)); MPRINT(TAXSCF): otherprop=RENTINC+TBUSINC; MPRINT(TAXSCF): nonprop=CHSPALINC+OTHINC; MPRINT(TAXSCF): otheritem=TOTINVEX+TOTPINEX; MPRINT(TAXSCF): mortgage=ADJDEDCT+X5823; MPRINT(TAXSCF): scorp=0; MPRINT(TAXSCF): pbusinc=0; MPRINT(TAXSCF): pprofinc=0; MPRINT(TAXSCF): sbusinc=0; MPRINT(TAXSCF): sprofinc=0; MPRINT(TAXSCF): tyear=YEAR; MPRINT(TAXSCF): tstate=STATE; MPRINT(TAXSCF): * set idtl=2 to get detailed output from TAXSIM; MPRINT(TAXSCF): idtl=2; MPRINT(TAXSCF): DROP STATE; MPRINT(TAXSCF): RENAME TAXUNITID=taxsimid TUAGE=page SPAGE=sage KIDS=depx KIDSU13=dep13 KIDSU17=dep17 KIDSU18=dep18 WSINCOME=pwages WSINCSP=swages DIVINC=dividends INTINC=intrec STCAPINC=stcg LTCAPINC=ltcg PENINC=pensions GSSINC=gssi UNEMPINC=ui AFDCINC=transfers RENT=rentpaid RESTAXM1=proptax CHCAREXP=childcare tyear=year; MPRINT(TAXSCF): RUN; WARNING: Variable tyear cannot be renamed to year because year already exists. NOTE: There were 27541 observations read from the data set WORK.SCF. NOTE: The data set SWT.SWT04 has 27541 observations and 6042 variables. NOTE: DATA statement used (Total process time): real time 7.08 seconds 349 The SAS System 13:32 Friday, January 29, 2021 cpu time 1.01 seconds MPRINT(TAXSCF): proc means; MPRINT(TAXSCF): var y1 yy1 year; MPRINT(TAXSCF): run; NOTE: There were 27541 observations read from the data set SWT.SWT04. NOTE: The PROCEDURE MEANS printed page 583. NOTE: PROCEDURE MEANS used (Total process time): real time 7.23 seconds cpu time 0.45 seconds MPRINT(TAXSCF): libname taxsim "../txpydata/sas"; NOTE: Libref TAXSIM was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/txpydata/sas MPRINT(TAXSCF): proc contents data=swt.swt04; MPRINT(TAXSCF): run; NOTE: PROCEDURE CONTENTS used (Total process time): real time 0.01 seconds cpu time 0.02 seconds NOTE: The PROCEDURE CONTENTS printed pages 584-700. MPRINT(TAXSCF): DATA taxsim.txpydata04; MPRINT(TAXSCF): SET swt.swt04(KEEP=taxsimid year mstat page sage depx dep13 dep17 dep18 pwages swages dividends intrec stcg ltcg otherprop nonprop pensions gssi ui transfers rentpaid proptax otheritem childcare mortgage scorp pbusinc pprofinc sbusinc sprofinc Y1 YY1 taxunit rep); MPRINT(TAXSCF): y1=Y1; MPRINT(TAXSCF): yy1=YY1; MPRINT(TAXSCF): RUN; NOTE: There were 27541 observations read from the data set SWT.SWT04. NOTE: The data set TAXSIM.TXPYDATA04 has 27541 observations and 35 variables. NOTE: DATA statement used (Total process time): real time 0.22 seconds cpu time 0.09 seconds MPRINT(TAXSCF): proc contents data=taxsim.txpydata04; MPRINT(TAXSCF): run; NOTE: PROCEDURE CONTENTS used (Total process time): real time 0.01 seconds cpu time 0.01 seconds NOTE: The PROCEDURE CONTENTS printed pages 701-702. 3891 3892 %TAXSCF(SYEAR=2001,TYEAR=2000,WYEAR=1998,ITDLIM1=128950,ITDLIM2=64475,ITDL10=0,EXPAMT=2800, 3893 EXPAMT2=0,EXDL9=0,EXPAGIT1=122500,EXPAGIT2=61250,EXLIM1=128950,EXLIM2=193400, 3894 EXLIM3=96700,EXLIM4=161150,STDAMT1=4400,STDAMT2=5500,STDAMT3=7350,STDAMT4=8200, 3895 STDAMT5=9050,STDAMT6=6450,STDAMT7=7550,FILELIM1=7200,FILELIM2=8300,FILELIM3=12950,FILELIM4=13800, 3896 FILELIM5=14650,FILELIM6=2800,FILELIM7=9250,FILELIM8=10350,FILELIM9=10150,FILELIM10=11000,LCGAGI1=.88, 3897 LCLAGI1=.49,LCGAGI2=.90,LCLAGI2=.42, 350 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): * define libraries for SCF public datasets; 3898 LCGAGI3=.92,LCLAGI3=.22,PAYTAX=.124,MEDHI=.029,PTLIM=76200,HTAXFILE=HTAXFILE=&SYSPARM) ; MPRINT(TAXSCF): LIBNAME SCF01 "../orig/sas7bdat" ACCESS=READONLY; NOTE: Libref SCF01 refers to the same physical library as SCF04. NOTE: Libref SCF01 was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/orig/sas7bdat MPRINT(TAXSCF): * directory for datasets created by the program; MPRINT(TAXSCF): LIBNAME OUT "."; NOTE: Libref OUT was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code MPRINT(TAXSCF): * csv file for TAXSIM v32; MPRINT(TAXSCF): FILENAME SCFTAX "txpydata01.csv"; MPRINT(TAXSCF): * csv from TAXSIM v32; MPRINT(TAXSCF): FILENAME TAXSIM "results01.csv"; MPRINT(TAXSCF): * read in public SCF data, assumes dataset name is pXXiY.sas7bdat; MPRINT(TAXSCF): * NOTE: Any changes to the libname or data set name must also be made in this data step; MPRINT(TAXSCF): DATA MAIN; MPRINT(TAXSCF): SET SCF01.P01I6; NOTE: Data file SCF01.P01I6.DATA is in a format that is native to another host, or the file encoding does not match the session encoding. Cross Environment Data Access will be used, which might require additional CPU resources and might reduce performance. MPRINT(TAXSCF): RUN; NOTE: There were 22210 observations read from the data set SCF01.P01I6. NOTE: The data set WORK.MAIN has 22210 observations and 5307 variables. NOTE: DATA statement used (Total process time): real time 4.86 seconds cpu time 4.87 seconds MPRINT(TAXSCF): PROC SORT DATA=MAIN; MPRINT(TAXSCF): BY Y1; MPRINT(TAXSCF): RUN; NOTE: There were 22210 observations read from the data set WORK.MAIN. NOTE: The data set WORK.MAIN has 22210 observations and 5307 variables. NOTE: PROCEDURE SORT used (Total process time): real time 0.37 seconds cpu time 0.37 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET MAIN; MPRINT(TAXSCF): file "null.txt"; MPRINT(TAXSCF): WGT=(X42001/5); MPRINT(TAXSCF): POP=1; MPRINT(TAXSCF): * setting STATE variable to zero, set to -1 if you want TAXSIM to compute state tax for all 51 states; MPRINT(TAXSCF): STATE=0; MPRINT(TAXSCF): * Small data fix for one case in 1992; MPRINT(TAXSCF): * Small data fix for one case in 1998; MPRINT(TAXSCF): * Small data fix for one case in 2007; MPRINT(TAXSCF): * Small data fix for one case in 2013; MPRINT(TAXSCF): * Payment frequency on other loans not asked in 1989, assumed to be monthly; MPRINT(TAXSCF): * Only one other income variable after 1992, set to zero for 1992 forward; MPRINT(TAXSCF): X5726=0; MPRINT(TAXSCF): X5727=0; 351 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): * Spouse/partner in PEU, need to create X7020 for 1989 to 1998; MPRINT(TAXSCF): * A few other recodes to construct variables not asked in 1989 and 1992; MPRINT(TAXSCF): * Number of years with spouse/partner; MPRINT(TAXSCF): IF 2001=X8005 THEN X7370=-1; MPRINT(TAXSCF): ELSE X7370=2001-X8005; MPRINT(TAXSCF): * Number of people in NPEU, need to compute for 1989 to 2004, variable exists for 2007 forward; MPRINT(TAXSCF): X7050=X101-X7001; MPRINT(TAXSCF): * Absent spouse/partner indicator; MPRINT(TAXSCF): IF (X100=5) | (X106=5 & X107 IN(2 5 12)) THEN ABSP_P=1; MPRINT(TAXSCF): ELSE ABSP_P=0; MPRINT(TAXSCF): PERSEXP=1+(X105 IN(1 2))*(ABSP_P=0); MPRINT(TAXSCF): * Including children living elsewhere that are under 18, max of one extra as there is uncertainty about dependent status; MPRINT(TAXSCF): 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) + (X5912 > 0 | X5912=-2); MPRINT(TAXSCF): * For the child tax credit - must be under 17; MPRINT(TAXSCF): 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) ; MPRINT(TAXSCF): KIDSU18=(X108 IN(4 13))*(X110 < 18) + (X114 IN(4 13))*(X116 < 18) + (X120 IN(4 13))*(X122 < 18) + (X126 IN(4 13))*(X128 < 18) + (X132 IN(4 13))*(X134 < 18) + (X202 IN(4 13))*(X204 < 18) + (X208 IN(4 13))*(X210 < 18) + (X214 IN(4 13))*(X216 < 18) + (X220 IN(4 13))*(X222 < 18) ; MPRINT(TAXSCF): KIDSU13=(X108 IN(4 13))*(X110 < 13) + (X114 IN(4 13))*(X116 < 13) + (X120 IN(4 13))*(X122 < 13) + (X126 IN(4 13))*(X128 < 13) + (X132 IN(4 13))*(X134 < 13) + (X202 IN(4 13))*(X204 < 13) + (X208 IN(4 13))*(X210 < 13) + (X214 IN(4 13))*(X216 < 13) + (X220 IN(4 13))*(X222 < 13) ; MPRINT(TAXSCF): * Indicator for R living with a partner; MPRINT(TAXSCF): LWP=(X8023=2); MPRINT(TAXSCF): RAGE=X14; MPRINT(TAXSCF): * Set spouse/parnter age to zero if absent spouse/partner; MPRINT(TAXSCF): SPAGE=X19*(X7020=2); MPRINT(TAXSCF): * Possible scenarios, not considering NPEU right now, will create those tax units last 1. Married filing jointly households = tax unit 2. Single person households = tax unit 3. Filing separately households = split into two tax units, need to determine if single or married filing separately filing status 4. LWP households = split into two tax units even if one person is a nonfiler For 3. and 4., one of the tax units may have head of household status depending on presence of children For each new tax unit, start with replicate of household data and parse out income, deductions, exemptions; MPRINT(TAXSCF): * Create new observations from married filing separately households or LWP households. 0. Tax unit = household 1. Created tax unit for household head 2. Created tax unit for spouse/parnter 3-8. Created tax unit for NPEU member Note: If R and Sp are legally married for more than one year, treat as married filing joint even if x5746=3,4. If R and Sp LWP and report filing jointly treat as two tax units. If R and Sp married and report filing separately, treat as filing jointly unless either R or Sp has a past marriage. Inspection of the data reveals that too many married couples report filing separately when compared to the IRS data. The past marriage condition put the number closer to the IRS data.; MPRINT(TAXSCF): MARRIED=(X8023=1 & X105=1 & X7370 >= 1 & X7020=2); MPRINT(TAXSCF): IF (X5744 IN(1 6) & X5746=1 & MARRIED=1) | (MARRIED=1 & ((X5744=5 | X5746 IN(3 4)) | (X5746=2 & X7377^=2 & X7392^=2))) | (X8023 > 0 & X105=0 & (X5744=5 | (X5744 IN(1 6) & X5746=0))) | (X8023 > 0 & X105 > 0 & X5744 IN(1 5 6) & X5746=0 & X7020=1) | (X8023=8 & X105=0 & X5744=1 & X5746=1) THEN TAXUNIT=0; MPRINT(TAXSCF): ELSE IF (X5744 IN(1 6) & X5746 IN(2 3 4)) | (X8023 > 0 & X105 > 0 & (X5744=5 | (X5744 IN(1 6) & X5746 IN(0 1)))) | (X8023=1 & X105=1 & X7370=-1 & X5744=1) THEN TAXUNIT=1; MPRINT(TAXSCF): ELSE PUT "MISSING TAXUNIT STATUS " YY1= X5744= X5746= X8023= X105= X7020= MARRIED= X7372= X7018= X7370=; MPRINT(TAXSCF): TUAGE=RAGE; MPRINT(TAXSCF): RUN; NOTE: The file "null.txt" is: Filename=/disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code/null.txt, Owner Name=taxsim,Group Name=taxsim, 352 The SAS System 13:32 Friday, January 29, 2021 Access Permission=-rw-r--r--, Last Modified=29Jan2021:13:35:16 NOTE: 0 records were written to the file "null.txt". NOTE: There were 22210 observations read from the data set WORK.MAIN. NOTE: The data set WORK.SCF has 22210 observations and 5326 variables. NOTE: DATA statement used (Total process time): real time 0.51 seconds cpu time 0.51 seconds MPRINT(TAXSCF): DATA NEWUNITS; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): IF TAXUNIT=1; MPRINT(TAXSCF): TAXUNIT=2; MPRINT(TAXSCF): TUAGE=SPAGE; MPRINT(TAXSCF): SPAGE=0; MPRINT(TAXSCF): RUN; NOTE: There were 22210 observations read from the data set WORK.SCF. NOTE: The data set WORK.NEWUNITS has 1825 observations and 5326 variables. NOTE: DATA statement used (Total process time): real time 0.23 seconds cpu time 0.22 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF NEWUNITS; MPRINT(TAXSCF): RUN; NOTE: There were 22210 observations read from the data set WORK.SCF. NOTE: There were 1825 observations read from the data set WORK.NEWUNITS. NOTE: The data set WORK.SCF has 24035 observations and 5326 variables. NOTE: DATA statement used (Total process time): real time 0.48 seconds cpu time 0.48 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): * Codes for filestat, assigning status even if did not file, will determine non-filer status later, filing status for split tax units done after splitting up income 1= Single 2= Married filing jointly 3= Married filing separately 4= Head of HH 5= Qualified widower; MPRINT(TAXSCF): FILESTAT=0; MPRINT(TAXSCF): IF TAXUNIT=0 THEN DO; MPRINT(TAXSCF): IF (MARRIED=1) THEN FILESTAT=2; MPRINT(TAXSCF): ELSE IF MARRIED=0 THEN DO; MPRINT(TAXSCF): IF PERSEXP=1 & KIDS=0 THEN FILESTAT=1; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS > 0 & X8023=5 & X7372=5 & X8007>=1998 THEN FILESTAT=5; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS > 0 THEN FILESTAT=4; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTEXPT=PERSEXP+KIDS; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * No AGI variables starting in 2010; MPRINT(TAXSCF): * Coding income variables with -1 and -2 to zero; MPRINT(TAXSCF): ARRAY NEG {*} X5704 X5714 X5724 X5726 X5729; MPRINT(TAXSCF): DO I=1 TO DIM(NEG); MPRINT(TAXSCF): IF NEG{I} IN(-2 -1) THEN NEG{I}=0; 353 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Income from wages and business; MPRINT(TAXSCF): R_LABORINC=MAX(0,X4112) MPRINT(ACONV): *((X4113=2)*52.18+(X4113=3)*26.09+(X4113=4)*12+(X4113=5)*4+(X4113=6)+(X4113=8)+ (X4113=11)*2+(X4113=12)*6+(X4113=31)*24+(X4113=14)+(X4113=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): SP_LABORINC=MAX(0,X4712) MPRINT(ACONV): *((X4713=2)*52.18+(X4713=3)*26.09+(X4713=4)*12+(X4713=5)*4+(X4713=6)+(X4713=8)+ (X4713=11)*2+(X4713=12)*6+(X4713=31)*24+(X4713=14)+(X4713=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): R_BUSINC=MAX(0,X4131) MPRINT(ACONV): *((X4132=2)*52.18+(X4132=3)*26.09+(X4132=4)*12+(X4132=5)*4+(X4132=6)+(X4132=8)+ (X4132=11)*2+(X4132=12)*6+(X4132=31)*24+(X4132=14)+(X4132=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): SP_BUSINC=MAX(0,X4731) MPRINT(ACONV): *((X4732=2)*52.18+(X4732=3)*26.09+(X4732=4)*12+(X4732=5)*4+(X4732=6)+(X4732=8)+ (X4732=11)*2+(X4732=12)*6+(X4732=31)*24+(X4732=14)+(X4732=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): * Income from pensions and tax-deferred account withdrawals. No withdrawal information for IRAs or future pensions prior to 2004. No withdrawal information for any tax-deferred accounts, aside from other income, prior to 2001; MPRINT(TAXSCF): R_REGPEN=MAX(0,(X5318 MPRINT(ACONV): *((X5319=2)*52.18+(X5319=3)*26.09+(X5319=4)*12+(X5319=5)*4+(X5319=6)+(X5319=8)+ (X5319=11)*2+(X5319=12)*6+(X5319=31)*24+(X5319=14)+(X5319=22)) MPRINT(TAXSCF): *(X5315=1)*(X5317>=1))) +MAX(0,(X5326 MPRINT(ACONV): *((X5327=2)*52.18+(X5327=3)*26.09+(X5327=4)*12+(X5327=5)*4+(X5327=6)+(X5327=8)+ (X5327=11)*2+(X5327=12)*6+(X5327=31)*24+(X5327=14)+(X5327=22)) MPRINT(TAXSCF): *(X5323=1)*(X5325>=1))) +MAX(0,(X5334 MPRINT(ACONV): *((X5335=2)*52.18+(X5335=3)*26.09+(X5335=4)*12+(X5335=5)*4+(X5335=6)+(X5335=8)+ (X5335=11)*2+(X5335=12)*6+(X5335=31)*24+(X5335=14)+(X5335=22)) MPRINT(TAXSCF): *(X5331=1)*(X5333>=1))) +MAX(0,(X5418 MPRINT(ACONV): *((X5419=2)*52.18+(X5419=3)*26.09+(X5419=4)*12+(X5419=5)*4+(X5419=6)+(X5419=8)+ (X5419=11)*2+(X5419=12)*6+(X5419=31)*24+(X5419=14)+(X5419=22)) MPRINT(TAXSCF): *(X5415=1)*(X5417>=1))) +MAX(0,(X5426 MPRINT(ACONV): *((X5427=2)*52.18+(X5427=3)*26.09+(X5427=4)*12+(X5427=5)*4+(X5427=6)+(X5427=8)+ (X5427=11)*2+(X5427=12)*6+(X5427=31)*24+(X5427=14)+(X5427=22)) MPRINT(TAXSCF): *(X5423=1)*(X5425>=1))) +MAX(0,(X5434 MPRINT(ACONV): *((X5435=2)*52.18+(X5435=3)*26.09+(X5435=4)*12+(X5435=5)*4+(X5435=6)+(X5435=8)+ (X5435=11)*2+(X5435=12)*6+(X5435=31)*24+(X5435=14)+(X5435=22)) MPRINT(TAXSCF): *(X5431=1)*(X5433>=1))); MPRINT(TAXSCF): R_WITHDRAW=MAX(0,(X6464 MPRINT(ACONV): *((X6465=2)*52.18+(X6465=3)*26.09+(X6465=4)*12+(X6465=5)*4+(X6465=6)+(X6465=8)+ (X6465=11)*2+(X6465=12)*6+(X6465=31)*24+(X6465=14)+(X6465=22)) MPRINT(TAXSCF): *(X5315=1))) +MAX(0,(X6469 MPRINT(ACONV): *((X6470=2)*52.18+(X6470=3)*26.09+(X6470=4)*12+(X6470=5)*4+(X6470=6)+(X6470=8)+ (X6470=11)*2+(X6470=12)*6+(X6470=31)*24+(X6470=14)+(X6470=22)) MPRINT(TAXSCF): *(X5323=1)))+MAX(0,(X6474 MPRINT(ACONV): *((X6475=2)*52.18+(X6475=3)*26.09+(X6475=4)*12+(X6475=5)*4+(X6475=6)+(X6475=8)+ (X6475=11)*2+(X6475=12)*6+(X6475=31)*24+(X6475=14)+(X6475=22)) MPRINT(TAXSCF): *(X5331=1))) +MAX(0,(X6479 MPRINT(ACONV): *((X6480=2)*52.18+(X6480=3)*26.09+(X6480=4)*12+(X6480=5)*4+(X6480=6)+(X6480=8)+ (X6480=11)*2+(X6480=12)*6+(X6480=31)*24+(X6480=14)+(X6480=22)) MPRINT(TAXSCF): *(X5415=1)))+MAX(0,(X6484 MPRINT(ACONV): *((X6485=2)*52.18+(X6485=3)*26.09+(X6485=4)*12+(X6485=5)*4+(X6485=6)+(X6485=8)+ (X6485=11)*2+(X6485=12)*6+(X6485=31)*24+(X6485=14)+(X6485=22)) MPRINT(TAXSCF): *(X5423=1))) +MAX(0,(X6489 MPRINT(ACONV): *((X6490=2)*52.18+(X6490=3)*26.09+(X6490=4)*12+(X6490=5)*4+(X6490=6)+(X6490=8)+ (X6490=11)*2+(X6490=12)*6+(X6490=31)*24+(X6490=14)+(X6490=22)) 354 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): *(X5431=1)))+(X5724)*(X5725=11)*.5; MPRINT(TAXSCF): SP_REGPEN=MAX(0,(X5318 MPRINT(ACONV): *((X5319=2)*52.18+(X5319=3)*26.09+(X5319=4)*12+(X5319=5)*4+(X5319=6)+(X5319=8)+ (X5319=11)*2+(X5319=12)*6+(X5319=31)*24+(X5319=14)+(X5319=22)) MPRINT(TAXSCF): *(X5315=2)*(X5317>=1))) +MAX(0,(X5326 MPRINT(ACONV): *((X5327=2)*52.18+(X5327=3)*26.09+(X5327=4)*12+(X5327=5)*4+(X5327=6)+(X5327=8)+ (X5327=11)*2+(X5327=12)*6+(X5327=31)*24+(X5327=14)+(X5327=22)) MPRINT(TAXSCF): *(X5323=2)*(X5325>=1))) +MAX(0,(X5334 MPRINT(ACONV): *((X5335=2)*52.18+(X5335=3)*26.09+(X5335=4)*12+(X5335=5)*4+(X5335=6)+(X5335=8)+ (X5335=11)*2+(X5335=12)*6+(X5335=31)*24+(X5335=14)+(X5335=22)) MPRINT(TAXSCF): *(X5331=2)*(X5333>=1))) +MAX(0,(X5418 MPRINT(ACONV): *((X5419=2)*52.18+(X5419=3)*26.09+(X5419=4)*12+(X5419=5)*4+(X5419=6)+(X5419=8)+ (X5419=11)*2+(X5419=12)*6+(X5419=31)*24+(X5419=14)+(X5419=22)) MPRINT(TAXSCF): *(X5415=2)*(X5417>=1))) +MAX(0,(X5426 MPRINT(ACONV): *((X5427=2)*52.18+(X5427=3)*26.09+(X5427=4)*12+(X5427=5)*4+(X5427=6)+(X5427=8)+ (X5427=11)*2+(X5427=12)*6+(X5427=31)*24+(X5427=14)+(X5427=22)) MPRINT(TAXSCF): *(X5423=2)*(X5425>=1))) +MAX(0,(X5434 MPRINT(ACONV): *((X5435=2)*52.18+(X5435=3)*26.09+(X5435=4)*12+(X5435=5)*4+(X5435=6)+(X5435=8)+ (X5435=11)*2+(X5435=12)*6+(X5435=31)*24+(X5435=14)+(X5435=22)) MPRINT(TAXSCF): *(X5431=2)*(X5433>=1))); MPRINT(TAXSCF): SP_WITHDRAW=MAX(0,(X6464 MPRINT(ACONV): *((X6465=2)*52.18+(X6465=3)*26.09+(X6465=4)*12+(X6465=5)*4+(X6465=6)+(X6465=8)+ (X6465=11)*2+(X6465=12)*6+(X6465=31)*24+(X6465=14)+(X6465=22)) MPRINT(TAXSCF): *(X5315=2))) +MAX(0,(X6469 MPRINT(ACONV): *((X6470=2)*52.18+(X6470=3)*26.09+(X6470=4)*12+(X6470=5)*4+(X6470=6)+(X6470=8)+ (X6470=11)*2+(X6470=12)*6+(X6470=31)*24+(X6470=14)+(X6470=22)) MPRINT(TAXSCF): *(X5323=2)))+MAX(0,(X6474 MPRINT(ACONV): *((X6475=2)*52.18+(X6475=3)*26.09+(X6475=4)*12+(X6475=5)*4+(X6475=6)+(X6475=8)+ (X6475=11)*2+(X6475=12)*6+(X6475=31)*24+(X6475=14)+(X6475=22)) MPRINT(TAXSCF): *(X5331=2))) +MAX(0,(X6479 MPRINT(ACONV): *((X6480=2)*52.18+(X6480=3)*26.09+(X6480=4)*12+(X6480=5)*4+(X6480=6)+(X6480=8)+ (X6480=11)*2+(X6480=12)*6+(X6480=31)*24+(X6480=14)+(X6480=22)) MPRINT(TAXSCF): *(X5415=2)))+MAX(0,(X6484 MPRINT(ACONV): *((X6485=2)*52.18+(X6485=3)*26.09+(X6485=4)*12+(X6485=5)*4+(X6485=6)+(X6485=8)+ (X6485=11)*2+(X6485=12)*6+(X6485=31)*24+(X6485=14)+(X6485=22)) MPRINT(TAXSCF): *(X5423=2))) +MAX(0,(X6489 MPRINT(ACONV): *((X6490=2)*52.18+(X6490=3)*26.09+(X6490=4)*12+(X6490=5)*4+(X6490=6)+(X6490=8)+ (X6490=11)*2+(X6490=12)*6+(X6490=31)*24+(X6490=14)+(X6490=22)) MPRINT(TAXSCF): *(X5431=2)))+(X5724)*(X5725=11)*.5; MPRINT(TAXSCF): * For new tax units need to split up income and determine which new tax unit is assigned which deductions and exemptions. Also need to zero out any variables not relevant to the new tax unit (ex. spouses wages); MPRINT(TAXSCF): IF TAXUNIT IN(1 2) THEN DO; MPRINT(TAXSCF): * age; MPRINT(TAXSCF): IF (TAXUNIT=1) THEN SPAGE=0; MPRINT(TAXSCF): * wages; MPRINT(TAXSCF): IF (TAXUNIT=1 & (R_LABORINC+SP_LABORINC>0)) THEN WSINCOME=MAX(0,X5702)*(R_LABORINC/(R_LABORINC+SP_LABORINC))*(R_LABORINC>0); MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & (R_LABORINC+SP_LABORINC>0)) THEN WSINCOME=MAX(0,X5702)*(SP_LABORINC/(R_LABORINC+SP_LABORINC))*(SP_LABORINC>0); MPRINT(TAXSCF): ELSE WSINCOME=MAX(0,X5702)*.5; MPRINT(TAXSCF): WSINCSP=0; MPRINT(TAXSCF): * business income; MPRINT(TAXSCF): R_SOLEPROP=(X4106 IN(2 3 4) | (X3113=1 & X3119=2) | (X3213=1 & X3219=2) | (X3313=1 & X3319=2)); MPRINT(TAXSCF): SP_SOLEPROP=(X4706 IN(2 3 4) | (X3114=1 & X3119=2) | (X3214=1 & X3219=2) | (X3313=1 & X3319=2)); MPRINT(TAXSCF): IF (TAXUNIT=1 & (R_BUSINC+SP_BUSINC>0) & (R_SOLEPROP=1 | SP_SOLEPROP=1)) THEN DO; MPRINT(TAXSCF): IF (R_SOLEPROP=1 & SP_SOLEPROP=1) THEN TBUSINC=X5704*(R_BUSINC/(R_BUSINC+SP_BUSINC))*(R_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=1 & SP_SOLEPROP=0) THEN TBUSINC=X5704; MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=0 & SP_SOLEPROP=1) THEN TBUSINC=0; 355 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & (R_BUSINC+SP_BUSINC>0) & (R_SOLEPROP=1 | SP_SOLEPROP=1)) THEN DO; MPRINT(TAXSCF): IF (R_SOLEPROP=1 & SP_SOLEPROP=1) THEN TBUSINC=X5704*(SP_BUSINC/(R_BUSINC+SP_BUSINC))*(SP_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=0 & SP_SOLEPROP=1) THEN TBUSINC=X5704; MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=1 & SP_SOLEPROP=0) THEN TBUSINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE TBUSINC=X5704*.5; MPRINT(TAXSCF): * interest, dividends, and capital gains - just split 50-50; MPRINT(TAXSCF): NTAXINC= MAX(0,X5706)*.5; MPRINT(TAXSCF): INTINC= MAX(0,X5708)*.5; MPRINT(TAXSCF): DIVINC= MAX(0,X5710)*.5; MPRINT(TAXSCF): IF X5712=-1 THEN CAPGLINC=0; MPRINT(TAXSCF): ELSE CAPGLINC=X5712*.5; MPRINT(TAXSCF): * rent, royalties, partnership and scorp income; MPRINT(TAXSCF): R_PARTNER_SCORP=(X4106 IN(2 3 4) | (X3113=1 & X3119 IN(1 3 6 11 12 15)) | (X3213=1 & X3219 IN(1 3 6 11 12 15))); MPRINT(TAXSCF): SP_PARTNER_SCORP=(X4106 IN(2 3 4) | (X3114=1 & X3119 IN(1 3 6 11 12 15)) | (X3214=1 & X3219 IN(1 3 6 11 12 15))); MPRINT(TAXSCF): IF (TAXUNIT=1 & (R_BUSINC+SP_BUSINC>0) & (R_PARTNER_SCORP=1 | SP_PARTNER_SCORP=1)) THEN DO; MPRINT(TAXSCF): IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=1) THEN RENTINC=X5714*(R_BUSINC/(R_BUSINC+SP_BUSINC))*(R_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=0) THEN RENTINC=X5714; MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=0 & SP_PARTNER_SCORP=1) THEN RENTINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & (R_BUSINC+SP_BUSINC>0) & (R_PARTNER_SCORP=1 | SP_PARTNER_SCORP=1)) THEN DO; MPRINT(TAXSCF): IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=1) THEN RENTINC=X5714*(SP_BUSINC/(R_BUSINC+SP_BUSINC))*(SP_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=0 & SP_PARTNER_SCORP=1) THEN RENTINC=X5714; MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=0) THEN RENTINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE RENTINC=X5714*.5; MPRINT(TAXSCF): * unemployment income, no questions about unemployed in past 12 months prior to 1998; MPRINT(TAXSCF): IF (TAXUNIT=1) THEN DO; MPRINT(TAXSCF): IF (X6780=1) THEN UNEMPINC=MAX(0,X5716)*(X6784 IN(0 5))+MAX(0,X5716)*(X6784=1)*.5; MPRINT(TAXSCF): ELSE IF (X6780=5 & X6784=1) THEN UNEMPINC=0; MPRINT(TAXSCF): ELSE UNEMPINC=MAX(0,X5716)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2) THEN DO; MPRINT(TAXSCF): IF (X6784=1) THEN UNEMPINC=MAX(0,X5716)*(X6780 IN(0 5))+MAX(0,X5716)*(X6780=1)*.5; MPRINT(TAXSCF): ELSE IF (X6784=5 & X6780=1) THEN UNEMPINC=0; MPRINT(TAXSCF): ELSE UNEMPINC=MAX(0,X5716)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * child support and alimony income; MPRINT(TAXSCF): IF (TAXUNIT=1 & X7377=2) THEN DO; MPRINT(TAXSCF): CHSPALINC=MAX(0,X5718)*(X7392^=2)+MAX(0,X5718)*(X7392=2)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & X7392=2) THEN DO; MPRINT(TAXSCF): CHSPALINC=MAX(0,X5718)*(X7377^=2)+MAX(0,X5718)*(X7377=2)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE CHSPALINC=MAX(0,X5718)*.5; MPRINT(TAXSCF): * government transfers, split 50/50; MPRINT(TAXSCF): AFDCINC=MAX(0,X5720)*.5; MPRINT(TAXSCF): * other income, split 50/50 - remove other income that is non-taxable, such as scholarships/grants, inheritances/gifts/, support from family or others, also remove IRA/Keogh income; MPRINT(TAXSCF): * special fix for 1992, removing other income coded 14, repayment of debts, it appears the total amount of the debt was reported, not just the interest on the debt; MPRINT(TAXSCF): OTHINC= (X5724)*(X5725 NOT IN(3 11 12 13 28))*.5+(X5726)*(X5727 NOT IN(3 11 12 13 28))*.5; MPRINT(TAXSCF): * social security and pension income, adding in withdrawals from IRA/Keogh/401ks; 356 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): R_GSSINC=MAX(0,(X5306 MPRINT(ACONV): *((X5307=2)*52.18+(X5307=3)*26.09+(X5307=4)*12+(X5307=5)*4+(X5307=6)+(X5307=8)+ (X5307=11)*2+(X5307=12)*6+(X5307=31)*24+(X5307=14)+(X5307=22)) MPRINT(TAXSCF): *(X5305>=1))); MPRINT(TAXSCF): SP_GSSINC=MAX(0,(X5311 MPRINT(ACONV): *((X5312=2)*52.18+(X5312=3)*26.09+(X5312=4)*12+(X5312=5)*4+(X5312=6)+(X5312=8)+ (X5312=11)*2+(X5312=12)*6+(X5312=31)*24+(X5312=14)+(X5312=22)) MPRINT(TAXSCF): *(X5310>=1))); MPRINT(TAXSCF): T_GSSINC=MAX(0,((X5306 MPRINT(ACONV): *((X5307=2)*52.18+(X5307=3)*26.09+(X5307=4)*12+(X5307=5)*4+(X5307=6)+(X5307=8)+ (X5307=11)*2+(X5307=12)*6+(X5307=31)*24+(X5307=14)+(X5307=22)) MPRINT(TAXSCF): *(X5305>=1))+(X5311 MPRINT(ACONV): *((X5312=2)*52.18+(X5312=3)*26.09+(X5312=4)*12+(X5312=5)*4+(X5312=6)+(X5312=8)+ (X5312=11)*2+(X5312=12)*6+(X5312=31)*24+(X5312=14)+(X5312=22)) MPRINT(TAXSCF): *(X5310>=1)))); MPRINT(TAXSCF): NOSS_X5722=MAX(0,(X5722-T_GSSINC)); MPRINT(TAXSCF): IF (TAXUNIT=1) THEN DO; MPRINT(TAXSCF): IF (R_REGPEN > 0) THEN PENINC=NOSS_X5722*(R_REGPEN/(R_REGPEN+SP_REGPEN))+R_WITHDRAW; MPRINT(TAXSCF): ELSE IF (R_REGPEN=0 & R_WITHDRAW > 0) THEN PENINC=R_WITHDRAW; MPRINT(TAXSCF): ELSE IF (R_REGPEN=0 & R_WITHDRAW=0 & SP_REGPEN > 0) THEN PENINC=0; MPRINT(TAXSCF): ELSE IF (R_REGPEN=0 & R_WITHDRAW=0 & SP_REGPEN=0) THEN PENINC=NOSS_X5722*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2) THEN DO; MPRINT(TAXSCF): IF (SP_REGPEN > 0) THEN PENINC=NOSS_X5722*(SP_REGPEN/(R_REGPEN+SP_REGPEN))+SP_WITHDRAW; MPRINT(TAXSCF): ELSE IF (SP_REGPEN=0 & SP_WITHDRAW > 0) THEN PENINC=SP_WITHDRAW; MPRINT(TAXSCF): ELSE IF (SP_REGPEN=0 & SP_WITHDRAW=0 & R_REGPEN > 0) THEN PENINC=0; MPRINT(TAXSCF): ELSE IF (SP_REGPEN=0 & SP_WITHDRAW=0 & R_REGPEN=0) THEN PENINC=NOSS_X5722*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): GSSINC=MAX(0,R_GSSINC)*(TAXUNIT=1)+MAX(0,SP_GSSINC)*(TAXUNIT=2); MPRINT(TAXSCF): OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; MPRINT(TAXSCF): NONTAX=NTAXINC+AFDCINC; MPRINT(TAXSCF): RENT=MAX(0,(X602 MPRINT(ACONV): *((X603=2)*52.18+(X603=3)*26.09+(X603=4)*12+(X603=5)*4+(X603=6)+(X603=8)+ (X603=11)*2+(X603=12)*6+(X603=31)*24+(X603=14)+(X603=22)) MPRINT(TAXSCF): ),(X612 MPRINT(ACONV): *((X613=2)*52.18+(X613=3)*26.09+(X613=4)*12+(X613=5)*4+(X613=6)+(X613=8)+ (X613=11)*2+(X613=12)*6+(X613=31)*24+(X613=14)+(X613=22)) MPRINT(TAXSCF): ),(X619 MPRINT(ACONV): *((X620=2)*52.18+(X620=3)*26.09+(X620=4)*12+(X620=5)*4+(X620=6)+(X620=8)+ (X620=11)*2+(X620=12)*6+(X620=31)*24+(X620=14)+(X620=22)) MPRINT(TAXSCF): ), (X708 MPRINT(ACONV): *((X709=2)*52.18+(X709=3)*26.09+(X709=4)*12+(X709=5)*4+(X709=6)+(X709=8)+ (X709=11)*2+(X709=12)*6+(X709=31)*24+(X709=14)+(X709=22)) MPRINT(TAXSCF): ))*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TAXUNIT=0 THEN DO; MPRINT(TAXSCF): R_SOLEPROP=(X4106 IN(2 3 4) | (X3113=1 & X3119=2) | (X3213=1 & X3219=2) | (X3313=1 & X3319=2)); MPRINT(TAXSCF): SP_SOLEPROP=(X4706 IN(2 3 4) | (X3114=1 & X3119=2) | (X3214=1 & X3219=2) | (X3313=1 & X3319=2)); MPRINT(TAXSCF): * Split wages across primary and secondary earner for married filing jointly households; MPRINT(TAXSCF): IF FILESTAT^=2 THEN DO; MPRINT(TAXSCF): WSINCOME=MAX(0,X5702); MPRINT(TAXSCF): WSINCSP=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF FILESTAT=2 THEN DO; MPRINT(TAXSCF): IF ((R_LABORINC > 0 & SP_LABORINC=0) | (R_LABORINC=0 & SP_LABORINC > 0) | (R_LABORINC=0 & SP_LABORINC=0)) THEN DO; MPRINT(TAXSCF): WSINCOME=MAX(0,X5702); MPRINT(TAXSCF): WSINCSP=0; 357 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (R_LABORINC > 0 & SP_LABORINC > 0) THEN DO; MPRINT(TAXSCF): WSINCOME=MAX(0,X5702)*(R_LABORINC/(R_LABORINC+SP_LABORINC)); MPRINT(TAXSCF): WSINCSP=MAX(0,X5702)*(SP_LABORINC/(R_LABORINC+SP_LABORINC)); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TBUSINC = X5704; MPRINT(TAXSCF): NTAXINC= MAX(0,X5706); MPRINT(TAXSCF): INTINC= MAX(0,X5708); MPRINT(TAXSCF): DIVINC= MAX(0,X5710); MPRINT(TAXSCF): IF X5712=-1 THEN CAPGLINC=0; MPRINT(TAXSCF): ELSE CAPGLINC=X5712; MPRINT(TAXSCF): RENTINC= X5714; MPRINT(TAXSCF): UNEMPINC = MAX(0,X5716); MPRINT(TAXSCF): CHSPALINC=MAX(0,X5718); MPRINT(TAXSCF): AFDCINC = MAX(0,X5720); MPRINT(TAXSCF): * Starting in 2004, IRA/Keogh/401K type income is not reported in other income, instead withdrawals are reported separately during the questions about the assets, so need to add the withdrawals to pension income. There may be a few withdrawals still reported as other income if the asset account was closed or emptied out during the year prior to the survey.; MPRINT(TAXSCF): * also remove other income that is non-taxable, such as scholarships/grants, inheritances/gifts/, support from family or others; MPRINT(TAXSCF): * special fix for 1992, removing other income coded 14, repayment of debts, it appears the total amount of the debt was report, not just the interest on the debt; MPRINT(TAXSCF): OTHINC= (X5724)*(X5725 NOT IN(3 11 12 13 28))+(X5726)*(X5727 NOT IN(3 11 12 13 28)); MPRINT(TAXSCF): GSSINC=MAX(0,((X5306 MPRINT(ACONV): *((X5307=2)*52.18+(X5307=3)*26.09+(X5307=4)*12+(X5307=5)*4+(X5307=6)+(X5307=8)+ (X5307=11)*2+(X5307=12)*6+(X5307=31)*24+(X5307=14)+(X5307=22)) MPRINT(TAXSCF): *(X5305>=1))+(X5311 MPRINT(ACONV): *((X5312=2)*52.18+(X5312=3)*26.09+(X5312=4)*12+(X5312=5)*4+(X5312=6)+(X5312=8)+ (X5312=11)*2+(X5312=12)*6+(X5312=31)*24+(X5312=14)+(X5312=22)) MPRINT(TAXSCF): *(X5310>=1)))); MPRINT(TAXSCF): IF GSSINC=0 THEN PENINC= MAX(0,X5722)+R_WITHDRAW+SP_WITHDRAW; MPRINT(TAXSCF): ELSE IF (GSSINC > 0) THEN PENINC=MAX(0,(X5722-GSSINC)) +R_WITHDRAW+SP_WITHDRAW; MPRINT(TAXSCF): OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; MPRINT(TAXSCF): NONTAX=NTAXINC+AFDCINC; MPRINT(TAXSCF): RENT=MAX(0,(X602 MPRINT(ACONV): *((X603=2)*52.18+(X603=3)*26.09+(X603=4)*12+(X603=5)*4+(X603=6)+(X603=8)+ (X603=11)*2+(X603=12)*6+(X603=31)*24+(X603=14)+(X603=22)) MPRINT(TAXSCF): ),(X612 MPRINT(ACONV): *((X613=2)*52.18+(X613=3)*26.09+(X613=4)*12+(X613=5)*4+(X613=6)+(X613=8)+ (X613=11)*2+(X613=12)*6+(X613=31)*24+(X613=14)+(X613=22)) MPRINT(TAXSCF): ),(X619 MPRINT(ACONV): *((X620=2)*52.18+(X620=3)*26.09+(X620=4)*12+(X620=5)*4+(X620=6)+(X620=8)+ (X620=11)*2+(X620=12)*6+(X620=31)*24+(X620=14)+(X620=22)) MPRINT(TAXSCF): ), (X708 MPRINT(ACONV): *((X709=2)*52.18+(X709=3)*26.09+(X709=4)*12+(X709=5)*4+(X709=6)+(X709=8)+ (X709=11)*2+(X709=12)*6+(X709=31)*24+(X709=14)+(X709=22)) MPRINT(TAXSCF): )); MPRINT(TAXSCF): END; MPRINT(TAXSCF): * AGI - note that starting in 2010, AGI questions no longer asked, so using total income minus non-taxable income plus IRA/401k withdrawals as a proxy. No information on adjustments to AGI; MPRINT(TAXSCF): AGI=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC+UNEMPINC+CHSPALINC+OTHINC+PENINC+GSSINC; MPRINT(TAXSCF): IF AGI=-1 THEN AGI=0; MPRINT(TAXSCF): AGIGE50K=(AGI>=50000); MPRINT(TAXSCF): AGICL=1*(AGI < 50000)+2*(50000 <= AGI < 100000)+3*(AGI >= 100000); MPRINT(TAXSCF): * For allocating itemized deductions - mortgage interest, investment interest expense, property taxes, and charitable contributions - between new tax units, assume tax unit with higher income assigned all itemized 358 The SAS System 13:32 Friday, January 29, 2021 deductions. Creating a flag here for use in computing deductions later in the program. Using wages, business, and pension income as income measure (all other income components are split 50/50 between the new tax units).; MPRINT(TAXSCF): IF (TAXUNIT IN(1 2)) THEN DO; MPRINT(TAXSCF): R_TINCOME=R_LABORINC+R_BUSINC+R_REGPEN+R_WITHDRAW; MPRINT(TAXSCF): SP_TINCOME=SP_LABORINC+SP_BUSINC+SP_REGPEN+SP_WITHDRAW; MPRINT(TAXSCF): ITEMDEDCT_FLAG=(TAXUNIT=1 & R_TINCOME >= SP_TINCOME) +(TAXUNIT=2 & SP_TINCOME > R_TINCOME); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TAXUNIT=0 THEN ITEMDEDCT_FLAG=1; MPRINT(TAXSCF): * Set personal exemption to one for split households, divide kids among split households, if one, give to both tax units, if even number, split evenly between tax units, if odd number, give more to higher income tax unit; MPRINT(TAXSCF): IF TAXUNIT IN(1 2) THEN DO; MPRINT(TAXSCF): PERSEXP=1; MPRINT(TAXSCF): IF KIDS>1 THEN DO; MPRINT(TAXSCF): IF (KIDSU13>0 & MOD(KIDSU13,2)=0) THEN KIDSU13=KIDSU13/2; MPRINT(TAXSCF): ELSE IF (KIDSU13>0 & MOD(KIDSU13,2)^=0) THEN DO; MPRINT(TAXSCF): KIDSU13=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU13/2,1))+ (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU13/2)-.5); MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (KIDSU17>0 & MOD(KIDSU17,2)=0) THEN KIDSU17=KIDSU17/2; MPRINT(TAXSCF): ELSE IF (KIDSU17>0 & MOD(KIDSU17,2)^=0) THEN DO; MPRINT(TAXSCF): KIDSU17=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU17/2,1))+ (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU17/2)-.5); MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (KIDSU18>0 & MOD(KIDSU18,2)=0) THEN KIDSU18=KIDSU18/2; MPRINT(TAXSCF): ELSE IF (KIDSU18>0 & MOD(KIDSU18,2)^=0) THEN DO; MPRINT(TAXSCF): KIDSU18=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU18/2,1))+ (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU18/2)-.5); MPRINT(TAXSCF): END; MPRINT(TAXSCF): KIDS=KIDSU13+KIDSU17+KIDSU18; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF PERSEXP=1 & MARRIED=1 THEN FILESTAT=3; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS=0 & MARRIED=0 THEN FILESTAT=1; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS>0 & MARRIED=0 THEN FILESTAT=4; MPRINT(TAXSCF): TOTEXPT=PERSEXP+KIDS; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF FILESTAT=0 THEN PUT "MISSING FILING STATUS " Y1= X5744= X5746= TAXUNIT= MARRIED= KIDS= PERSEXP=; MPRINT(TAXSCF): RUN; NOTE: There were 24035 observations read from the data set WORK.SCF. NOTE: The data set WORK.SCF has 24035 observations and 5368 variables. NOTE: DATA statement used (Total process time): real time 0.56 seconds cpu time 0.58 seconds MPRINT(TAXSCF): * Create tax units based on NPEU members. If there are multiple NPEU members, need to allocate income, assets, and debt across the members; MPRINT(TAXSCF): DATA TEMP NPEU; MPRINT(TAXSCF): SET SCF(WHERE=(TAXUNIT IN(0 1) & X7050 >=1)); MPRINT(TAXSCF): file "null.txt"; MPRINT(TAXSCF): TAXUNIT=2; MPRINT(TAXSCF): ARRAY NPEUAGE {*} X110 X116 X122 X128 X134 X204 X210 X216 X222; MPRINT(TAXSCF): ARRAY LIVEWITH {*} X112 X118 X124 X130 X136 X206 X212 X218 X224; MPRINT(TAXSCF): ARRAY FINDEP {*} X113 X119 X125 X131 X137 X207 X213 X219 X225; 359 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): DO I=1 TO DIM(LIVEWITH); MPRINT(TAXSCF): IF LIVEWITH{I} IN(1 2 3 4) & FINDEP{I} IN(2 3 4 5) THEN DO; MPRINT(TAXSCF): TAXUNIT=TAXUNIT+1; MPRINT(TAXSCF): TUAGE=NPEUAGE{I}; MPRINT(TAXSCF): SPAGE=0; MPRINT(TAXSCF): OUTPUT NPEU; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): RUN; NOTE: The file "null.txt" is: Filename=/disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code/null.txt, Owner Name=taxsim,Group Name=taxsim, Access Permission=-rw-r--r--, Last Modified=29Jan2021:13:35:18 NOTE: 0 records were written to the file "null.txt". NOTE: There were 2050 observations read from the data set WORK.SCF. WHERE TAXUNIT in (0, 1) and (X7050>=1); NOTE: The data set WORK.TEMP has 0 observations and 5368 variables. NOTE: The data set WORK.NPEU has 2615 observations and 5368 variables. NOTE: DATA statement used (Total process time): real time 0.12 seconds cpu time 0.13 seconds MPRINT(TAXSCF): DATA NPEU; MPRINT(TAXSCF): SET NPEU; MPRINT(TAXSCF): ARRAY INCTYPES {*} WSINCOME WSINCSP TBUSINC INTINC NTAXINC DIVINC RENTINC UNEMPINC AFDCINC GSSINC PENINC OTHINC CAPGLINC; MPRINT(TAXSCF): DO I=1 TO DIM(INCTYPES); MPRINT(TAXSCF): INCTYPES{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Allocate NPEU wage income across all NPEU members less than 70 years old. If only other type of income is Social Security, allocate amount across NPEU members age 62 or more. Otherwise, allocate total amount of nonwage income divided by the number of other types of income to each type of income equally to each NPEU member; MPRINT(TAXSCF): NUMU70=(0=62 & X113=5)+(X116>=62 & X119=5)+(X122>=62 & X125=5) +(X128>=62 & X131=5)+(X134>=62 & X137=5)+(X204>=62 & X207=5) +(X210>=62 & X213=5)+(X216>=62 & X219=5)+(X222>=62 & X225=5); MPRINT(TAXSCF): NUMINCTYPES=(X6406=1)+(X6407=1)+(X6408=1)+(X6409=1)+(X6410=1)+(X6411=1) +(X6412=1)+(X6413=1)+(X6414 > 5); MPRINT(TAXSCF): IF (NUMU70 > 0) THEN WSINCOME=(MAX(0,X6403)/NUMU70)*(TUAGE < 70); MPRINT(TAXSCF): ELSE WSINCOME=(MAX(0,X6403)/X7050); MPRINT(TAXSCF): IF (X6415 > 0 & NUMINCTYPES > 0) THEN DO; MPRINT(TAXSCF): IF (NUMGE62 > 0) THEN GSSINC=(X6406=1)*((MAX(0,X6415)/(NUMINCTYPES))/NUMGE62)*(TUAGE>=62); MPRINT(TAXSCF): ELSE GSSINC=(X6406=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): TBUSINC=(X6412=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): INTINC=(X6410=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): DIVINC=(X6411=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): RENTINC=(X6413=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): PENINC=(X6407=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050) +(X6408=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): AFDCINC=(X6409=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): CAPGLINC=(X6414 IN(13))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): UNEMPINC=(X6414 IN(10))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): OTHINC=(X6414 IN(11 12 15))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): END; MPRINT(TAXSCF): OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; 360 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): NONTAX=NTAXINC+AFDCINC; MPRINT(TAXSCF): * All NPEU tax units take the standard deduction, have one personal exemption, and have filing status of single; MPRINT(TAXSCF): ITEMDEDCT_FLAG=0; MPRINT(TAXSCF): PERSEXP=1; MPRINT(TAXSCF): TOTEXPT=1; MPRINT(TAXSCF): KIDS=0; MPRINT(TAXSCF): KIDSU13=0; MPRINT(TAXSCF): KIDSU17=0; MPRINT(TAXSCF): KIDSU18=0; MPRINT(TAXSCF): FILESTAT=1; MPRINT(TAXSCF): AGI=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC+UNEMPINC+CHSPALINC+OTHINC+PENINC+GSSINC; MPRINT(TAXSCF): IF AGI=-1 THEN AGI=0; MPRINT(TAXSCF): AGIGE50K=(AGI>=50000); MPRINT(TAXSCF): AGICL=1*(AGI < 50000)+2*(50000 <= AGI < 100000)+3*(AGI >= 100000); MPRINT(TAXSCF): RUN; NOTE: There were 2615 observations read from the data set WORK.NPEU. NOTE: The data set WORK.NPEU has 2615 observations and 5371 variables. NOTE: DATA statement used (Total process time): real time 0.07 seconds cpu time 0.07 seconds MPRINT(TAXSCF): * Add NPEU tax units; MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF NPEU; MPRINT(TAXSCF): RUN; NOTE: There were 24035 observations read from the data set WORK.SCF. NOTE: There were 2615 observations read from the data set WORK.NPEU. NOTE: The data set WORK.SCF has 26650 observations and 5371 variables. NOTE: DATA statement used (Total process time): real time 0.54 seconds cpu time 0.53 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): ************Itemized deductions; MPRINT(TAXSCF): IF ITEMDEDCT_FLAG=1 THEN DO; MPRINT(TAXSCF): ************Mortgage interest deduction; MPRINT(TAXSCF): * Convert real estate taxes on primary residence into a yearly amount; MPRINT(TAXSCF): RESTAXM1=0; MPRINT(TAXSCF): IF (X721 > 0) THEN DO; MPRINT(TAXSCF): RESTAXM1=X721 MPRINT(ACONV): *((X722=2)*52.18+(X722=3)*26.09+(X722=4)*12+(X722=5)*4+(X722=6)+(X722=8)+ (X722=11)*2+(X722=12)*6+(X722=31)*24+(X722=14)+(X722=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Create arrays for various mortgage loan components; MPRINT(TAXSCF): ARRAY TLMTH {*} TLMTHM1 TLMTHM2 TLMTHM3; MPRINT(TAXSCF): ARRAY CMOPAY {*} CMOPAYM1 CMOPAYM2 CMOPAYM3; MPRINT(TAXSCF): ARRAY PAYLFT {*} PAYLFTM1 PAYLFTM2 PAYLFTM3; MPRINT(TAXSCF): ARRAY AMTOWE {*} AMTOWEM1 AMTOWEM2 AMTOWEM3; MPRINT(TAXSCF): ARRAY AMTOWE_1 {*} AMTOWE_1M1 AMTOWE_1M2 AMTOWE_1M3; MPRINT(TAXSCF): ARRAY AINTDCT {*} AINTDCTM1 AINTDCTM2 AINTDCTM3; MPRINT(TAXSCF): ARRAY LNAGE {*} LNAGEM1 LNAGEM2 LNAGEM3; 361 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ARRAY CURBAL {*} CURBALM1 CURBALM2 CURBALM3; MPRINT(TAXSCF): ARRAY CURBAL_1 {*} CURBAL_1M1 CURBAL_1M2 CURBAL_1M3; MPRINT(TAXSCF): ARRAY CINTDCT {*} CINTDCTM1 CINTDCTM2 CINTDCTM3; MPRINT(TAXSCF): ARRAY DCTDIFF {*} DCTDIFFM1 DCTDIFFM2 DCTDIFFM3; MPRINT(TAXSCF): ARRAY SINTDCT {*} SINTDCTM1 SINTDCTM2 SINTDCTM3; MPRINT(TAXSCF): ARRAY AVINTDCT {*} AVINTDCTM1 AVINTDCTM2 AVINTDCTM3; MPRINT(TAXSCF): ARRAY NMPMT {*} X807 X907 X1007; MPRINT(TAXSCF): ARRAY NMYR {*} X806 X906 X1006; MPRINT(TAXSCF): ARRAY REGPAYF {*} X809 X909 X1009; MPRINT(TAXSCF): ARRAY REGPAY {*} X808 X908 X1008; MPRINT(TAXSCF): ARRAY TYPAYF {*} X814 X914 X1014; MPRINT(TAXSCF): ARRAY TYPAY {*} X813 X913 X1013; MPRINT(TAXSCF): ARRAY LNSTMN {*} X801 X901 X1001; MPRINT(TAXSCF): ARRAY LNSTYR {*} X802 X902 X1002; MPRINT(TAXSCF): ARRAY HBALLN {*} X811 X911 X1011; MPRINT(TAXSCF): ARRAY BALLN {*} X812 X912 X1012; MPRINT(TAXSCF): ARRAY HAVELN {*} X723 X830 X931; MPRINT(TAXSCF): ARRAY AMTBORR {*} X804 X904 X1004; MPRINT(TAXSCF): ARRAY JAMTBORR {*} J804 J904 J1004; MPRINT(TAXSCF): ARRAY AMTOUT {*} X805 X905 X1005; MPRINT(TAXSCF): ARRAY JAMTOUT {*} J805 J905 J1005; MPRINT(TAXSCF): ARRAY INTRATE {*} X816 X916 X1016; MPRINT(TAXSCF): ARRAY ONSCHED {*} X7571 X7570 X7569; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTH); MPRINT(TAXSCF): TLMTH{I}=0; MPRINT(TAXSCF): CMOPAY{I}=0; MPRINT(TAXSCF): PAYLFT{I}=0; MPRINT(TAXSCF): AMTOWE{I}=0; MPRINT(TAXSCF): AMTOWE_1{I}=0; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): LNAGE{I}=0; MPRINT(TAXSCF): CURBAL{I}=0; MPRINT(TAXSCF): CURBAL_1{I}=0; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): DCTDIFF{I}=0; MPRINT(TAXSCF): SINTDCT{I}=0; MPRINT(TAXSCF): AVINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): NUMORT=(X723=1)+(X830=1)+(X931=1); MPRINT(TAXSCF): TOTAMTOUTM=0; MPRINT(TAXSCF): TOTDEDCTM=0; MPRINT(TAXSCF): GRFAMTOUTM=0; MPRINT(TAXSCF): A17AMTOUTM=0; MPRINT(TAXSCF): HAAMTOUTM=0; MPRINT(TAXSCF): DO I=1 TO DIM(NMPMT); MPRINT(TERMCON): IF (NMYR{I}=0 & NMPMT{I}=0) THEN DO; MPRINT(TERMCON): TLMTH{I}=0; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYR{I}^=0|NMPMT{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYR{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYR{I}=-1) THEN DO; MPRINT(TERMCON): TLMTH{I}=NMYR{I}; MPRINT(TERMCON): IF (NMPMT{I}=0) THEN DO; MPRINT(TERMCON): NMPMT{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYR{I}>0) THEN DO; 362 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TERMCON): TLMTH{I}=NMYR{I}*12; MPRINT(TERMCON): IF (NMPMT{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYF{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMT{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYF{I}=-7) THEN DO; MPRINT(TERMCON): NMPMT{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYF{I}=8) THEN DO; MPRINT(TERMCON): NMPMT{I}=1; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYF{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYF{I}=1) THEN NMPMT{I}=TLMTH{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=2) THEN NMPMT{I}=TLMTH{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=3) THEN NMPMT{I}=TLMTH{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=4) THEN NMPMT{I}=TLMTH{I}; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=5) THEN NMPMT{I}=TLMTH{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=6) THEN NMPMT{I}=TLMTH{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=20) THEN NMPMT{I}=TLMTH{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=21) THEN NMPMT{I}=TLMTH{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=11) THEN NMPMT{I}=TLMTH{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=12) THEN NMPMT{I}=TLMTH{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=23) THEN NMPMT{I}=TLMTH{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=24) THEN NMPMT{I}=TLMTH{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=25) THEN NMPMT{I}=TLMTH{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=31) THEN NMPMT{I}=TLMTH{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=18) THEN NMPMT{I}=TLMTH{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=0) THEN NMPMT{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYF{I}>.Z & REGPAYF{I}^=-1 & REGPAYF{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMT{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTH{I}= REGPAYF{I}= NMPMT{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTH{I}>.Z & TLMTH{I}<-2) THEN DO; MPRINT(MOCONV): NMPMT{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTH{I}= REGPAYF{I}= NMPMT{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTH{I}<=.Z) THEN NMPMT{I}=TLMTH{I}; MPRINT(MOCONV): ELSE IF (TLMTH{I}^=-1 & TLMTH{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYF{I}= TLMTH{I}= "SETTING AMT=."; MPRINT(MOCONV): NMPMT{I}=.; MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMT{I}=-1) THEN DO; MPRINT(TERMCON): TLMTH{I}=-1; MPRINT(TERMCON): IF (NMYR{I}=0) THEN DO; MPRINT(TERMCON): NMYR{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMT{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYF{I}; MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYF{I}>0) THEN PFREQ=TYPAYF{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTH{I}=-7; MPRINT(TERMCON): END; 363 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; MPRINT(TERMCON): TLMTH{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): IF (NMPMT{I}>0) THEN DO; MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTH{I}=NMPMT{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}))); MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12))); MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTH{I}=NMPMT{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTH{I}=NMPMT{I}*2/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTH{I}=NMPMT{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTH{I}=NMPMT{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTH{I}=NMPMT{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTH{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): TLMTH{I}=NMPMT{I}; MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMT{I}= PFREQ= TLMTH{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMT{I}>.Z & NMPMT{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTH{I}=NMPMT{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMT{I}= PFREQ= TLMTH{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMT{I}=0) THEN TLMTH{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMT{I}<=.Z) THEN TLMTH{I}=NMPMT{I}; MPRINT(IMOCONV): ELSE IF (NMPMT{I}^=-1 & NMPMT{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMT{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTH{I}=.; MPRINT(IMOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTH{I}>0) THEN DO; MPRINT(TERMCON): NMYR{I}=MAX(1,INT(.5+(TLMTH{I}/12))); MPRINT(TERMCON): TLMTH{I}=MAX(1,ROUND(TLMTH{I})); MPRINT(TERMCON): END; MPRINT(TERMCON): IF (NMYR{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMT{I}= NMYR{I}= TLMTH{I}= REGPAYF{I}= REGPAY{I}= TYPAYF{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAY{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYF{I}=1) THEN CMOPAY{I}=REGPAY{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=2) THEN CMOPAY{I}=REGPAY{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=3) THEN CMOPAY{I}=REGPAY{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=4) THEN CMOPAY{I}=REGPAY{I}; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=5) THEN CMOPAY{I}=REGPAY{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=6) THEN CMOPAY{I}=REGPAY{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=20) THEN CMOPAY{I}=REGPAY{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=21) THEN CMOPAY{I}=REGPAY{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=8) THEN CMOPAY{I}=REGPAY{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=11) THEN CMOPAY{I}=REGPAY{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=12) THEN CMOPAY{I}=REGPAY{I}*(52/52)/2; 364 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (REGPAYF{I}=23) THEN CMOPAY{I}=REGPAY{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=24) THEN CMOPAY{I}=REGPAY{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=25) THEN CMOPAY{I}=REGPAY{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=31) THEN CMOPAY{I}=REGPAY{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=18) THEN CMOPAY{I}=REGPAY{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=0) THEN CMOPAY{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYF{I}>.Z & REGPAYF{I}^=-1 & REGPAYF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAY{I}= REGPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAY{I}>.Z & REGPAY{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAY{I}= REGPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAY{I}<=.Z) THEN CMOPAY{I}=REGPAY{I}; MPRINT(MOCONV): ELSE IF (REGPAY{I}^=-1 & REGPAY{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYF{I}= REGPAY{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(MOCONV): IF (TYPAYF{I}=1) THEN CMOPAY{I}=TYPAY{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=2) THEN CMOPAY{I}=TYPAY{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=3) THEN CMOPAY{I}=TYPAY{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=4) THEN CMOPAY{I}=TYPAY{I}; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=5) THEN CMOPAY{I}=TYPAY{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=6) THEN CMOPAY{I}=TYPAY{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=20) THEN CMOPAY{I}=TYPAY{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=21) THEN CMOPAY{I}=TYPAY{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=8) THEN CMOPAY{I}=TYPAY{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=11) THEN CMOPAY{I}=TYPAY{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=12) THEN CMOPAY{I}=TYPAY{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=23) THEN CMOPAY{I}=TYPAY{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=24) THEN CMOPAY{I}=TYPAY{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=25) THEN CMOPAY{I}=TYPAY{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=31) THEN CMOPAY{I}=TYPAY{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=18) THEN CMOPAY{I}=TYPAY{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=0) THEN CMOPAY{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYF{I}>.Z & TYPAYF{I}^=-1 & TYPAYF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAY{I}= TYPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAY{I}>.Z & TYPAY{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAY{I}= TYPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAY{I}<=.Z) THEN CMOPAY{I}=TYPAY{I}; MPRINT(MOCONV): ELSE IF (TYPAY{I}^=-1 & TYPAY{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYF{I}= TYPAY{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF NMYR{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFT{I}=(TLMTH{I}-((2001-LNSTYR{I})*12)); MPRINT(TAXSCF): LNAGE{I}=TLMTH{I}-PAYLFT{I}; MPRINT(TAXSCF): END; 365 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFT{I}=0; MPRINT(TAXSCF): LNAGE{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): file "null.txt"; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((X723=1) & (X810 IN(1 2 3)) & TLMTHM1 > 0 & X816 > 0) THEN DO; MPRINT(TAXSCF): IF (X811=1) THEN DO; MPRINT(MORTPAY): AMOPAYM1=ROUND((MORT((X804),.,((X816/10000)/12),(TLMTHM1))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (CMOPAYM1 > AMOPAYM1) THEN CMOPAYM1=AMOPAYM1; MPRINT(TAXSCF): 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= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X811=2) THEN DO; MPRINT(TAXSCF): IF (X804 > X812) THEN ADJBORR=X804-X812; MPRINT(TAXSCF): ELSE IF (X804 < X812) THEN ADJBORR=X804; MPRINT(TAXSCF): IF ADJBORR > 0 THEN MPRINT(MORTPAY): AMOPAYM1=ROUND((MORT((ADJBORR),.,((X816/10000)/12),(TLMTHM1))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (X804=X812) THEN AMOPAYM1=((X804)*(X816/10000))/12; MPRINT(TAXSCF): IF (CMOPAYM1 > AMOPAYM1) THEN CMOPAYM1=AMOPAYM1; MPRINT(TAXSCF): 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= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * 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); MPRINT(TAXSCF): * NOT INCLUDING LAND CONTRACTS; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELN); MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTDCT{I}=CMOPAY{I}*12; MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELN{I}=1 & HBALLN{I} IN(1 2) & NMYR{I} NOT IN(0 -1 -7) & INTRATE{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & PAYLFT{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAY{I} < AMTBORR{I}*.005) THEN CMOPAY{I}=MAX(REGPAY{I},TYPAY{I}); MPRINT(TAXSCF): 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})); MPRINT(TAXSCF): 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))); 366 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): IF LNSTYR{I}^=2001 THEN AINTDCT{I}=(CMOPAY{I}*12)-(AMTOWE_1{I}-AMTOWE{I}); MPRINT(TAXSCF): ELSE IF LNSTYR{I}=2001 THEN AINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTH{I} < 0 | CMOPAY{I} < 0 | PAYLFT{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWE{I}=0; MPRINT(TAXSCF): AMTOWE_1{I}=0; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & AMTBORR{I} > 0 & LNAGE{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTDCT{I}=(CMOPAY{I}*12)-(CURBAL_1{I}-CURBAL{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTH{I} < 0 | AMTBORR{I} < 0 | LNAGE{I} < 0) THEN DO; MPRINT(TAXSCF): CURBAL{I}=0; MPRINT(TAXSCF): CURBAL_1{I}=0; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUT{I} > 0 & INTRATE{I} > 0) THEN SINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): ELSE SINTDCT{I}=0; MPRINT(TAXSCF): * 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 the home was not purchased in the survey year. If the home was purchased in the survey year, set deduction to zero.; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & PAYLFT{I}=0) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=CURBAL_1{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): AINTDCT{I}=CINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & LNSTYR{I}=2001 & X720=2001) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): SINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & LNSTYR{I}=2001) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTDCT{I} < 0 | CINTDCT{I} < 0) & CURBAL{I} > 0 & CURBAL_1{I} > 0) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=CURBAL_1{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): AINTDCT{I}=CINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTDCT{I} < 0 | CINTDCT{I} < 0) & (CURBAL{I} <= 0 & CURBAL_1{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCT{I} > 0 & CINTDCT{I} > 0) THEN DCTDIFF{I}=CINTDCT{I}-SINTDCT{I}; MPRINT(TAXSCF): ELSE DCTDIFF{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELN{I}=1 & (NMYR{I} IN(-1 -7) | NMPMT{I} IN(-1 -7)) & AMTOUT{I} > 0 & INTRATE{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; 367 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELN{I}=1 & (INTRATE{I}=-1)) THEN DO; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): SINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest deduction; MPRINT(TAXSCF): IF ((CINTDCT{I} + AINTDCT{I} + SINTDCT{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTDCT{I}=(CINTDCT{I}+AINTDCT{I}+SINTDCT{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTDCT{I}=0; MPRINT(TAXSCF): * Constraining interest deduction amount to be no more than the reported year 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.; MPRINT(TAXSCF): IF (HAVELN{I}=1 & AVINTDCT{I} > 0 & CMOPAY{I} > 0 & (AVINTDCT{I} > CMOPAY{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTDCT{I}=CMOPAY{I}*12; MPRINT(TAXSCF): CINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): SINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELN{I}=1 & AVINTDCT{I} > 0 & AMTOUT{I} > 0 & (AVINTDCT{I} > .25*AMTOUT{I})) THEN DO; MPRINT(TAXSCF): AVINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): CINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELN{I}=1 & Y1=YY1*10+1 & AVINTDCT{I}=0 & NMYR{I}^=2001) 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}= /; MPRINT(TAXSCF): * 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; MPRINT(TAXSCF): IF (X702=1 & X714=1 & X7135=5) THEN DO; MPRINT(TAXSCF): TOTDEDCTM=TOTDEDCTM+(AVINTDCT{I}/X715)*(HAVELN{I}=1); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE TOTDEDCTM=TOTDEDCTM+AVINTDCT{I}; MPRINT(TAXSCF): * Total amount outstanding on loans; MPRINT(TAXSCF): TOTAMTOUTM=TOTAMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): * Need to divide mortgages up by date, pre 10/13/87 mortgages are considered grandfathered debt by IRS, and different limits apply to mortgages taken out after 12/15/2017; MPRINT(TAXSCF): IF ((LNSTYR{I}=1987 & LNSTMN{I} < 10) | (LNSTYR{I} < 1987)) THEN DO; MPRINT(TAXSCF): GRFAMTOUTM=GRFAMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((LNSTYR{I}=2017 & LNSTMN{I}=12) | (LNSTYR{I} > 2017)) THEN DO; MPRINT(TAXSCF): A17AMTOUTM=A17AMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((LNSTYR{I}=1987 & LNSTMN {I} >= 10) | (1987 < LNSTYR{I} < 2017) | (LNSTYR{I}=2017 & LNSTMN{I}<=11)) THEN DO; MPRINT(TAXSCF): HAAMTOUTM=HAAMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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, 3, or 4 as home acquisition debt (same as a mortgage, counts toward mortgage balance limit), while HELOCs with other use codes counted as home equity debt. Ignoring the mopup as we dont know if that LOC is secured by a home; MPRINT(TAXSCF): ARRAY CMOPAYL {*} CMOPAYL1 CMOPAYL2 CMOPAYL3; MPRINT(TAXSCF): ARRAY SINTDCTL {*} SINTDCTL1 SINTDCTL2 SINTDCTL3; MPRINT(TAXSCF): ARRAY AQDBT {*} AQDBTL1 AQDBTL2 AQDBTL3; 368 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ARRAY AQINT {*} AQINTL1 AQINTL2 AQINTL3; MPRINT(TAXSCF): ARRAY EQDBT {*} EQDBTL1 EQDBTL2 EQDBTL3; MPRINT(TAXSCF): ARRAY SBYHOME {*} X1103 X1114 X1125; MPRINT(TAXSCF): ARRAY DOOWE {*} X1105 X1116 X1127; MPRINT(TAXSCF): ARRAY LNPURP {*} X1106 X1117 X1128; MPRINT(TAXSCF): ARRAY AMTOUTL {*} X1108 X1119 X1130; MPRINT(TAXSCF): ARRAY TYPAYL {*} X1109 X1120 X1131; MPRINT(TAXSCF): ARRAY TYPAYLF {*} X1110 X1121 X1132; MPRINT(TAXSCF): ARRAY INTRATEL {*} X1111 X1122 X1133; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): TOTAQDBTL=0; MPRINT(TAXSCF): TOTEQDBTL=0; MPRINT(TAXSCF): TOTDEDCTL=0; MPRINT(TAXSCF): TOTAQDEDCTL=0; MPRINT(TAXSCF): TOTLOCINVEX=0; MPRINT(TAXSCF): DO I=1 TO DIM(CMOPAYL); MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): AQDBT{I}=0; MPRINT(TAXSCF): AQINT{I}=0; MPRINT(TAXSCF): EQDBT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (X1101=1) THEN DO; MPRINT(TAXSCF): DO I=1 TO DIM(SBYHOME); MPRINT(TAXSCF): IF (SBYHOME{I}=1 & DOOWE{I}=1) THEN DO; MPRINT(TAXSCF): IF (TYPAYL{I} > 0) THEN DO; MPRINT(MOCONV): IF (TYPAYLF{I}=1) THEN CMOPAYL{I}=TYPAYL{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=2) THEN CMOPAYL{I}=TYPAYL{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=3) THEN CMOPAYL{I}=TYPAYL{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=4) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=5) THEN CMOPAYL{I}=TYPAYL{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=6) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=20) THEN CMOPAYL{I}=TYPAYL{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=21) THEN CMOPAYL{I}=TYPAYL{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=8) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=11) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=12) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=23) THEN CMOPAYL{I}=TYPAYL{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=24) THEN CMOPAYL{I}=TYPAYL{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=25) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=31) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=18) THEN CMOPAYL{I}=TYPAYL{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=0) THEN CMOPAYL{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}>.Z & TYPAYLF{I}^=-1 & TYPAYLF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}>.Z & TYPAYL{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}<=.Z) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYL{I}^=-1 & TYPAYL{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYLF{I}= TYPAYL{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; 369 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE IF (TYPAYL{I} IN(0 -1 -2)) THEN DO; MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (INTRATEL{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=((INTRATEL{I}/10000)*AMTOUTL{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEL{I} IN(0 -1)) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTL{I} > 0 & CMOPAYL{I} > 0 & SINTDCTL{I} > CMOPAYL{I}*12) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=CMOPAYL{I}*12; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (LNPURP{I} IN(1 3 4)) THEN DO; MPRINT(TAXSCF): AQDBT{I}=AMTOUTL{I}; MPRINT(TAXSCF): AQINT{I}=SINTDCTL{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (LNPURP{I} NOT IN(1 3 4)) THEN DO; MPRINT(TAXSCF): EQDBT{I}=AMTOUTL{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTDEDCTL=TOTDEDCTL+SINTDCTL{I}; MPRINT(TAXSCF): TOTAQDEDCTL=TOTAQDEDCTL+AQINT{I}; MPRINT(TAXSCF): TOTAQDBTL=TOTAQDBTL+AQDBT{I}; MPRINT(TAXSCF): TOTEQDBTL=TOTEQDBTL+EQDBT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * Dropped third column of grid for 2010 forward; MPRINT(TAXSCF): * Create arrays for various other property loan components; MPRINT(TAXSCF): ARRAY TLMTHO {*} TLMTHO1 TLMTHO2 TLMTHO3; MPRINT(TAXSCF): ARRAY CMOPAYO {*} CMOPAYO1 CMOPAYO2 CMOPAYO3; MPRINT(TAXSCF): ARRAY AMOPAYO {*} AMOPAYO1 AMOPAYO2 AMOPAYO3; MPRINT(TAXSCF): ARRAY PAYLFTO {*} PAYLFTO1 PAYLFTO2 PAYLFTO3; MPRINT(TAXSCF): ARRAY AMTOWEO {*} AMTOWEO1 AMTOWEO2 AMTOWEO3; MPRINT(TAXSCF): ARRAY AMTOWE_1O {*} AMTOWE_1O1 AMTOWE_1O2 AMTOWE_1O3; MPRINT(TAXSCF): ARRAY AINTDCTO {*} AINTDCTO1 AINTDCTO2 AINTDCTO3; MPRINT(TAXSCF): ARRAY LNAGEO {*} LNAGEO1 LNAGEO2 LNAGEO3; MPRINT(TAXSCF): ARRAY CURBALO {*} CURBALO1 CURBALO2 CURBALO3; MPRINT(TAXSCF): ARRAY CURBAL_1O {*} CURBAL_1O1 CURBAL_1O2 CURBAL_1O3; MPRINT(TAXSCF): ARRAY CINTDCTO {*} CINTDCTO1 CINTDCTO2 CINTDCTO3; MPRINT(TAXSCF): ARRAY DCTDIFFO {*} DCTDIFFO1 DCTDIFFO2 DCTDIFFO3; MPRINT(TAXSCF): ARRAY SINTDCTO {*} SINTDCTO1 SINTDCTO2 SINTDCTO3; MPRINT(TAXSCF): ARRAY AVINTDCTO {*} AVINTDCTO1 AVINTDCTO2 AVINTDCTO3; MPRINT(TAXSCF): ARRAY QUALPROP {*} QPROP1 QPROP2 QPROP3; MPRINT(TAXSCF): ARRAY QUALPINV {*} QPINV1 QPINV2 QPINV3; MPRINT(TAXSCF): ARRAY ADJBORRO {*} ADJBORRO1 ADJBORRO2 ADJBORRO3; MPRINT(TAXSCF): ARRAY NMPMTO {*} X1717 X1817 X1917; MPRINT(TAXSCF): ARRAY NMYRO {*} X1716 X1816 X1916; MPRINT(TAXSCF): ARRAY REGPAYFO {*} X1719 X1819 X1919; MPRINT(TAXSCF): ARRAY REGPAYO {*} X1718 X1818 X1918; MPRINT(TAXSCF): ARRAY TYPAYFO {*} X1724 X1824 X1924; MPRINT(TAXSCF): ARRAY TYPAYO {*} X1723 X1823 X1923; MPRINT(TAXSCF): ARRAY LNSTMNO {*} X1712 X1812 X1912; MPRINT(TAXSCF): ARRAY LNSTYRO {*} X1713 X1813 X1913; MPRINT(TAXSCF): ARRAY HBALLNO {*} X1721 X1821 X1921; MPRINT(TAXSCF): ARRAY BALLNO {*} X1722 X1822 X1922; MPRINT(TAXSCF): ARRAY AMTBORRO {*} X1714 X1814 X1914; 370 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ARRAY JAMTBORRO {*} J1714 J1814 J1914; MPRINT(TAXSCF): ARRAY AMTOUTO {*} X1715 X1815 X1915; MPRINT(TAXSCF): ARRAY JAMTOUTO {*} J1715 J1815 J1915; MPRINT(TAXSCF): ARRAY HAVELNO {*} X1711 X1811 X1911; MPRINT(TAXSCF): ARRAY INTRATEO {*} X1726 X1826 X1926; MPRINT(TAXSCF): ARRAY ONSCHEDO {*} X7554 X7553 X7552; MPRINT(TAXSCF): ARRAY HINCOMEO {*} X1729 X1829 X1929; MPRINT(TAXSCF): ARRAY INCOMEO {*} X1730 X1830 X1930; MPRINT(TAXSCF): ARRAY PROPTYPE {*} X1703 X1803 X1903; MPRINT(TAXSCF): ARRAY PERPROP {*} X1705 X1805 X1905; MPRINT(TAXSCF): ARRAY PROPVAL {*} X1706 X1806 X1906; MPRINT(TAXSCF): ARRAY TAXINS {*} X1720 X1820 X1920; MPRINT(TAXSCF): ARRAY PURCHYRO {*} X1708 X1808 X1908; MPRINT(TAXSCF): ARRAY LIMFLAG {*} LIMFL1 LIMFL2 LIMFL3; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTHO); MPRINT(TAXSCF): TLMTHO{I}=0; MPRINT(TAXSCF): CMOPAYO{I}=0; MPRINT(TAXSCF): PAYLFTO{I}=0; MPRINT(TAXSCF): AMTOWEO{I}=0; MPRINT(TAXSCF): AMTOWE_1O{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): LNAGEO{I}=0; MPRINT(TAXSCF): CURBALO{I}=0; MPRINT(TAXSCF): CURBAL_1O{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): DCTDIFFO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): AVINTDCTO{I}=0; MPRINT(TAXSCF): QUALPROP{I}=0; MPRINT(TAXSCF): QUALPINV{I}=0; MPRINT(TAXSCF): ADJBORRO{I}=0; MPRINT(TAXSCF): LIMFLAG{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTAMTOUTO=0; MPRINT(TAXSCF): TOTDEDCTO=0; MPRINT(TAXSCF): QUALOTHPROP=0; MPRINT(TAXSCF): QUALINVPROP=0; MPRINT(TAXSCF): TOTINVPDCT=0; MPRINT(TAXSCF): FMVOP=0; MPRINT(TAXSCF): DO I=1 TO DIM(NMPMTO); MPRINT(TERMCON): IF (NMYRO{I}=0 & NMPMTO{I}=0) THEN DO; MPRINT(TERMCON): TLMTHO{I}=0; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRO{I}^=0|NMPMTO{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRO{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRO{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHO{I}=NMYRO{I}; MPRINT(TERMCON): IF (NMPMTO{I}=0) THEN DO; MPRINT(TERMCON): NMPMTO{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRO{I}>0) THEN DO; MPRINT(TERMCON): TLMTHO{I}=NMYRO{I}*12; MPRINT(TERMCON): IF (NMPMTO{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYFO{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMTO{I}=-7; MPRINT(TERMCON): END; 371 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TERMCON): ELSE IF (REGPAYFO{I}=-7) THEN DO; MPRINT(TERMCON): NMPMTO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFO{I}=8) THEN DO; MPRINT(TERMCON): NMPMTO{I}=1; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFO{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYFO{I}=1) THEN NMPMTO{I}=TLMTHO{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=2) THEN NMPMTO{I}=TLMTHO{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=3) THEN NMPMTO{I}=TLMTHO{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=4) THEN NMPMTO{I}=TLMTHO{I}; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=5) THEN NMPMTO{I}=TLMTHO{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=6) THEN NMPMTO{I}=TLMTHO{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=20) THEN NMPMTO{I}=TLMTHO{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=21) THEN NMPMTO{I}=TLMTHO{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=11) THEN NMPMTO{I}=TLMTHO{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=12) THEN NMPMTO{I}=TLMTHO{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=23) THEN NMPMTO{I}=TLMTHO{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=24) THEN NMPMTO{I}=TLMTHO{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=25) THEN NMPMTO{I}=TLMTHO{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=31) THEN NMPMTO{I}=TLMTHO{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=18) THEN NMPMTO{I}=TLMTHO{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=0) THEN NMPMTO{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}>.Z & REGPAYFO{I}^=-1 & REGPAYFO{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMTO{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTHO{I}= REGPAYFO{I}= NMPMTO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHO{I}>.Z & TLMTHO{I}<-2) THEN DO; MPRINT(MOCONV): NMPMTO{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTHO{I}= REGPAYFO{I}= NMPMTO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHO{I}<=.Z) THEN NMPMTO{I}=TLMTHO{I}; MPRINT(MOCONV): ELSE IF (TLMTHO{I}^=-1 & TLMTHO{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFO{I}= TLMTHO{I}= "SETTING AMT=."; MPRINT(MOCONV): NMPMTO{I}=.; MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTO{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHO{I}=-1; MPRINT(TERMCON): IF (NMYRO{I}=0) THEN DO; MPRINT(TERMCON): NMYRO{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTO{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYFO{I}; MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYFO{I}>0) THEN PFREQ=TYPAYFO{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTHO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; MPRINT(TERMCON): TLMTHO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): IF (NMPMTO{I}>0) THEN DO; 372 The SAS System 13:32 Friday, January 29, 2021 MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTHO{I}=NMPMTO{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}))); MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12))); MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTHO{I}=NMPMTO{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTHO{I}=NMPMTO{I}*2/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTHO{I}=NMPMTO{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTHO{I}=NMPMTO{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTHO{I}=NMPMTO{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTHO{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): TLMTHO{I}=NMPMTO{I}; MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMTO{I}= PFREQ= TLMTHO{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}>.Z & NMPMTO{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTHO{I}=NMPMTO{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMTO{I}= PFREQ= TLMTHO{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}=0) THEN TLMTHO{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}<=.Z) THEN TLMTHO{I}=NMPMTO{I}; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}^=-1 & NMPMTO{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMTO{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTHO{I}=.; MPRINT(IMOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTHO{I}>0) THEN DO; MPRINT(TERMCON): NMYRO{I}=MAX(1,INT(.5+(TLMTHO{I}/12))); MPRINT(TERMCON): TLMTHO{I}=MAX(1,ROUND(TLMTHO{I})); MPRINT(TERMCON): END; MPRINT(TERMCON): IF (NMYRO{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMTO{I}= NMYRO{I}= TLMTHO{I}= REGPAYFO{I}= REGPAYO{I}= TYPAYFO{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAYO{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYFO{I}=1) THEN CMOPAYO{I}=REGPAYO{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=2) THEN CMOPAYO{I}=REGPAYO{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=3) THEN CMOPAYO{I}=REGPAYO{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=4) THEN CMOPAYO{I}=REGPAYO{I}; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=5) THEN CMOPAYO{I}=REGPAYO{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=6) THEN CMOPAYO{I}=REGPAYO{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=20) THEN CMOPAYO{I}=REGPAYO{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=21) THEN CMOPAYO{I}=REGPAYO{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=8) THEN CMOPAYO{I}=REGPAYO{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=11) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=12) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=23) THEN CMOPAYO{I}=REGPAYO{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=24) THEN CMOPAYO{I}=REGPAYO{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=25) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=31) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)*2; 373 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=18) THEN CMOPAYO{I}=REGPAYO{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=0) THEN CMOPAYO{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}>.Z & REGPAYFO{I}^=-1 & REGPAYFO{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAYO{I}= REGPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYO{I}>.Z & REGPAYO{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAYO{I}= REGPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYO{I}<=.Z) THEN CMOPAYO{I}=REGPAYO{I}; MPRINT(MOCONV): ELSE IF (REGPAYO{I}^=-1 & REGPAYO{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFO{I}= REGPAYO{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(MOCONV): IF (TYPAYFO{I}=1) THEN CMOPAYO{I}=TYPAYO{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=2) THEN CMOPAYO{I}=TYPAYO{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=3) THEN CMOPAYO{I}=TYPAYO{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=4) THEN CMOPAYO{I}=TYPAYO{I}; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=5) THEN CMOPAYO{I}=TYPAYO{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=6) THEN CMOPAYO{I}=TYPAYO{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=20) THEN CMOPAYO{I}=TYPAYO{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=21) THEN CMOPAYO{I}=TYPAYO{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=8) THEN CMOPAYO{I}=TYPAYO{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=11) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=12) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=23) THEN CMOPAYO{I}=TYPAYO{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=24) THEN CMOPAYO{I}=TYPAYO{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=25) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=31) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=18) THEN CMOPAYO{I}=TYPAYO{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=0) THEN CMOPAYO{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}>.Z & TYPAYFO{I}^=-1 & TYPAYFO{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYO{I}= TYPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYO{I}>.Z & TYPAYO{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYO{I}= TYPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYO{I}<=.Z) THEN CMOPAYO{I}=TYPAYO{I}; MPRINT(MOCONV): ELSE IF (TYPAYO{I}^=-1 & TYPAYO{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYFO{I}= TYPAYO{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF NMYRO{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFTO{I}=(TLMTHO{I}-((2001-LNSTYRO{I})*12)); MPRINT(TAXSCF): LNAGEO{I}=TLMTHO{I}-PAYLFTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFTO{I}=0; MPRINT(TAXSCF): LNAGEO{I}=0; MPRINT(TAXSCF): END; 374 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNO); MPRINT(TAXSCF): IF ((HAVELNO{I}=1) & (TAXINS{I} IN(1 2 3)) & TLMTHO{I} > 0 & INTRATEO{I} > 0) THEN DO; MPRINT(TAXSCF): IF (HBALLNO{I}=1) THEN DO; MPRINT(MORTPAY): AMOPAYO{I}=ROUND((MORT((AMTBORRO{I}),.,((INTRATEO{I}/10000)/12),(TLMTHO{I}))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (CMOPAYO{I} > AMOPAYO{I}) THEN CMOPAYO{I}=AMOPAYO{I}; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HBALLNO{I}=5) THEN DO; MPRINT(TAXSCF): IF (AMTBORRO{I} > BALLNO{I}) THEN ADJBORRO{I}=(AMTBORRO{I}-BALLNO{I}); MPRINT(TAXSCF): ELSE IF (AMTBORRO{I} < BALLNO{I}) THEN ADJBORRO{I}=AMTBORRO{I}; MPRINT(TAXSCF): IF ADJBORRO{I} > 0 THEN MPRINT(MORTPAY): AMOPAYO{I}=ROUND((MORT((ADJBORRO{I}),.,((INTRATEO{I}/10000)/12),(TLMTHO{I}))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (AMTBORRO{I}=BALLNO{I}) THEN AMOPAYO{I}=((AMTBORRO{I})*(INTRATEO{I}/10000))/12; MPRINT(TAXSCF): IF (CMOPAYO{I} > AMOPAYO{I}) THEN CMOPAYO{I}=AMOPAYO{I}; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * 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); MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNO); MPRINT(TAXSCF): IF (PROPTYPE{I} IN(12 13 14 21 22 25 40 49 999) & (HINCOMEO{I}=5 | INCOMEO{I}=-1)) | (PROPTYPE{I} IN(12 13 14 21 22 25 40 49 999) & HINCOMEO{I}=1 & INCOMEO{I} < (CMOPAYO{I}*12)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified properties; MPRINT(TAXSCF): QUALPROP{I}=(HAVELNO{I}=1); MPRINT(TAXSCF): QUALOTHPROP=QUALOTHPROP+QUALPROP{I}; MPRINT(TAXSCF): FMVOP=FMVOP+PROPVAL{I}*(HAVELNO{I}=1); MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & HBALLNO{I} IN(1 5) & NMYRO{I} NOT IN(0 -1 -7) & INTRATEO{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAYO{I} < AMTBORRO{I}*.005) THEN CMOPAYO{I}=MAX(REGPAYO{I},TYPAYO{I}); MPRINT(TAXSCF): AMTOWEO{I}=CMOPAYO{I}*((1-1/(1+(INTRATEO{I}/10000)/12)**PAYLFTO{I})/ ((INTRATEO{I}/10000)/12)) 375 The SAS System 13:32 Friday, January 29, 2021 +(HBALLNO{I}=5)*(BALLNO{I}/((1+(INTRATEO{I}/10000))**PAYLFTO{I})); MPRINT(TAXSCF): 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))); MPRINT(TAXSCF): IF LNSTYRO{I}^=2001 THEN AINTDCTO{I}=(CMOPAYO{I}*12)-(AMTOWE_1O{I}-AMTOWEO{I}); MPRINT(TAXSCF): ELSE IF LNSTYRO{I}=2001 THEN AINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | CMOPAYO{I} < 0 | PAYLFTO{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEO{I}=0; MPRINT(TAXSCF): AMTOWE_1O{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & AMTBORRO{I} > 0 & LNAGEO{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTDCTO{I}=(CMOPAYO{I}*12)-(CURBAL_1O{I}-CURBALO{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | AMTBORRO{I} < 0 | LNAGEO{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALO{I}=0; MPRINT(TAXSCF): CURBAL_1O{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): ELSE SINTDCTO{I}=0; MPRINT(TAXSCF): * 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 the home was not purchased in the survey year. If the home was purchased in the survey year, set deduction to zero.; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I}=0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=2001 & PURCHYRO{I}=2001) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=2001) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & CURBALO{I} > 0 & CURBAL_1O{I} > 0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & (CURBALO{I} <= 0 & CURBAL_1O{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTO{I} > 0 & CINTDCTO{I} > 0) THEN DCTDIFFO{I}=CINTDCTO{I}-SINTDCTO{I}; MPRINT(TAXSCF): ELSE DCTDIFFO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (NMYRO{I} IN(-1 -7) & NMPMTO{I} IN(-1 -7)) & AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN DO; 376 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (INTRATEO{I}=-1)) THEN DO; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest deduction; MPRINT(TAXSCF): IF ((CINTDCTO{I} + AINTDCTO{I} + SINTDCTO{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=(CINTDCTO{I}+AINTDCTO{I}+SINTDCTO{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTDCTO{I}=0; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & CMOPAYO{I} > 0 & (AVINTDCTO{I} > CMOPAYO{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): SINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & AMTOUTO{I} > 0 & (AVINTDCTO{I} > .25*AMTOUTO{I})) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): * Compute total deduction and total amount outstanding; MPRINT(TAXSCF): TOTDEDCTO=TOTDEDCTO+((AVINTDCTO{I})*PERPROP{I}/10000)*(HAVELNO{I}=1); MPRINT(TAXSCF): TOTAMTOUTO=TOTAMTOUTO+AMTOUTO{I}; MPRINT(TAXSCF): * Create flag for loans after 12/15/17, used in computing limits on mortgage interest deduction for home acquistion debt; MPRINT(TAXSCF): LIMFLAG{I}=(LNSTYRO{I}> 2017 | (LNSTYRO{I}=2017 & LNSTMNO{I}=12)); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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 hhs are rational and report the home/properties with the biggest deductions.; MPRINT(TAXSCF): ADJDEDCTO=0; MPRINT(TAXSCF): ADJAMTOUTO=0; MPRINT(TAXSCF): ADJ17AMTOUTO=0; MPRINT(TAXSCF): FMVOTHPROP=0; MPRINT(TAXSCF): IF (QUALOTHPROP > 0) THEN DO; MPRINT(TAXSCF): IF (QUALOTHPROP=1 & QPROP1=1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=1 & QPROP2=1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; 377 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=1 & QPROP3=1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO3; MPRINT(TAXSCF): ADJ17AMTOUTO=X1915*(LIMFL3=1); MPRINT(TAXSCF): ADJAMTOUTO=X1915*(LIMFL3=0); MPRINT(TAXSCF): FMVOTHPROP=X1906*(X1905/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=2) THEN DO; MPRINT(TAXSCF): IF (QPROP1=1 & QPROP2=1) THEN DO; MPRINT(TAXSCF): IF (AVINTDCTO1 >= AVINTDCTO2) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO2 >= AVINTDCTO1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QPROP1=1 & QPROP3=1) THEN DO; MPRINT(TAXSCF): IF (AVINTDCTO1 >= AVINTDCTO3) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO3 >= AVINTDCTO1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO3; MPRINT(TAXSCF): ADJ17AMTOUTO=X1915*(LIMFL3=1); MPRINT(TAXSCF): ADJAMTOUTO=X1915*(LIMFL3=0); MPRINT(TAXSCF): FMVOTHPROP=X1906*(X1905/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QPROP2=1 & QPROP3=1) THEN DO; MPRINT(TAXSCF): IF (AVINTDCTO2 >= AVINTDCTO3) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO3 >= AVINTDCTO2) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO3; MPRINT(TAXSCF): ADJ17AMTOUTO=X1915*(LIMFL3=1); MPRINT(TAXSCF): ADJAMTOUTO=X1915*(LIMFL3=0); MPRINT(TAXSCF): FMVOTHPROP=X1906*(X1905/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=3) THEN DO; MPRINT(TAXSCF): IF (AVINTDCTO1 >= AVINTDCTO2 & AVINTDCTO1 >= AVINTDCTO3) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); 378 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO2 >= AVINTDCTO1 & AVINTDCTO2 >= AVINTDCTO3) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO3 >= AVINTDCTO1 & AVINTDCTO3 >= AVINTDCTO2) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO3; MPRINT(TAXSCF): ADJ17AMTOUTO=X1915*(LIMFL3=1); MPRINT(TAXSCF): ADJAMTOUTO=X1915*(LIMFL3=0); MPRINT(TAXSCF): FMVOTHPROP=X1906*(X1905/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (X701=-7 & X7133=1) THEN DO; MPRINT(TAXSCF): HOUSE=(X7134/10000)*X716; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE HOUSE=SUM(0,X604,X614,X623,X716,(X513+X526)); MPRINT(TAXSCF): IF (TOTEQDBTL > 0 & GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL+TOTEQDBTL > (HOUSE)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) > 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=MIN((HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL)),TOTEQDBTL,100000); MPRINT(TAXSCF): ADJDEDCTL=TOTDEDCTL*(ADJEQDBTL/TOTEQDBTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) <= 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=0; MPRINT(TAXSCF): ADJDEDCTL=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((FILESTAT=3) & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) > 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=MIN((HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL)),TOTEQDBTL,50000); MPRINT(TAXSCF): ADJDEDCTL=TOTDEDCTL*(ADJEQDBTL/TOTEQDBTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((FILESTAT=3) & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) <= 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=0; MPRINT(TAXSCF): ADJDEDCTL=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TOTEQDBTL ^=. & TOTDEDCTL ^=.) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=TOTEQDBTL; MPRINT(TAXSCF): ADJDEDCTL=TOTDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TOTEQDBTL > 0 & GRFAMTOUTM+A17AMTOUTM+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= /; MPRINT(TAXSCF): * 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), worksheet changed in 2018; MPRINT(TAXSCF): ADJDEDCT=0; MPRINT(TAXSCF): * case 1 - grandfathered debt, no home acquisition debt, maybe home equity; MPRINT(TAXSCF): IF (GRFAMTOUTM > 0 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & ADJEQDBTL <= 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; 379 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & ADJEQDBTL > 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+100000)/(GRFAMTOUTM+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & ADJEQDBTL <= 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & ADJEQDBTL > 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+50000)/(GRFAMTOUTM+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * case 2 - some grandfathered debt, some home acquisition debt, maybe home equity; MPRINT(TAXSCF): ELSE IF (GRFAMTOUTM > 0 & (HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & (ADJEQDBTL=0 | ADJEQDBTL <= 100000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & ADJEQDBTL > 100000 & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+100000) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (ADJEQDBTL <= 100000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+ADJEQDBTL),(1000000+ADJEQDBTL))) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (ADJEQDBTL > 100000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+100000),1100000))/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (ADJEQDBTL=0 | ADJEQDBTL <= 50000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & ADJEQDBTL > 50000 & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+50000) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (ADJEQDBTL=0 | ADJEQDBTL <= 50000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+ADJEQDBTL),(500000+ADJEQDBTL))) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (ADJEQDBTL=0 | ADJEQDBTL > 50000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL 380 The SAS System 13:32 Friday, January 29, 2021 > 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+50000),550000))/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * case 3 - no grandfathered debt, maybe home acquisition, maybe home equity; MPRINT(TAXSCF): ELSE IF (GRFAMTOUTM=0 & (HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | ADJEQDBTL > 0)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 0 & ADJEQDBTL <= 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((100000)/ADJEQDBTL)*ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL <= 1000000) & ADJEQDBTL <= 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL <= 1000000) & ADJEQDBTL > 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+100000)/ (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL > 1000000) & (ADJEQDBTL <= 100000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((1000000+ADJEQDBTL)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL > 1000000) & (ADJEQDBTL > 100000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((1100000)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 0 & ADJEQDBTL <= 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((50000)/ADJEQDBTL)*ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000) & ADJEQDBTL <= 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000) & ADJEQDBTL > 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+50000)/ (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000) & (ADJEQDBTL <= 50000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((500000+ADJEQDBTL)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; 381 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000) & (ADJEQDBTL > 50000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((550000)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * a few obs will come out here, but they either have -1 as the interest rate or are land contracts; MPRINT(TAXSCF): IF ((GRFAMTOUTM > 0 | HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | (ADJEQDBTL*(2001 LE 2016)) > 0 | A17AMTOUTM > 0 & ADJ17AMTOUTO > 0) & ADJDEDCT=0 & X5744 IN(1 5 6) & Y1=YY1*10+1 & X720^=2001) THEN PUT "MORTGAGE DEDUCTION SHOULD NOT BE ZERO " Y1= X5744= X5746= GRFAMTOUTM= HAAMTOUTM= ADJAMTOUTO= TOTAQDBTL= ADJEQDBTL= A17AMTOUTM= ADJ17AMTOUTO= TOTDEDCTM= ADJDEDCTO= ADJDEDCTL= OVERLIM= QUALOTHPROP= CINTDCTM1= CINTDCTM2= CINTDCTM3= CINTDCTO1= CINTDCTO2= X702= X714= X7135= X723=/; MPRINT(TAXSCF): IF ((GRFAMTOUTM > 0 | HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | ADJEQDBTL > 0 | A17AMTOUTM > 0 & ADJ17AMTOUTO > 0) & OVERLIM=. & Y1=YY1*10+1) THEN PUT "OVER LIMIT INDICATOR MISSING " Y1= X5744= X5746= GRFAMTOUTM= HAAMTOUTM= ADJAMTOUTO= TOTAQDBTL= ADJEQDBTL= A17AMTOUTM= ADJ17AMTOUTO= TOTDEDCTM= ADJDEDCTO= ADJDEDCTL= OVERLIM= ADJDEDCT=/; MPRINT(TAXSCF): IF ADJDEDCT >= 100000 & Y1=YY1*10+1 THEN PUT "HUGE MORTGAGE INTEREST DEDUCTION " Y1= TOTDEDCTM= GRFAMTOUTM= HAAMTOUTM= TOTAQDBTL= ADJDEDCTL= ADJEQDBTL= ADJDEDCTO= ADJAMTOUTO= A17AMTOUTM= ADJ17AMTOUTO= HOUSE= QUALOTHPROP= FMVOTHPROP= X5744= X5746= ADJDEDCT= /; MPRINT(TAXSCF): ************Real estate taxes; MPRINT(TAXSCF): * TAXSIM doesnt want local property taxes in amount of itemized deductions, listed as a separate variable; MPRINT(TAXSCF): * 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; MPRINT(TAXSCF): PROPTXRATE=0; MPRINT(TAXSCF): IF (HOUSE > 0 & RESTAXM1 > 0) THEN PROPTXRATE=(RESTAXM1/HOUSE)*100; MPRINT(TAXSCF): IF (PROPTXRATE > 10 & Y1=YY1*10+1) THEN PUT "HIGH PROPERTY TAX RATE " Y1= HOUSE= RESTAXM1= X721= J721= X722= J722= X501= X601= X701= PROPTXRATE=/; MPRINT(TAXSCF): IF (PROPTXRATE > 10 & X722=4) THEN RESTAXM1=X721; MPRINT(TAXSCF): ************Investment interest expense; MPRINT(TAXSCF): * 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 need to add up dividend/interest income. Capital gains 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.; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * LOCs - only counting loans not secured by the residence and with asset or real estate investment as loan purpose.; MPRINT(TAXSCF): IF (X1101=1) THEN DO; MPRINT(TAXSCF): DO I=1 TO DIM(SBYHOME); MPRINT(TAXSCF): IF (SBYHOME{I}=5 & DOOWE{I}=1 & LNPURP{I} IN(76 78 79)) THEN DO; MPRINT(TAXSCF): IF (TYPAYL{I} > 0) THEN DO; MPRINT(MOCONV): IF (TYPAYLF{I}=1) THEN CMOPAYL{I}=TYPAYL{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=2) THEN CMOPAYL{I}=TYPAYL{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=3) THEN CMOPAYL{I}=TYPAYL{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=4) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=5) THEN CMOPAYL{I}=TYPAYL{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=6) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=20) THEN CMOPAYL{I}=TYPAYL{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=21) THEN CMOPAYL{I}=TYPAYL{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=8) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=11) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=12) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=23) THEN CMOPAYL{I}=TYPAYL{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=24) THEN CMOPAYL{I}=TYPAYL{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=25) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=31) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=18) THEN CMOPAYL{I}=TYPAYL{I}*40*52/12; 382 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=0) THEN CMOPAYL{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}>.Z & TYPAYLF{I}^=-1 & TYPAYLF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}>.Z & TYPAYL{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}<=.Z) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYL{I}^=-1 & TYPAYL{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYLF{I}= TYPAYL{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TYPAYL{I} IN(0 -1 -2)) THEN DO; MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (INTRATEL{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=((INTRATEL{I}/10000)*AMTOUTL{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEL{I} IN(0 -1)) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTL{I} > 0 & CMOPAYL{I} > 0 & SINTDCTL{I} > CMOPAYL{I}*12) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=CMOPAYL{I}*12; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTLOCINVEX=TOTLOCINVEX+SINTDCTL{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Other properties - only counting properties held for investment purposes, and hh must receive income from the property.; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNO); MPRINT(TAXSCF): IF (PROPTYPE{I} IN(41 42 43 44 45 46 47 48) & (INCOMEO{I} > 0)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified properties; MPRINT(TAXSCF): QUALPINV{I}=(HAVELNO{I}=1); MPRINT(TAXSCF): QUALINVPROP=QUALINVPROP+QUALPINV{I}; MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & HBALLNO{I} IN(1 5) & NMYRO{I} NOT IN(0 -1 -7) & INTRATEO{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAYO{I} < AMTBORRO{I}*.005) THEN CMOPAYO{I}=MAX(REGPAYO{I},TYPAYO{I}); MPRINT(TAXSCF): 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})); MPRINT(TAXSCF): 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))); MPRINT(TAXSCF): IF LNSTYRO{I}^=2001 THEN AINTDCTO{I}=(CMOPAYO{I}*12)-(AMTOWE_1O{I}-AMTOWEO{I}); MPRINT(TAXSCF): ELSE IF LNSTYRO{I}=2001 THEN AINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | CMOPAYO{I} < 0 | PAYLFTO{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEO{I}=0; 383 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): AMTOWE_1O{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & AMTBORRO{I} > 0 & LNAGEO{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTDCTO{I}=(CMOPAYO{I}*12)-(CURBAL_1O{I}-CURBALO{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | AMTBORRO{I} < 0 | LNAGEO{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALO{I}=0; MPRINT(TAXSCF): CURBAL_1O{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): ELSE SINTDCTO{I}=0; MPRINT(TAXSCF): * 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 the home was not purchased in the survey year. If the home was purchased in the survey year, set deduction to zero.; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I}=0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=2001 & PURCHYRO{I}=2001) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=2001) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & CURBALO{I} > 0 & CURBAL_1O{I} > 0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & (CURBALO{I} <= 0 & CURBAL_1O{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTO{I} > 0 & CINTDCTO{I} > 0) THEN DCTDIFFO{I}=CINTDCTO{I}-SINTDCTO{I}; MPRINT(TAXSCF): ELSE DCTDIFFO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (NMYRO{I} IN(-1 -7) & NMPMTO{I} IN(-1 -7)) & AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (INTRATEO{I}=-1)) THEN DO; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; 384 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest deduction; MPRINT(TAXSCF): IF ((CINTDCTO{I} + AINTDCTO{I} + SINTDCTO{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=(CINTDCTO{I}+AINTDCTO{I}+SINTDCTO{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTDCTO{I}=0; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & CMOPAYO{I} > 0 & (AVINTDCTO{I} > CMOPAYO{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): SINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & AMTOUTO{I} > 0 & (AVINTDCTO{I} > .25*AMTOUTO{I})) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): * Compute total investment interest expense; MPRINT(TAXSCF): TOTINVPDCT=TOTINVPDCT+((AVINTDCTO{I})*PERPROP{I}/10000)*(HAVELNO{I}=1); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Other loans - only counting loans for (non-business) investment purposes; MPRINT(TAXSCF): ARRAY TLMTHI {*} TLMTHI1 TLMTHI2 TLMTHI3 TLMTHI4 TLMTHI5 TLMTHI6; MPRINT(TAXSCF): ARRAY CMOPAYI {*} CMOPAYI1 CMOPAYI2 CMOPAYI3 CMOPAYI4 CMOPAYI5 CMOPAYI6; MPRINT(TAXSCF): ARRAY PAYLFTI {*} PAYLFTI1 PAYLFTI2 PAYLFTI3 PAYLFTI4 PAYLFTI5 PAYLFTI6; MPRINT(TAXSCF): ARRAY AMTOWEI {*} AMTOWEI1 AMTOWEI2 AMTOWEI3 AMTOWEI4 AMTOWEI5 AMTOWEI6; MPRINT(TAXSCF): ARRAY AMTOWE_1I {*} AMTOWE_1I1 AMTOWE_1I2 AMTOWE_1I3 AMTOWE_1I4 AMTOWE_1I5 AMTOWE_1I6; MPRINT(TAXSCF): ARRAY AINTEXPI {*} AINTEXPI1 AINTEXPI2 AINTEXPI3 AINTEXPI4 AINTEXPI5 AINTEXPI6; MPRINT(TAXSCF): ARRAY LNAGEI {*} LNAGEI1 LNAGEI2 LNAGEI3 LNAGEI4 LNAGEI5 LNAGEI6; MPRINT(TAXSCF): ARRAY CURBALI {*} CURBALI1 CURBALI2 CURBALI3 URBALI4 CURBALI5 CURBALI6; MPRINT(TAXSCF): ARRAY CURBAL_1I {*} CURBAL_1I1 CURBAL_1I2 CURBAL_1I3 CURBAL_1I4 CURBAL_1I5 CURBAL_1I6; MPRINT(TAXSCF): ARRAY CINTEXPI {*} CINTEXPI1 CINTEXPI2 CINTEXPI3 CINTEXPI4 CINTEXPI5 CINTEXPI6; MPRINT(TAXSCF): ARRAY DCTDIFFI {*} DCTDIFFI1 DCTDIFFI2 DCTDIFFI3 DCTDIFFI4 DCTDIFFI5 DCTDIFFI6; MPRINT(TAXSCF): ARRAY SINTEXPI {*} SINTEXPI1 SINTEXPI2 SINTEXPI3 SINTEXPI4 SINTEXPI5 SINTEXPI6; MPRINT(TAXSCF): ARRAY AVINTEXPI {*} AVINTEXPI1 AVINTEXPI2 AVINTEXPI3 AVINTEXPI4 AVINTEXPI5 AVINTEXPI6; MPRINT(TAXSCF): ARRAY QUALN {*} QLN1 QLN2 QLN3 QLN4 QLN5 QLN6; MPRINT(TAXSCF): ARRAY NMPMTI {*} X2716 X2733 X2816 X2833 X2916 X2933; MPRINT(TAXSCF): ARRAY NMYRI {*} X2717 X2734 X2817 X2834 X2917 X2934; MPRINT(TAXSCF): ARRAY REGPAYFI {*} X7527 X7526 X7525 X7524 X7523 X7522; MPRINT(TAXSCF): ARRAY REGPAYI {*} X2718 X2735 X2818 X2835 X2918 X2935; MPRINT(TAXSCF): ARRAY TYPAYFI {*} X2720 X2737 X2820 X2837 X2920 X2937; MPRINT(TAXSCF): ARRAY TYPAYI {*} X2719 X2736 X2819 X2836 X2919 X2936; MPRINT(TAXSCF): ARRAY LNSTYRI {*} X2713 X2730 X2813 X2830 X2913 X2930; MPRINT(TAXSCF): ARRAY AMTBORRI {*} X2714 X2731 X2814 X2831 X2914 X2931; MPRINT(TAXSCF): ARRAY JAMTBORRI {*} J2714 J2731 J2814 J2831 J2914 J2931; MPRINT(TAXSCF): ARRAY AMTOUTI {*} X2723 X2740 X2823 X2840 X2923 X2940; MPRINT(TAXSCF): ARRAY JAMTOUTI {*} J2723 J2740 J2823 J2840 J2923 J2940; MPRINT(TAXSCF): ARRAY INTRATEI {*} X2724 X2741 X2824 X2841 X2924 X2941; MPRINT(TAXSCF): ARRAY ONSCHEDI {*} X7521 X7520 X7519 X7518 X7517 X7516; MPRINT(TAXSCF): ; 385 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ARRAY LNTYPE {*} X2710 X2727 X2810 X2827 X2910 X2927; MPRINT(TAXSCF): ARRAY BUSLN {*} X6842 X6843 X6844 X6845 X6846 X6847; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTHI); MPRINT(TAXSCF): TLMTHI{I}=0; MPRINT(TAXSCF): CMOPAYI{I}=0; MPRINT(TAXSCF): PAYLFTI{I}=0; MPRINT(TAXSCF): AMTOWEI{I}=0; MPRINT(TAXSCF): AMTOWE_1I{I}=0; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): LNAGEI{I}=0; MPRINT(TAXSCF): CURBALI{I}=0; MPRINT(TAXSCF): CURBAL_1I{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): DCTDIFFI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; MPRINT(TAXSCF): AVINTEXPI{I}=0; MPRINT(TAXSCF): QUALN{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTLNINVEX=0; MPRINT(TAXSCF): QUALOANINV=0; MPRINT(TAXSCF): DO I=1 TO DIM(NMPMTI); MPRINT(TERMCON): IF (NMYRI{I}=0 & NMPMTI{I}=0) THEN DO; MPRINT(TERMCON): TLMTHI{I}=0; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRI{I}^=0|NMPMTI{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRI{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRI{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHI{I}=NMYRI{I}; MPRINT(TERMCON): IF (NMPMTI{I}=0) THEN DO; MPRINT(TERMCON): NMPMTI{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRI{I}>0) THEN DO; MPRINT(TERMCON): TLMTHI{I}=NMYRI{I}*12; MPRINT(TERMCON): IF (NMPMTI{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYFI{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMTI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFI{I}=-7) THEN DO; MPRINT(TERMCON): NMPMTI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFI{I}=8) THEN DO; MPRINT(TERMCON): NMPMTI{I}=1; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFI{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYFI{I}=1) THEN NMPMTI{I}=TLMTHI{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=2) THEN NMPMTI{I}=TLMTHI{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=3) THEN NMPMTI{I}=TLMTHI{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=4) THEN NMPMTI{I}=TLMTHI{I}; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=5) THEN NMPMTI{I}=TLMTHI{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=6) THEN NMPMTI{I}=TLMTHI{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=20) THEN NMPMTI{I}=TLMTHI{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=21) THEN NMPMTI{I}=TLMTHI{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=11) THEN NMPMTI{I}=TLMTHI{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=12) THEN NMPMTI{I}=TLMTHI{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=23) THEN NMPMTI{I}=TLMTHI{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=24) THEN NMPMTI{I}=TLMTHI{I}*8.67/12; 386 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=25) THEN NMPMTI{I}=TLMTHI{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=31) THEN NMPMTI{I}=TLMTHI{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=18) THEN NMPMTI{I}=TLMTHI{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=0) THEN NMPMTI{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}>.Z & REGPAYFI{I}^=-1 & REGPAYFI{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMTI{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTHI{I}= REGPAYFI{I}= NMPMTI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHI{I}>.Z & TLMTHI{I}<-2) THEN DO; MPRINT(MOCONV): NMPMTI{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTHI{I}= REGPAYFI{I}= NMPMTI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHI{I}<=.Z) THEN NMPMTI{I}=TLMTHI{I}; MPRINT(MOCONV): ELSE IF (TLMTHI{I}^=-1 & TLMTHI{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFI{I}= TLMTHI{I}= "SETTING AMT=."; MPRINT(MOCONV): NMPMTI{I}=.; MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTI{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHI{I}=-1; MPRINT(TERMCON): IF (NMYRI{I}=0) THEN DO; MPRINT(TERMCON): NMYRI{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTI{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYFI{I}; MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYFI{I}>0) THEN PFREQ=TYPAYFI{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTHI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; MPRINT(TERMCON): TLMTHI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): IF (NMPMTI{I}>0) THEN DO; MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTHI{I}=NMPMTI{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}))); MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12))); MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTHI{I}=NMPMTI{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTHI{I}=NMPMTI{I}*2/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTHI{I}=NMPMTI{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTHI{I}=NMPMTI{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTHI{I}=NMPMTI{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTHI{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): TLMTHI{I}=NMPMTI{I}; MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMTI{I}= PFREQ= TLMTHI{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): END; 387 The SAS System 13:32 Friday, January 29, 2021 MPRINT(IMOCONV): ELSE IF (NMPMTI{I}>.Z & NMPMTI{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTHI{I}=NMPMTI{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMTI{I}= PFREQ= TLMTHI{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}=0) THEN TLMTHI{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}<=.Z) THEN TLMTHI{I}=NMPMTI{I}; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}^=-1 & NMPMTI{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMTI{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTHI{I}=.; MPRINT(IMOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTHI{I}>0) THEN DO; MPRINT(TERMCON): NMYRI{I}=MAX(1,INT(.5+(TLMTHI{I}/12))); MPRINT(TERMCON): TLMTHI{I}=MAX(1,ROUND(TLMTHI{I})); MPRINT(TERMCON): END; MPRINT(TERMCON): IF (NMYRI{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMTI{I}= NMYRI{I}= TLMTHI{I}= REGPAYFI{I}= REGPAYI{I}= TYPAYFI{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAYI{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYFI{I}=1) THEN CMOPAYI{I}=REGPAYI{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=2) THEN CMOPAYI{I}=REGPAYI{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=3) THEN CMOPAYI{I}=REGPAYI{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=4) THEN CMOPAYI{I}=REGPAYI{I}; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=5) THEN CMOPAYI{I}=REGPAYI{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=6) THEN CMOPAYI{I}=REGPAYI{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=20) THEN CMOPAYI{I}=REGPAYI{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=21) THEN CMOPAYI{I}=REGPAYI{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=8) THEN CMOPAYI{I}=REGPAYI{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=11) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=12) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=23) THEN CMOPAYI{I}=REGPAYI{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=24) THEN CMOPAYI{I}=REGPAYI{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=25) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=31) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=18) THEN CMOPAYI{I}=REGPAYI{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=0) THEN CMOPAYI{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}>.Z & REGPAYFI{I}^=-1 & REGPAYFI{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAYI{I}= REGPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYI{I}>.Z & REGPAYI{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAYI{I}= REGPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYI{I}<=.Z) THEN CMOPAYI{I}=REGPAYI{I}; MPRINT(MOCONV): ELSE IF (REGPAYI{I}^=-1 & REGPAYI{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFI{I}= REGPAYI{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(MOCONV): IF (TYPAYFI{I}=1) THEN CMOPAYI{I}=TYPAYI{I}*5*52/12; 388 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=2) THEN CMOPAYI{I}=TYPAYI{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=3) THEN CMOPAYI{I}=TYPAYI{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=4) THEN CMOPAYI{I}=TYPAYI{I}; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=5) THEN CMOPAYI{I}=TYPAYI{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=6) THEN CMOPAYI{I}=TYPAYI{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=20) THEN CMOPAYI{I}=TYPAYI{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=21) THEN CMOPAYI{I}=TYPAYI{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=8) THEN CMOPAYI{I}=TYPAYI{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=11) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=12) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=23) THEN CMOPAYI{I}=TYPAYI{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=24) THEN CMOPAYI{I}=TYPAYI{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=25) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=31) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=18) THEN CMOPAYI{I}=TYPAYI{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=0) THEN CMOPAYI{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}>.Z & TYPAYFI{I}^=-1 & TYPAYFI{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYI{I}= TYPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYI{I}>.Z & TYPAYI{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYI{I}= TYPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYI{I}<=.Z) THEN CMOPAYI{I}=TYPAYI{I}; MPRINT(MOCONV): ELSE IF (TYPAYI{I}^=-1 & TYPAYI{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYFI{I}= TYPAYI{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF NMYRI{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFTI{I}=(TLMTHI{I}-((2001-LNSTYRI{I})*12)); MPRINT(TAXSCF): LNAGEI{I}=TLMTHI{I}-PAYLFTI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFTI{I}=0; MPRINT(TAXSCF): LNAGEI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): DO I=1 TO MIN(6,X2709); MPRINT(TAXSCF): IF (LNTYPE{I} IN(76 78 79) & BUSLN{I} IN(0 5 8)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified loans; MPRINT(TAXSCF): QUALN{I}=1; MPRINT(TAXSCF): QUALOANINV=QUALOANINV+QUALN{I}; MPRINT(TAXSCF): IF (NMYRI{I} NOT IN(0 -1 -7) & INTRATEI{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & PAYLFTI{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAYI{I} < AMTBORRI{I}*.005) THEN CMOPAYI{I}=MAX(REGPAYI{I},TYPAYI{I}); MPRINT(TAXSCF): AMTOWEI{I}=CMOPAYI{I}*((1-1/(1+(INTRATEI{I}/10000)/12)**PAYLFTI{I})/ ((INTRATEI{I}/10000)/12)); MPRINT(TAXSCF): AMTOWE_1I{I}=CMOPAYI{I}*((1-1/(1+(INTRATEI{I}/10000)/12)**(PAYLFTI{I}+12))/ ((INTRATEI{I}/10000)/12)); MPRINT(TAXSCF): IF LNSTYRI{I}^=2001 THEN AINTEXPI{I}=(CMOPAYI{I}*12)-(AMTOWE_1I{I}-AMTOWEI{I}); MPRINT(TAXSCF): ELSE IF LNSTYRI{I}=2001 THEN AINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHI{I} < 0 | CMOPAYI{I} < 0 | PAYLFTI{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEI{I}=0; MPRINT(TAXSCF): AMTOWE_1I{I}=0; MPRINT(TAXSCF): AINTEXPI{I}=0; 389 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & AMTBORRI{I} > 0 & LNAGEI{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTEXPI{I}=(CMOPAYI{I}*12)-(CURBAL_1I{I}-CURBALI{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHI{I} < 0 | AMTBORRI{I} < 0 | LNAGEI{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALI{I}=0; MPRINT(TAXSCF): CURBAL_1I{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUTI{I} > 0 & INTRATEI{I} > 0) THEN SINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): ELSE SINTEXPI{I}=0; MPRINT(TAXSCF): * 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, set the interest expense to zero.; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & PAYLFTI{I}=0) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=CURBAL_1I{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=CINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & LNSTYRI{I}=2001) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTEXPI{I} < 0 | CINTEXPI{I} < 0) & CURBALI{I} > 0 & CURBAL_1I{I} > 0) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=CURBAL_1I{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=CINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTEXPI{I} < 0 | CINTEXPI{I} < 0) & (CURBALI{I} <= 0 & CURBAL_1I{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTEXPI{I} > 0 & CINTEXPI{I} > 0) THEN DCTDIFFI{I}=CINTEXPI{I}-SINTEXPI{I}; MPRINT(TAXSCF): ELSE DCTDIFFI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): CINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEI{I}=-1) THEN DO; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest expense; MPRINT(TAXSCF): IF ((CINTEXPI{I} + AINTEXPI{I} + SINTEXPI{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=(CINTEXPI{I}+AINTEXPI{I}+SINTEXPI{I})/3; MPRINT(TAXSCF): END; 390 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE AVINTEXPI{I}=0; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (AVINTEXPI{I} > 0 & CMOPAYI{I} > 0 & (AVINTEXPI{I} > CMOPAYI{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=CMOPAYI{I}*12; MPRINT(TAXSCF): CINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): SINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AVINTEXPI{I} > 0 & AMTOUTI{I} > 0 & (AVINTEXPI{I} > .25*AMTOUTI{I})) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): CINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): * Compute loan investment interest expense; MPRINT(TAXSCF): TOTLNINVEX=TOTLNINVEX+AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Total investment interest expense, if investment interest expense is greater than interest/dividend income, then expense is limited to income amount; MPRINT(TAXSCF): TOTINTINC=X5708+X5710; MPRINT(TAXSCF): TOTINVEX=0; MPRINT(TAXSCF): TOTINVEX=TOTLOCINVEX+TOTINVPDCT+TOTLNINVEX; MPRINT(TAXSCF): IF TOTINVEX > 0 THEN HINVEX=1; MPRINT(TAXSCF): ELSE HINVEX=0; MPRINT(TAXSCF): IF TOTINVEX > TOTINTINC & Y1=YY1*10+1 THEN PUT "TOO MUCH INVESTMENT INTEREST EXPENSES " Y1= TOTINVEX= TOTLOCINVEX= TOTINVPDCT= TOTLNINVEX= TOTINTINC=/; MPRINT(TAXSCF): IF (TOTINVEX > TOTINTINC) THEN TOTINVEX=TOTINTINC; MPRINT(TAXSCF): * In 1988, 40% of personal interest is deductible, this includes credit cards, car/other vehicle loans, other consumer loans, loans against life insurance policies, home improvement loans, and non-HELOC LOCs.; MPRINT(TAXSCF): TOTPINEX=0; MPRINT(TAXSCF): **************Charitable Contributions; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): GCHARITY=(X5822=1); MPRINT(TAXSCF): CHARITYAMT=0; MPRINT(TAXSCF): IF (X5822=1 & X5823 > 0) THEN DO; MPRINT(TAXSCF): IF (X5823 > .5*AGI) & (AGI>0) THEN CHARITYAMT=.5*AGI; MPRINT(TAXSCF): ELSE CHARITYAMT=X5823; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF X5822=1 & X5823 > 0 & AGI < 0 & Y1=YY1*10+1 THEN PUT "NEGATIVE AGI BUT CHARITYAMT > 0 " Y1= X5823= CHARITYAMT= X5744= X5746= AGI=; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ITEMDEDCT_FLAG=0 THEN DO; MPRINT(TAXSCF): ADJDEDCT=0; MPRINT(TAXSCF): RESTAXM1=0; MPRINT(TAXSCF): TOTINVEX=0; MPRINT(TAXSCF): CHARITYAMT=0; MPRINT(TAXSCF): TOTPINEX=0; MPRINT(TAXSCF): END; 391 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): **********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.; MPRINT(TAXSCF): TOTITEMDCT=0; MPRINT(TAXSCF): * no limits on itemized deductions in 1988, 2012 and 2018; MPRINT(TAXSCF): * starting in 2015, itemized deduction phaseout limit for AGI are the same as for personal exemptions, so using EXLIM1-4 in this code; MPRINT(TAXSCF): TEMPITEMDCT=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); MPRINT(TAXSCF): IF TEMPITEMDCT > 0 & ((AGI <= 128950 & FILESTAT^=3) | (AGI <= 64475 & FILESTAT=3)) THEN DO; MPRINT(TAXSCF): TOTITEMDCT=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); MPRINT(TAXSCF): DEDCTLIM=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TEMPITEMDCT > 0 & DEDCTLIM^=0 THEN DO; MPRINT(TAXSCF): ITDLIM=128950*(FILESTAT^=3)+64475*(FILESTAT=3); MPRINT(TAXSCF): DEDCTLIM=1; MPRINT(TAXSCF): IWLINE1=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); MPRINT(TAXSCF): IF (IWLINE1-TOTINVEX <= 0) THEN TOTITEMDCT=IWLINE1; MPRINT(TAXSCF): ELSE IF (IWLINE1-TOTINVEX > 0) THEN DO; MPRINT(TAXSCF): IWLINE4=(IWLINE1-TOTINVEX)*.80; MPRINT(TAXSCF): IWLINE7=AGI-ITDLIM; MPRINT(TAXSCF): IWLINE8=IWLINE7*.03; MPRINT(TAXSCF): IWLINE9=MIN(IWLINE4,IWLINE8); MPRINT(TAXSCF): TOTITEMDCT=IWLINE1-IWLINE9; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TEMPITEMDCT=0 THEN DEDCTLIM=0; MPRINT(TAXSCF): * NOTE: Change in worksheet for 2006; MPRINT(TAXSCF): * no limits on exemptions in 1988 and 2012, no exemptions in 2018; MPRINT(TAXSCF): TOTEXPTAMT=0; MPRINT(TAXSCF): EXPTLIM=0; MPRINT(TAXSCF): EXLIM=128950*(FILESTAT=1)+193400*(FILESTAT IN(2 5)) +96700*(FILESTAT=3)+161150*(FILESTAT=4); MPRINT(TAXSCF): EXPAGIT=122500*(FILESTAT^=3)+61250*(FILESTAT=3); MPRINT(TAXSCF): DLINE6=2500*(FILESTAT^=3)+1250*(FILESTAT=3); MPRINT(TAXSCF): IF (AGI <= EXLIM) THEN TOTEXPTAMT=TOTEXPT*2800; MPRINT(TAXSCF): ELSE IF (AGI > EXLIM) THEN DO; MPRINT(TAXSCF): EXPTLIM=1; MPRINT(TAXSCF): EWLINE2=TOTEXPT*2800; MPRINT(TAXSCF): EWLINE5=AGI-EXLIM; MPRINT(TAXSCF): IF EWLINE5 > EXPAGIT THEN TOTEXPTAMT=TOTEXPT*0; MPRINT(TAXSCF): ELSE IF EWLINE5 <= EXPAGIT THEN DO; MPRINT(TAXSCF): EWLINE6=ROUND((EWLINE5/DLINE6),1); MPRINT(TAXSCF): EWLINE7=EWLINE6*.02; MPRINT(TAXSCF): EWLINE8=EWLINE7*EWLINE2; MPRINT(TAXSCF): TOTEXPTAMT=EWLINE2-EWLINE8; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Standard deduction by filing status, including addition deduction amount for over 65, dont have any info on blindness. Also compute number of age exemptions and flag nonfilers based on IRS filing thresholds and a few other assumptions. Nonfilers also cannot have negative AGI, losses from business or capital gains or more than 1/3 of the lowest filing threshold, which is married, filing separately; MPRINT(TAXSCF): BUSRENTCAPLOSS=(TBUSINC < 0 | RENTINC < 0 | CAPGLINC < 0); MPRINT(TAXSCF): HWSINCSE=(WSINCOME >= (.33*2800) | WSINCSP >= (.33*2800) | TBUSINC >= (.33*2800)); MPRINT(TAXSCF): STDDCT=0; MPRINT(TAXSCF): IF (FILESTAT=1 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=4400; MPRINT(TAXSCF): NONFILER=(0 < AGI < 7200)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=1 & TUAGE >= 65) THEN DO; 392 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): STDDCT=5500; MPRINT(TAXSCF): NONFILER=(0 < AGI < 8300)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=2 & TUAGE < 65 & SPAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=7350; MPRINT(TAXSCF): NONFILER=(0 < AGI < 12950)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=2 & TUAGE >= 65 & SPAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=9050; MPRINT(TAXSCF): NONFILER=(0 < AGI < 14650)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=2 & (TUAGE >= 65 | SPAGE >= 65)) THEN DO; MPRINT(TAXSCF): STDDCT=8200; MPRINT(TAXSCF): NONFILER=(0 < AGI < 13800)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=7350/2; MPRINT(TAXSCF): NONFILER=(AGI < 2800)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=9050/2; MPRINT(TAXSCF): NONFILER=(AGI < 2800)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=4 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=6450; MPRINT(TAXSCF): NONFILER=(0 < AGI < 9250)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=4 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=7550; MPRINT(TAXSCF): NONFILER=(0 < AGI < 10350)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=5 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=7350; MPRINT(TAXSCF): NONFILER=(AGI < 10150)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=5 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=8200; MPRINT(TAXSCF): NONFILER=(0 < AGI < 11000)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): AGEXMP=(TUAGE > 65) + (SPAGE > 65)*(FILESTAT=2); MPRINT(TAXSCF): * Did the hh itemize; MPRINT(TAXSCF): * No itemization question in 1989 or 1992, so itemize will be zero; MPRINT(TAXSCF): ITEMIZE=(TAXUNIT=0)*(X7367=1 | X7368=1 | X7369=1)+(TAXUNIT=1)*(X7368=1)+(TAXUNIT=2)*(X7369=1); MPRINT(TAXSCF): CITEMIZE=(TOTITEMDCT => STDDCT); MPRINT(TAXSCF): * Construct other variables needed for TAXSIM; MPRINT(TAXSCF): TAXUNITID=Y1*100+TAXUNIT; MPRINT(TAXSCF): YEAR=2000; MPRINT(TAXSCF): AGECL=1*(TUAGE < 26)+2*(26<=TUAGE<35)+3*(35<=TUAGE<45) +4*(45<=TUAGE<55)+5*(55<=TUAGE<65)+6*(TUAGE>=65); MPRINT(TAXSCF): * 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).; MPRINT(TAXSCF): STCAPINC=0; MPRINT(TAXSCF): LTCAPINC=0; MPRINT(TAXSCF): IF (AGICL IN(1)) THEN DO; MPRINT(TAXSCF): IF (CAPGLINC > 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.88; 393 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.88); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (CAPGLINC < 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.49; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.49); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AGICL IN(2)) THEN DO; MPRINT(TAXSCF): IF (CAPGLINC > 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.90; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.90); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (CAPGLINC < 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.42; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.42); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AGICL IN(3)) THEN DO; MPRINT(TAXSCF): IF (CAPGLINC > 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.92; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.92); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (CAPGLINC < 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.22; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.22); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ARRAY NEG_1 {*} TBUSINC OTHINC RENTINC OTHPINC; MPRINT(TAXSCF): DO I=1 TO DIM(NEG_1); MPRINT(TAXSCF): IF NEG_1{I}=-1 THEN NEG_1{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): UNADJTOTDEDCT=MAX(0,(ADJDEDCT+TOTINVEX+CHARITYAMT)); MPRINT(TAXSCF): CHCAREXP=0; MPRINT(TAXSCF): TINCOME=WSINCOME+WSINCSP+TBUSINC+INTINC+NTAXINC+DIVINC+CAPGLINC+RENTINC +UNEMPINC+GSSINC+PENINC+AFDCINC+OTHINC; MPRINT(TAXSCF): TOTXINC=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC +UNEMPINC+GSSINC+PENINC+OTHINC; MPRINT(TAXSCF): *set 3000 max loss for capital gains for comparison with IRS estimates; MPRINT(TAXSCF): IF CAPGLINC < -3000 THEN CAPGL3K=-3000; MPRINT(TAXSCF): ELSE CAPGL3K=CAPGLINC; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (TOTXINC=0 & TINCOME > 0 & AFDCINC=0 & NTAXINC=0 & TAXUNIT < 3 & Y1=YY1*10+1) THEN PUT "TOTXINC IS ZERO BUT TINCOME > 0 " YY1= Y1= TOTXINC= TINCOME= WSINCOME= WSINCSP= TBUSINC= INTINC= NTAXINC= DIVINC= RENTINC= UNEMPINC= AFDCINC= GSSINC= PENINC= OTHINC= CAPGLINC= RAGE= SPAGE= FILESTAT= TAXUNIT= X4100= X4700=/; MPRINT(TAXSCF): * Adding in payroll tax liability and mtr, assuming employee pays both employee and employer share, and 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 earning 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 tax year, 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 caculate the payroll liability and mtr. Computing the payroll atr in a similar fashion. NOTE: Need to adjust for different amounts used to compute the mtr, initially computing payroll mtr for adding $1 to earnings.; MPRINT(TAXSCF): * Need to adjust for 1988, 2% credit for SE, in 1991, limit on medicare tax; 394 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ** earnings from wages and businesses for head and spouse/parnter; MPRINT(TAXSCF): REARN=R_LABORINC+R_BUSINC; MPRINT(TAXSCF): SPEARN=SP_LABORINC+SP_BUSINC; MPRINT(TAXSCF): HHEARN=REARN+SPEARN; MPRINT(TAXSCF): TWSINC=WSINCOME+WSINCSP; MPRINT(TAXSCF): PAYROLLIAB=0; MPRINT(TAXSCF): PAYROLLMTR=0; MPRINT(TAXSCF): PAYROLLATR=0; MPRINT(TAXSCF): IF TAXUNIT=0 THEN DO; MPRINT(TAXSCF): IF (X4106 IN(1 2 3 4 -7) & X4706=0) | (X4106=0 & X4706 IN(1 2 3 4 -7)) | (X4106=0 & X4706=0 & X102=0 & (TWSINC > 0 | TBUSINC > 0)) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(76200,(TWSINC+TBUSINC*(TBUSINC >0)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*.029)*(2001 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*.029)*(2001 EQ 1992); MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 76200)*(100*.124))+ (100*.029)*(2001 GE 1995)+ (100*.029)*(2001 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB >0) THEN PAYROLLATR=100*(PAYROLLIAB/(TWSINC+TBUSINC*(TBUSINC > 0))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X4106 IN(1 2 3 4 -7) & X4706 IN(1 2 3 4 -7)) THEN DO; MPRINT(TAXSCF): IF (X4115 >=1 & X4715 >=1 & HHEARN > 0) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(76200,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(REARN/HHEARN))*.029*(2001 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*(REARN/HHEARN))*.029*(2001 EQ 1992)+ MIN(76200,((TWSINC+TBUSINC*(TBUSINC >0))*(SPEARN/HHEARN)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(SPEARN/HHEARN))*.029*(2001 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*(SPEARN/HHEARN))*.029*(2001 EQ 1992); MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(REARN/HHEARN) <= 76200)*(100*.124))+(100*.029)*(2001 GE 1995)+ (100*.029)*(2001 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1)*(REARN/HHEARN) <= 125000); MPRINT(TAXSCF): IF ((MIN(76200,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(REARN/HHEARN))*.029) > 0) THEN PAYROLLATR=100*((MIN(76200,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*.124 + ((2001 GE 1995)*((TWSINC+TBUSINC*(TBUSINC >0))*(REARN/HHEARN))*.029)+ ((2001 EQ 1992)*(MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*(REARN/HHEARN))*.029))/ ((TWSINC+TBUSINC*(TBUSINC > 0))*(REARN/HHEARN))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X4115 =-1 & X4715=-1) | (X4115 >=1 & X4715=-1) | (X4115=-1 & X4715 >=1) | (HHEARN=0) THEN DO; MPRINT(TAXSCF): IF ((TWSINC+TBUSINC*(TBUSINC >0)) <= 76200) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=(TWSINC+TBUSINC*(TBUSINC >0))*.124+ (TWSINC+TBUSINC*(TBUSINC >0))*.029; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((TWSINC+TBUSINC*(TBUSINC >0)) > 76200) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(2*76200,((TWSINC+TBUSINC*(TBUSINC >0))))*.124+ (TWSINC+TBUSINC*(TBUSINC >0))*.029*(2001 GE 1995)+ MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*.029*(2001 EQ 1992); MPRINT(TAXSCF): END; MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(.5) <= 76200)*(100*.124))+(100*.029)*(2001 GE 1995)+ (100*.029)*(2001 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB*.5 > 0) THEN PAYROLLATR=100*((PAYROLLIAB*.5)/((TWSINC+TBUSINC*(TBUSINC >0))*(.5))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X4106=0 & X4706=0 & X102^=0 & (TWSINC > 0 | TBUSINC > 0)) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=2*(MIN(76200,((TWSINC+TBUSINC*(TBUSINC >0))*(.5)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(.5))*.029*(2001 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)*(.5)))*.029)*(2001 EQ 1992)); MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(.5) <= 76200)*(100*.124))+(100*.029)*(2001 GE 1995)+ (100*.029)*(2001 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB*.5 > 0) THEN PAYROLLATR=100*((PAYROLLIAB*.5)/((TWSINC+TBUSINC*(TBUSINC >0))*(.5))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TAXUNIT >= 1 THEN DO; MPRINT(TAXSCF): IF (WSINCOME > 0 | TBUSINC > 0) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(76200,(WSINCOME+TBUSINC*(TBUSINC >0)))*.124 + ((WSINCOME+TBUSINC*(TBUSINC >0))*.029)*(2001 GE 1995)+ (MIN(125000,(WSINCOME+TBUSINC*(TBUSINC >0)))*.029)*(2001 EQ 1992); MPRINT(TAXSCF): PAYROLLMTR=(((WSINCOME+TBUSINC*(TBUSINC > 0)+1)<=76200)*(100*.124))+ (100*.029)*(2001 GE 1995)+ 395 The SAS System 13:32 Friday, January 29, 2021 (100*.029)*(2001 EQ 1992)*((WSINCOME+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB >0) THEN PAYROLLATR=100*(PAYROLLIAB/(WSINCOME+TBUSINC*(TBUSINC > 0))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF PAYROLLIAB=0 & PAYROLLMTR=0 & PAYROLLATR=0 & (TWSINC > 0 | TBUSINC > 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= TWSINC= TBUSINC= R_LABORINC= R_BUSINC= R_SOLEPROP= SP_LABORINC= SP_BUSINC= SP_SOLEPROP= REARN= SPEARN= HHEARN= TAXUNIT=/; MPRINT(TAXSCF): * Check for missing variables; MPRINT(TAXSCF): ARRAY CHVARS {*} YY1 Y1 CHARITYAMT X5823 TOTITEMDCT STDDCT AGI AGICL AGIGE50K DEDCTLIM X7372 X7018 X8023 X105 PERSEXP KIDS TOTEXPT FILESTAT TOTEXPTAMT EXPTLIM RAGE SPAGE TUAGE YEAR STATE TAXUNIT WSINCOME WSINCSP TBUSINC NTAXINC INTINC DIVINC CAPGLINC RENTINC UNEMPINC CHSPALINC AFDCINC PENINC OTHINC GSSINC OTHPINC NONTAX RENT UNADJTOTDEDCT CHCAREXP TINCOME TOTXINC STCAPINC LTCAPINC PAYROLLIAB PAYROLLMTR PAYROLLATR LWP KIDSU17 KIDSU18 KIDSU13; MPRINT(TAXSCF): DO I=1 TO DIM(CHVARS); MPRINT(TAXSCF): IF CHVARS{I}=. THEN PUT "MISSING VALUE FOR " Y1= CHVARS{I}=; MPRINT(TAXSCF): END; MPRINT(TAXSCF): RUN; NOTE: The file "null.txt" is: Filename=/disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code/null.txt, Owner Name=taxsim,Group Name=taxsim, Access Permission=-rw-r--r--, Last Modified=29Jan2021:13:35:18 NOTE: 648 records were written to the file "null.txt". The minimum record length was 0. The maximum record length was 389. NOTE: There were 26650 observations read from the data set WORK.SCF. NOTE: The data set WORK.SCF has 26650 observations and 5651 variables. NOTE: DATA statement used (Total process time): real time 0.77 seconds cpu time 0.78 seconds MPRINT(TAXSCF): * Create a dataset for full TAXSIM. Breaking out total itemized deductions into its parts - have applied the limits for the mortgage interest deduction and investment interest expense, but not for charitable contributions.; MPRINT(TAXSCF): PROC SORT DATA=SCF; MPRINT(TAXSCF): BY TAXUNITID; MPRINT(TAXSCF): RUN; NOTE: There were 26650 observations read from the data set WORK.SCF. NOTE: The data set WORK.SCF has 26650 observations and 5651 variables. NOTE: PROCEDURE SORT used (Total process time): real time 0.49 seconds cpu time 0.49 seconds MPRINT(TAXSCF): proc means; MPRINT(TAXSCF): var y1 yy1 year year; MPRINT(TAXSCF): run; NOTE: There were 26650 observations read from the data set WORK.SCF. NOTE: The PROCEDURE MEANS printed page 703. NOTE: PROCEDURE MEANS used (Total process time): real time 0.07 seconds cpu time 0.07 seconds 396 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): * Rename variables to TAXSIM names, use lowercase for TAXSIM file names; MPRINT(TAXSCF): libname swt "../swt/sas"; NOTE: Libref SWT was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/swt/sas MPRINT(TAXSCF): DATA swt.swt01; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): rep=mod(y1,10); MPRINT(TAXSCF): * IF FILESTAT > 0; MPRINT(TAXSCF): mstat=1*(FILESTAT IN(1 4))+2*(FILESTAT IN(2 5))+6*(FILESTAT IN(3)); MPRINT(TAXSCF): otherprop=RENTINC+TBUSINC; MPRINT(TAXSCF): nonprop=CHSPALINC+OTHINC; MPRINT(TAXSCF): otheritem=TOTINVEX+TOTPINEX; MPRINT(TAXSCF): mortgage=ADJDEDCT+X5823; MPRINT(TAXSCF): scorp=0; MPRINT(TAXSCF): pbusinc=0; MPRINT(TAXSCF): pprofinc=0; MPRINT(TAXSCF): sbusinc=0; MPRINT(TAXSCF): sprofinc=0; MPRINT(TAXSCF): tyear=YEAR; MPRINT(TAXSCF): tstate=STATE; MPRINT(TAXSCF): * set idtl=2 to get detailed output from TAXSIM; MPRINT(TAXSCF): idtl=2; MPRINT(TAXSCF): DROP STATE; MPRINT(TAXSCF): RENAME TAXUNITID=taxsimid TUAGE=page SPAGE=sage KIDS=depx KIDSU13=dep13 KIDSU17=dep17 KIDSU18=dep18 WSINCOME=pwages WSINCSP=swages DIVINC=dividends INTINC=intrec STCAPINC=stcg LTCAPINC=ltcg PENINC=pensions GSSINC=gssi UNEMPINC=ui AFDCINC=transfers RENT=rentpaid RESTAXM1=proptax CHCAREXP=childcare tyear=year; MPRINT(TAXSCF): RUN; WARNING: Variable tyear cannot be renamed to year because year already exists. NOTE: There were 26650 observations read from the data set WORK.SCF. NOTE: The data set SWT.SWT01 has 26650 observations and 5664 variables. NOTE: DATA statement used (Total process time): real time 6.60 seconds cpu time 0.91 seconds MPRINT(TAXSCF): proc means; MPRINT(TAXSCF): var y1 yy1 year; MPRINT(TAXSCF): run; NOTE: There were 26650 observations read from the data set SWT.SWT01. NOTE: The PROCEDURE MEANS printed page 704. NOTE: PROCEDURE MEANS used (Total process time): real time 5.68 seconds cpu time 0.40 seconds MPRINT(TAXSCF): libname taxsim "../txpydata/sas"; NOTE: Libref TAXSIM was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/txpydata/sas MPRINT(TAXSCF): proc contents data=swt.swt01; MPRINT(TAXSCF): run; NOTE: PROCEDURE CONTENTS used (Total process time): real time 0.01 seconds 397 The SAS System 13:32 Friday, January 29, 2021 cpu time 0.01 seconds NOTE: The PROCEDURE CONTENTS printed pages 705-814. MPRINT(TAXSCF): DATA taxsim.txpydata01; MPRINT(TAXSCF): SET swt.swt01(KEEP=taxsimid year mstat page sage depx dep13 dep17 dep18 pwages swages dividends intrec stcg ltcg otherprop nonprop pensions gssi ui transfers rentpaid proptax otheritem childcare mortgage scorp pbusinc pprofinc sbusinc sprofinc Y1 YY1 taxunit rep); MPRINT(TAXSCF): y1=Y1; MPRINT(TAXSCF): yy1=YY1; MPRINT(TAXSCF): RUN; NOTE: There were 26650 observations read from the data set SWT.SWT01. NOTE: The data set TAXSIM.TXPYDATA01 has 26650 observations and 35 variables. NOTE: DATA statement used (Total process time): real time 0.19 seconds cpu time 0.08 seconds MPRINT(TAXSCF): proc contents data=taxsim.txpydata01; MPRINT(TAXSCF): run; NOTE: PROCEDURE CONTENTS used (Total process time): real time 0.01 seconds cpu time 0.02 seconds NOTE: The PROCEDURE CONTENTS printed pages 815-816. 3899 3900 %TAXSCF(SYEAR=1998,TYEAR=1997,WYEAR=1995,ITDLIM1=121200,ITDLIM2=60600,ITDL10=0,EXPAMT=2650, 3901 EXPAMT2=0,EXDL9=0,EXPAGIT1=122500,EXPAGIT2=61250,EXLIM1=121200,EXLIM2=181800, 3902 EXLIM3=90900,EXLIM4=151500,STDAMT1=4150,STDAMT2=5150,STDAMT3=6900,STDAMT4=7700, 3903 STDAMT5=8500,STDAMT6=6050,STDAMT7=7050,FILELIM1=6800,FILELIM2=7800,FILELIM3=12200,FILELIM4=13000, 3904 FILELIM5=13800,FILELIM6=2650,FILELIM7=8700,FILELIM8=9700,FILELIM9=9550,FILELIM10=10350,LCGAGI1=.89, 3905 LCLAGI1=.67,LCGAGI2=.88,LCLAGI2=.62,LCGAGI3=.90,LCLAGI3=.47,PAYTAX=.124, MPRINT(TAXSCF): * define libraries for SCF public datasets; 3906 MEDHI=.029,PTLIM=65400,HTAXFILE=HTAXFILE=&SYSPARM); MPRINT(TAXSCF): LIBNAME SCF98 "../orig/sas7bdat" ACCESS=READONLY; NOTE: Libref SCF98 refers to the same physical library as SCF01. NOTE: Libref SCF98 was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/orig/sas7bdat MPRINT(TAXSCF): * directory for datasets created by the program; MPRINT(TAXSCF): LIBNAME OUT "."; NOTE: Libref OUT was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code MPRINT(TAXSCF): * csv file for TAXSIM v32; MPRINT(TAXSCF): FILENAME SCFTAX "txpydata98.csv"; MPRINT(TAXSCF): * csv from TAXSIM v32; MPRINT(TAXSCF): FILENAME TAXSIM "results98.csv"; MPRINT(TAXSCF): * read in public SCF data, assumes dataset name is pXXiY.sas7bdat; MPRINT(TAXSCF): * NOTE: Any changes to the libname or data set name must also be made in this data step; MPRINT(TAXSCF): DATA MAIN; MPRINT(TAXSCF): SET SCF98.P98I6; NOTE: Data file SCF98.P98I6.DATA is in a format that is native to another host, or the file encoding does not match the session encoding. Cross Environment Data Access will be used, which might require additional CPU resources and might reduce performance. 398 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): RUN; NOTE: There were 21525 observations read from the data set SCF98.P98I6. NOTE: The data set WORK.MAIN has 21525 observations and 5135 variables. NOTE: DATA statement used (Total process time): real time 0.55 seconds cpu time 0.55 seconds MPRINT(TAXSCF): PROC SORT DATA=MAIN; MPRINT(TAXSCF): BY Y1; MPRINT(TAXSCF): RUN; NOTE: There were 21525 observations read from the data set WORK.MAIN. NOTE: The data set WORK.MAIN has 21525 observations and 5135 variables. NOTE: PROCEDURE SORT used (Total process time): real time 0.35 seconds cpu time 0.36 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET MAIN; MPRINT(TAXSCF): file "null.txt"; MPRINT(TAXSCF): WGT=(X42001/5); MPRINT(TAXSCF): POP=1; MPRINT(TAXSCF): * setting STATE variable to zero, set to -1 if you want TAXSIM to compute state tax for all 51 states; MPRINT(TAXSCF): STATE=0; MPRINT(TAXSCF): * Small data fix for one case in 1992; MPRINT(TAXSCF): * Small data fix for one case in 1998; MPRINT(TAXSCF): IF (YY1=1002 & X105=0) THEN DO; MPRINT(TAXSCF): X105=1; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Small data fix for one case in 2007; MPRINT(TAXSCF): * Small data fix for one case in 2013; MPRINT(TAXSCF): * Payment frequency on other loans not asked in 1989, assumed to be monthly; MPRINT(TAXSCF): * Only one other income variable after 1992, set to zero for 1992 forward; MPRINT(TAXSCF): X5726=0; MPRINT(TAXSCF): X5727=0; MPRINT(TAXSCF): * Spouse/partner in PEU, need to create X7020 for 1989 to 1998; MPRINT(TAXSCF): IF X107 IN(0 2 5 12) THEN X7020=1; MPRINT(TAXSCF): ELSE IF X107=1 THEN X7020=2; MPRINT(TAXSCF): * A few other recodes to construct variables not asked in 1989 and 1992; MPRINT(TAXSCF): * Number of years with spouse/partner; MPRINT(TAXSCF): IF 1998=X8005 THEN X7370=-1; MPRINT(TAXSCF): ELSE X7370=1998-X8005; MPRINT(TAXSCF): * Number of people in NPEU, need to compute for 1989 to 2004, variable exists for 2007 forward; MPRINT(TAXSCF): X7050=X101-X7001; MPRINT(TAXSCF): * Absent spouse/partner indicator; MPRINT(TAXSCF): IF (X100=5) | (X106=5 & X107 IN(2 5 12)) THEN ABSP_P=1; MPRINT(TAXSCF): ELSE ABSP_P=0; MPRINT(TAXSCF): PERSEXP=1+(X105 IN(1 2))*(ABSP_P=0); MPRINT(TAXSCF): * Including children living elsewhere that are under 18, max of one extra as there is uncertainty about dependent status; MPRINT(TAXSCF): 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) + (X5912 > 0 | X5912=-2); MPRINT(TAXSCF): * For the child tax credit - must be under 17; MPRINT(TAXSCF): KIDSU17=(X108 IN(4 13))*(X110 < 17) + (X114 IN(4 13))*(X116 < 17) + (X120 IN(4 13))*(X122 < 17) + 399 The SAS System 13:32 Friday, January 29, 2021 (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) ; MPRINT(TAXSCF): KIDSU18=(X108 IN(4 13))*(X110 < 18) + (X114 IN(4 13))*(X116 < 18) + (X120 IN(4 13))*(X122 < 18) + (X126 IN(4 13))*(X128 < 18) + (X132 IN(4 13))*(X134 < 18) + (X202 IN(4 13))*(X204 < 18) + (X208 IN(4 13))*(X210 < 18) + (X214 IN(4 13))*(X216 < 18) + (X220 IN(4 13))*(X222 < 18) ; MPRINT(TAXSCF): KIDSU13=(X108 IN(4 13))*(X110 < 13) + (X114 IN(4 13))*(X116 < 13) + (X120 IN(4 13))*(X122 < 13) + (X126 IN(4 13))*(X128 < 13) + (X132 IN(4 13))*(X134 < 13) + (X202 IN(4 13))*(X204 < 13) + (X208 IN(4 13))*(X210 < 13) + (X214 IN(4 13))*(X216 < 13) + (X220 IN(4 13))*(X222 < 13) ; MPRINT(TAXSCF): * Indicator for R living with a partner; MPRINT(TAXSCF): LWP=(X8023=2); MPRINT(TAXSCF): RAGE=X14; MPRINT(TAXSCF): * Set spouse/parnter age to zero if absent spouse/partner; MPRINT(TAXSCF): SPAGE=X19*(X7020=2); MPRINT(TAXSCF): * Possible scenarios, not considering NPEU right now, will create those tax units last 1. Married filing jointly households = tax unit 2. Single person households = tax unit 3. Filing separately households = split into two tax units, need to determine if single or married filing separately filing status 4. LWP households = split into two tax units even if one person is a nonfiler For 3. and 4., one of the tax units may have head of household status depending on presence of children For each new tax unit, start with replicate of household data and parse out income, deductions, exemptions; MPRINT(TAXSCF): * Create new observations from married filing separately households or LWP households. 0. Tax unit = household 1. Created tax unit for household head 2. Created tax unit for spouse/parnter 3-8. Created tax unit for NPEU member Note: If R and Sp are legally married for more than one year, treat as married filing joint even if x5746=3,4. If R and Sp LWP and report filing jointly treat as two tax units. If R and Sp married and report filing separately, treat as filing jointly unless either R or Sp has a past marriage. Inspection of the data reveals that too many married couples report filing separately when compared to the IRS data. The past marriage condition put the number closer to the IRS data.; MPRINT(TAXSCF): MARRIED=(X8023=1 & X105=1 & X7370 >= 1 & X7020=2); MPRINT(TAXSCF): IF (X5744 IN(1 6) & X5746=1 & MARRIED=1) | (MARRIED=1 & ((X5744=5 | X5746 IN(3 4)) | (X5746=2 & X7377^=2 & X7392^=2))) | (X8023 > 0 & X105=0 & (X5744=5 | (X5744 IN(1 6) & X5746=0))) | (X8023 > 0 & X105 > 0 & X5744 IN(1 5 6) & X5746=0 & X7020=1) | (X8023=8 & X105=0 & X5744=1 & X5746=1) THEN TAXUNIT=0; MPRINT(TAXSCF): ELSE IF (X5744 IN(1 6) & X5746 IN(2 3 4)) | (X8023 > 0 & X105 > 0 & (X5744=5 | (X5744 IN(1 6) & X5746 IN(0 1)))) | (X8023=1 & X105=1 & X7370=-1 & X5744=1) THEN TAXUNIT=1; MPRINT(TAXSCF): ELSE PUT "MISSING TAXUNIT STATUS " YY1= X5744= X5746= X8023= X105= X7020= MARRIED= X7372= X7018= X7370=; MPRINT(TAXSCF): TUAGE=RAGE; MPRINT(TAXSCF): RUN; NOTE: The file "null.txt" is: Filename=/disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code/null.txt, Owner Name=taxsim,Group Name=taxsim, Access Permission=-rw-r--r--, Last Modified=29Jan2021:13:35:33 NOTE: 0 records were written to the file "null.txt". NOTE: There were 21525 observations read from the data set WORK.MAIN. NOTE: The data set WORK.SCF has 21525 observations and 5155 variables. NOTE: DATA statement used (Total process time): real time 0.45 seconds cpu time 0.46 seconds MPRINT(TAXSCF): DATA NEWUNITS; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): IF TAXUNIT=1; MPRINT(TAXSCF): TAXUNIT=2; MPRINT(TAXSCF): TUAGE=SPAGE; MPRINT(TAXSCF): SPAGE=0; MPRINT(TAXSCF): RUN; 400 The SAS System 13:32 Friday, January 29, 2021 NOTE: There were 21525 observations read from the data set WORK.SCF. NOTE: The data set WORK.NEWUNITS has 1811 observations and 5155 variables. NOTE: DATA statement used (Total process time): real time 0.20 seconds cpu time 0.20 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF NEWUNITS; MPRINT(TAXSCF): RUN; NOTE: There were 21525 observations read from the data set WORK.SCF. NOTE: There were 1811 observations read from the data set WORK.NEWUNITS. NOTE: The data set WORK.SCF has 23336 observations and 5155 variables. NOTE: DATA statement used (Total process time): real time 0.65 seconds cpu time 0.52 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): * Codes for filestat, assigning status even if did not file, will determine non-filer status later, filing status for split tax units done after splitting up income 1= Single 2= Married filing jointly 3= Married filing separately 4= Head of HH 5= Qualified widower; MPRINT(TAXSCF): FILESTAT=0; MPRINT(TAXSCF): IF TAXUNIT=0 THEN DO; MPRINT(TAXSCF): IF (MARRIED=1) THEN FILESTAT=2; MPRINT(TAXSCF): ELSE IF MARRIED=0 THEN DO; MPRINT(TAXSCF): IF PERSEXP=1 & KIDS=0 THEN FILESTAT=1; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS > 0 & X8023=5 & X7372=5 & X8007>=1995 THEN FILESTAT=5; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS > 0 THEN FILESTAT=4; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTEXPT=PERSEXP+KIDS; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * No AGI variables starting in 2010; MPRINT(TAXSCF): * Coding income variables with -1 and -2 to zero; MPRINT(TAXSCF): ARRAY NEG {*} X5704 X5714 X5724 X5726 X5729; MPRINT(TAXSCF): DO I=1 TO DIM(NEG); MPRINT(TAXSCF): IF NEG{I} IN(-2 -1) THEN NEG{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Income from wages and business; MPRINT(TAXSCF): R_LABORINC=MAX(0,X4112) MPRINT(ACONV): *((X4113=2)*52.18+(X4113=3)*26.09+(X4113=4)*12+(X4113=5)*4+(X4113=6)+(X4113=8)+ (X4113=11)*2+(X4113=12)*6+(X4113=31)*24+(X4113=14)+(X4113=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): SP_LABORINC=MAX(0,X4712) MPRINT(ACONV): *((X4713=2)*52.18+(X4713=3)*26.09+(X4713=4)*12+(X4713=5)*4+(X4713=6)+(X4713=8)+ (X4713=11)*2+(X4713=12)*6+(X4713=31)*24+(X4713=14)+(X4713=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): R_BUSINC=MAX(0,X4131) MPRINT(ACONV): *((X4132=2)*52.18+(X4132=3)*26.09+(X4132=4)*12+(X4132=5)*4+(X4132=6)+(X4132=8)+ (X4132=11)*2+(X4132=12)*6+(X4132=31)*24+(X4132=14)+(X4132=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): SP_BUSINC=MAX(0,X4731) MPRINT(ACONV): *((X4732=2)*52.18+(X4732=3)*26.09+(X4732=4)*12+(X4732=5)*4+(X4732=6)+(X4732=8)+ (X4732=11)*2+(X4732=12)*6+(X4732=31)*24+(X4732=14)+(X4732=22)) MPRINT(TAXSCF): ; 401 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): * Income from pensions and tax-deferred account withdrawals. No withdrawal information for IRAs or future pensions prior to 2004. No withdrawal information for any tax-deferred accounts, aside from other income, prior to 2001; MPRINT(TAXSCF): R_REGPEN=MAX(0,(X5318 MPRINT(ACONV): *((X5319=2)*52.18+(X5319=3)*26.09+(X5319=4)*12+(X5319=5)*4+(X5319=6)+(X5319=8)+ (X5319=11)*2+(X5319=12)*6+(X5319=31)*24+(X5319=14)+(X5319=22)) MPRINT(TAXSCF): *(X5315=1)*(X5317>=1))) +MAX(0,(X5326 MPRINT(ACONV): *((X5327=2)*52.18+(X5327=3)*26.09+(X5327=4)*12+(X5327=5)*4+(X5327=6)+(X5327=8)+ (X5327=11)*2+(X5327=12)*6+(X5327=31)*24+(X5327=14)+(X5327=22)) MPRINT(TAXSCF): *(X5323=1)*(X5325>=1))) +MAX(0,(X5334 MPRINT(ACONV): *((X5335=2)*52.18+(X5335=3)*26.09+(X5335=4)*12+(X5335=5)*4+(X5335=6)+(X5335=8)+ (X5335=11)*2+(X5335=12)*6+(X5335=31)*24+(X5335=14)+(X5335=22)) MPRINT(TAXSCF): *(X5331=1)*(X5333>=1))) +MAX(0,(X5418 MPRINT(ACONV): *((X5419=2)*52.18+(X5419=3)*26.09+(X5419=4)*12+(X5419=5)*4+(X5419=6)+(X5419=8)+ (X5419=11)*2+(X5419=12)*6+(X5419=31)*24+(X5419=14)+(X5419=22)) MPRINT(TAXSCF): *(X5415=1)*(X5417>=1))) +MAX(0,(X5426 MPRINT(ACONV): *((X5427=2)*52.18+(X5427=3)*26.09+(X5427=4)*12+(X5427=5)*4+(X5427=6)+(X5427=8)+ (X5427=11)*2+(X5427=12)*6+(X5427=31)*24+(X5427=14)+(X5427=22)) MPRINT(TAXSCF): *(X5423=1)*(X5425>=1))) +MAX(0,(X5434 MPRINT(ACONV): *((X5435=2)*52.18+(X5435=3)*26.09+(X5435=4)*12+(X5435=5)*4+(X5435=6)+(X5435=8)+ (X5435=11)*2+(X5435=12)*6+(X5435=31)*24+(X5435=14)+(X5435=22)) MPRINT(TAXSCF): *(X5431=1)*(X5433>=1))); MPRINT(TAXSCF): R_WITHDRAW=(X5724)*(X5725=11)*.5; MPRINT(TAXSCF): SP_REGPEN=MAX(0,(X5318 MPRINT(ACONV): *((X5319=2)*52.18+(X5319=3)*26.09+(X5319=4)*12+(X5319=5)*4+(X5319=6)+(X5319=8)+ (X5319=11)*2+(X5319=12)*6+(X5319=31)*24+(X5319=14)+(X5319=22)) MPRINT(TAXSCF): *(X5315=2)*(X5317>=1))) +MAX(0,(X5326 MPRINT(ACONV): *((X5327=2)*52.18+(X5327=3)*26.09+(X5327=4)*12+(X5327=5)*4+(X5327=6)+(X5327=8)+ (X5327=11)*2+(X5327=12)*6+(X5327=31)*24+(X5327=14)+(X5327=22)) MPRINT(TAXSCF): *(X5323=2)*(X5325>=1))) +MAX(0,(X5334 MPRINT(ACONV): *((X5335=2)*52.18+(X5335=3)*26.09+(X5335=4)*12+(X5335=5)*4+(X5335=6)+(X5335=8)+ (X5335=11)*2+(X5335=12)*6+(X5335=31)*24+(X5335=14)+(X5335=22)) MPRINT(TAXSCF): *(X5331=2)*(X5333>=1))) +MAX(0,(X5418 MPRINT(ACONV): *((X5419=2)*52.18+(X5419=3)*26.09+(X5419=4)*12+(X5419=5)*4+(X5419=6)+(X5419=8)+ (X5419=11)*2+(X5419=12)*6+(X5419=31)*24+(X5419=14)+(X5419=22)) MPRINT(TAXSCF): *(X5415=2)*(X5417>=1))) +MAX(0,(X5426 MPRINT(ACONV): *((X5427=2)*52.18+(X5427=3)*26.09+(X5427=4)*12+(X5427=5)*4+(X5427=6)+(X5427=8)+ (X5427=11)*2+(X5427=12)*6+(X5427=31)*24+(X5427=14)+(X5427=22)) MPRINT(TAXSCF): *(X5423=2)*(X5425>=1))) +MAX(0,(X5434 MPRINT(ACONV): *((X5435=2)*52.18+(X5435=3)*26.09+(X5435=4)*12+(X5435=5)*4+(X5435=6)+(X5435=8)+ (X5435=11)*2+(X5435=12)*6+(X5435=31)*24+(X5435=14)+(X5435=22)) MPRINT(TAXSCF): *(X5431=2)*(X5433>=1))); MPRINT(TAXSCF): SP_WITHDRAW=(X5724)*(X5725=11)*.5; MPRINT(TAXSCF): * For new tax units need to split up income and determine which new tax unit is assigned which deductions and exemptions. Also need to zero out any variables not relevant to the new tax unit (ex. spouses wages); MPRINT(TAXSCF): IF TAXUNIT IN(1 2) THEN DO; MPRINT(TAXSCF): * age; MPRINT(TAXSCF): IF (TAXUNIT=1) THEN SPAGE=0; MPRINT(TAXSCF): * wages; MPRINT(TAXSCF): IF (TAXUNIT=1 & (R_LABORINC+SP_LABORINC>0)) THEN WSINCOME=MAX(0,X5702)*(R_LABORINC/(R_LABORINC+SP_LABORINC))*(R_LABORINC>0); MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & (R_LABORINC+SP_LABORINC>0)) THEN WSINCOME=MAX(0,X5702)*(SP_LABORINC/(R_LABORINC+SP_LABORINC))*(SP_LABORINC>0); MPRINT(TAXSCF): ELSE WSINCOME=MAX(0,X5702)*.5; MPRINT(TAXSCF): WSINCSP=0; MPRINT(TAXSCF): * business income; MPRINT(TAXSCF): R_SOLEPROP=(X4106 IN(2 3 4) | (X3113=1 & X3119=2) | (X3213=1 & X3219=2) | (X3313=1 & X3319=2)); MPRINT(TAXSCF): SP_SOLEPROP=(X4706 IN(2 3 4) | (X3114=1 & X3119=2) | (X3214=1 & X3219=2) | (X3313=1 & X3319=2)); 402 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): IF (TAXUNIT=1 & (R_BUSINC+SP_BUSINC>0) & (R_SOLEPROP=1 | SP_SOLEPROP=1)) THEN DO; MPRINT(TAXSCF): IF (R_SOLEPROP=1 & SP_SOLEPROP=1) THEN TBUSINC=X5704*(R_BUSINC/(R_BUSINC+SP_BUSINC))*(R_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=1 & SP_SOLEPROP=0) THEN TBUSINC=X5704; MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=0 & SP_SOLEPROP=1) THEN TBUSINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & (R_BUSINC+SP_BUSINC>0) & (R_SOLEPROP=1 | SP_SOLEPROP=1)) THEN DO; MPRINT(TAXSCF): IF (R_SOLEPROP=1 & SP_SOLEPROP=1) THEN TBUSINC=X5704*(SP_BUSINC/(R_BUSINC+SP_BUSINC))*(SP_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=0 & SP_SOLEPROP=1) THEN TBUSINC=X5704; MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=1 & SP_SOLEPROP=0) THEN TBUSINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE TBUSINC=X5704*.5; MPRINT(TAXSCF): * interest, dividends, and capital gains - just split 50-50; MPRINT(TAXSCF): NTAXINC= MAX(0,X5706)*.5; MPRINT(TAXSCF): INTINC= MAX(0,X5708)*.5; MPRINT(TAXSCF): DIVINC= MAX(0,X5710)*.5; MPRINT(TAXSCF): IF X5712=-1 THEN CAPGLINC=0; MPRINT(TAXSCF): ELSE CAPGLINC=X5712*.5; MPRINT(TAXSCF): * rent, royalties, partnership and scorp income; MPRINT(TAXSCF): R_PARTNER_SCORP=(X4106 IN(2 3 4) | (X3113=1 & X3119 IN(1 3 6 11 12 15)) | (X3213=1 & X3219 IN(1 3 6 11 12 15))); MPRINT(TAXSCF): SP_PARTNER_SCORP=(X4106 IN(2 3 4) | (X3114=1 & X3119 IN(1 3 6 11 12 15)) | (X3214=1 & X3219 IN(1 3 6 11 12 15))); MPRINT(TAXSCF): IF (TAXUNIT=1 & (R_BUSINC+SP_BUSINC>0) & (R_PARTNER_SCORP=1 | SP_PARTNER_SCORP=1)) THEN DO; MPRINT(TAXSCF): IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=1) THEN RENTINC=X5714*(R_BUSINC/(R_BUSINC+SP_BUSINC))*(R_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=0) THEN RENTINC=X5714; MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=0 & SP_PARTNER_SCORP=1) THEN RENTINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & (R_BUSINC+SP_BUSINC>0) & (R_PARTNER_SCORP=1 | SP_PARTNER_SCORP=1)) THEN DO; MPRINT(TAXSCF): IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=1) THEN RENTINC=X5714*(SP_BUSINC/(R_BUSINC+SP_BUSINC))*(SP_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=0 & SP_PARTNER_SCORP=1) THEN RENTINC=X5714; MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=0) THEN RENTINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE RENTINC=X5714*.5; MPRINT(TAXSCF): * unemployment income, no questions about unemployed in past 12 months prior to 1998; MPRINT(TAXSCF): IF (TAXUNIT=1) THEN DO; MPRINT(TAXSCF): IF (X6780=1) THEN UNEMPINC=MAX(0,X5716)*(X6784 IN(0 5))+MAX(0,X5716)*(X6784=1)*.5; MPRINT(TAXSCF): ELSE IF (X6780=5 & X6784=1) THEN UNEMPINC=0; MPRINT(TAXSCF): ELSE UNEMPINC=MAX(0,X5716)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2) THEN DO; MPRINT(TAXSCF): IF (X6784=1) THEN UNEMPINC=MAX(0,X5716)*(X6780 IN(0 5))+MAX(0,X5716)*(X6780=1)*.5; MPRINT(TAXSCF): ELSE IF (X6784=5 & X6780=1) THEN UNEMPINC=0; MPRINT(TAXSCF): ELSE UNEMPINC=MAX(0,X5716)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * child support and alimony income; MPRINT(TAXSCF): IF (TAXUNIT=1 & X7377=2) THEN DO; MPRINT(TAXSCF): CHSPALINC=MAX(0,X5718)*(X7392^=2)+MAX(0,X5718)*(X7392=2)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & X7392=2) THEN DO; MPRINT(TAXSCF): CHSPALINC=MAX(0,X5718)*(X7377^=2)+MAX(0,X5718)*(X7377=2)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE CHSPALINC=MAX(0,X5718)*.5; MPRINT(TAXSCF): * government transfers, split 50/50; MPRINT(TAXSCF): AFDCINC=MAX(0,X5720)*.5; MPRINT(TAXSCF): * other income, split 50/50 - remove other income that is non-taxable, such as scholarships/grants, inheritances/gifts/, support from family or others, also remove IRA/Keogh income; 403 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): * special fix for 1992, removing other income coded 14, repayment of debts, it appears the total amount of the debt was reported, not just the interest on the debt; MPRINT(TAXSCF): OTHINC= (X5724)*(X5725 NOT IN(3 11 12 13 28))*.5+(X5726)*(X5727 NOT IN(3 11 12 13 28))*.5; MPRINT(TAXSCF): * social security and pension income, adding in withdrawals from IRA/Keogh/401ks; MPRINT(TAXSCF): R_GSSINC=MAX(0,(X5306 MPRINT(ACONV): *((X5307=2)*52.18+(X5307=3)*26.09+(X5307=4)*12+(X5307=5)*4+(X5307=6)+(X5307=8)+ (X5307=11)*2+(X5307=12)*6+(X5307=31)*24+(X5307=14)+(X5307=22)) MPRINT(TAXSCF): *(X5305>=1))); MPRINT(TAXSCF): SP_GSSINC=MAX(0,(X5311 MPRINT(ACONV): *((X5312=2)*52.18+(X5312=3)*26.09+(X5312=4)*12+(X5312=5)*4+(X5312=6)+(X5312=8)+ (X5312=11)*2+(X5312=12)*6+(X5312=31)*24+(X5312=14)+(X5312=22)) MPRINT(TAXSCF): *(X5310>=1))); MPRINT(TAXSCF): T_GSSINC=MAX(0,((X5306 MPRINT(ACONV): *((X5307=2)*52.18+(X5307=3)*26.09+(X5307=4)*12+(X5307=5)*4+(X5307=6)+(X5307=8)+ (X5307=11)*2+(X5307=12)*6+(X5307=31)*24+(X5307=14)+(X5307=22)) MPRINT(TAXSCF): *(X5305>=1))+(X5311 MPRINT(ACONV): *((X5312=2)*52.18+(X5312=3)*26.09+(X5312=4)*12+(X5312=5)*4+(X5312=6)+(X5312=8)+ (X5312=11)*2+(X5312=12)*6+(X5312=31)*24+(X5312=14)+(X5312=22)) MPRINT(TAXSCF): *(X5310>=1)))); MPRINT(TAXSCF): NOSS_X5722=MAX(0,(X5722-T_GSSINC)); MPRINT(TAXSCF): IF (TAXUNIT=1) THEN DO; MPRINT(TAXSCF): IF (R_REGPEN > 0) THEN PENINC=NOSS_X5722*(R_REGPEN/(R_REGPEN+SP_REGPEN))+R_WITHDRAW; MPRINT(TAXSCF): ELSE IF (R_REGPEN=0 & R_WITHDRAW > 0) THEN PENINC=R_WITHDRAW; MPRINT(TAXSCF): ELSE IF (R_REGPEN=0 & R_WITHDRAW=0 & SP_REGPEN > 0) THEN PENINC=0; MPRINT(TAXSCF): ELSE IF (R_REGPEN=0 & R_WITHDRAW=0 & SP_REGPEN=0) THEN PENINC=NOSS_X5722*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2) THEN DO; MPRINT(TAXSCF): IF (SP_REGPEN > 0) THEN PENINC=NOSS_X5722*(SP_REGPEN/(R_REGPEN+SP_REGPEN))+SP_WITHDRAW; MPRINT(TAXSCF): ELSE IF (SP_REGPEN=0 & SP_WITHDRAW > 0) THEN PENINC=SP_WITHDRAW; MPRINT(TAXSCF): ELSE IF (SP_REGPEN=0 & SP_WITHDRAW=0 & R_REGPEN > 0) THEN PENINC=0; MPRINT(TAXSCF): ELSE IF (SP_REGPEN=0 & SP_WITHDRAW=0 & R_REGPEN=0) THEN PENINC=NOSS_X5722*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): GSSINC=MAX(0,R_GSSINC)*(TAXUNIT=1)+MAX(0,SP_GSSINC)*(TAXUNIT=2); MPRINT(TAXSCF): OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; MPRINT(TAXSCF): NONTAX=NTAXINC+AFDCINC; MPRINT(TAXSCF): RENT=MAX(0,(X602 MPRINT(ACONV): *((X603=2)*52.18+(X603=3)*26.09+(X603=4)*12+(X603=5)*4+(X603=6)+(X603=8)+ (X603=11)*2+(X603=12)*6+(X603=31)*24+(X603=14)+(X603=22)) MPRINT(TAXSCF): ),(X612 MPRINT(ACONV): *((X613=2)*52.18+(X613=3)*26.09+(X613=4)*12+(X613=5)*4+(X613=6)+(X613=8)+ (X613=11)*2+(X613=12)*6+(X613=31)*24+(X613=14)+(X613=22)) MPRINT(TAXSCF): ),(X619 MPRINT(ACONV): *((X620=2)*52.18+(X620=3)*26.09+(X620=4)*12+(X620=5)*4+(X620=6)+(X620=8)+ (X620=11)*2+(X620=12)*6+(X620=31)*24+(X620=14)+(X620=22)) MPRINT(TAXSCF): ), (X708 MPRINT(ACONV): *((X709=2)*52.18+(X709=3)*26.09+(X709=4)*12+(X709=5)*4+(X709=6)+(X709=8)+ (X709=11)*2+(X709=12)*6+(X709=31)*24+(X709=14)+(X709=22)) MPRINT(TAXSCF): ))*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TAXUNIT=0 THEN DO; MPRINT(TAXSCF): R_SOLEPROP=(X4106 IN(2 3 4) | (X3113=1 & X3119=2) | (X3213=1 & X3219=2) | (X3313=1 & X3319=2)); MPRINT(TAXSCF): SP_SOLEPROP=(X4706 IN(2 3 4) | (X3114=1 & X3119=2) | (X3214=1 & X3219=2) | (X3313=1 & X3319=2)); MPRINT(TAXSCF): * Split wages across primary and secondary earner for married filing jointly households; MPRINT(TAXSCF): IF FILESTAT^=2 THEN DO; MPRINT(TAXSCF): WSINCOME=MAX(0,X5702); MPRINT(TAXSCF): WSINCSP=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF FILESTAT=2 THEN DO; 404 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): IF ((R_LABORINC > 0 & SP_LABORINC=0) | (R_LABORINC=0 & SP_LABORINC > 0) | (R_LABORINC=0 & SP_LABORINC=0)) THEN DO; MPRINT(TAXSCF): WSINCOME=MAX(0,X5702); MPRINT(TAXSCF): WSINCSP=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (R_LABORINC > 0 & SP_LABORINC > 0) THEN DO; MPRINT(TAXSCF): WSINCOME=MAX(0,X5702)*(R_LABORINC/(R_LABORINC+SP_LABORINC)); MPRINT(TAXSCF): WSINCSP=MAX(0,X5702)*(SP_LABORINC/(R_LABORINC+SP_LABORINC)); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TBUSINC = X5704; MPRINT(TAXSCF): NTAXINC= MAX(0,X5706); MPRINT(TAXSCF): INTINC= MAX(0,X5708); MPRINT(TAXSCF): DIVINC= MAX(0,X5710); MPRINT(TAXSCF): IF X5712=-1 THEN CAPGLINC=0; MPRINT(TAXSCF): ELSE CAPGLINC=X5712; MPRINT(TAXSCF): RENTINC= X5714; MPRINT(TAXSCF): UNEMPINC = MAX(0,X5716); MPRINT(TAXSCF): CHSPALINC=MAX(0,X5718); MPRINT(TAXSCF): AFDCINC = MAX(0,X5720); MPRINT(TAXSCF): * Starting in 2004, IRA/Keogh/401K type income is not reported in other income, instead withdrawals are reported separately during the questions about the assets, so need to add the withdrawals to pension income. There may be a few withdrawals still reported as other income if the asset account was closed or emptied out during the year prior to the survey.; MPRINT(TAXSCF): * also remove other income that is non-taxable, such as scholarships/grants, inheritances/gifts/, support from family or others; MPRINT(TAXSCF): * special fix for 1992, removing other income coded 14, repayment of debts, it appears the total amount of the debt was report, not just the interest on the debt; MPRINT(TAXSCF): OTHINC= (X5724)*(X5725 NOT IN(3 11 12 13 28))+(X5726)*(X5727 NOT IN(3 11 12 13 28)); MPRINT(TAXSCF): GSSINC=MAX(0,((X5306 MPRINT(ACONV): *((X5307=2)*52.18+(X5307=3)*26.09+(X5307=4)*12+(X5307=5)*4+(X5307=6)+(X5307=8)+ (X5307=11)*2+(X5307=12)*6+(X5307=31)*24+(X5307=14)+(X5307=22)) MPRINT(TAXSCF): *(X5305>=1))+(X5311 MPRINT(ACONV): *((X5312=2)*52.18+(X5312=3)*26.09+(X5312=4)*12+(X5312=5)*4+(X5312=6)+(X5312=8)+ (X5312=11)*2+(X5312=12)*6+(X5312=31)*24+(X5312=14)+(X5312=22)) MPRINT(TAXSCF): *(X5310>=1)))); MPRINT(TAXSCF): IF GSSINC=0 THEN PENINC= MAX(0,X5722)+R_WITHDRAW+SP_WITHDRAW; MPRINT(TAXSCF): ELSE IF (GSSINC > 0) THEN PENINC=MAX(0,(X5722-GSSINC)) +R_WITHDRAW+SP_WITHDRAW; MPRINT(TAXSCF): OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; MPRINT(TAXSCF): NONTAX=NTAXINC+AFDCINC; MPRINT(TAXSCF): RENT=MAX(0,(X602 MPRINT(ACONV): *((X603=2)*52.18+(X603=3)*26.09+(X603=4)*12+(X603=5)*4+(X603=6)+(X603=8)+ (X603=11)*2+(X603=12)*6+(X603=31)*24+(X603=14)+(X603=22)) MPRINT(TAXSCF): ),(X612 MPRINT(ACONV): *((X613=2)*52.18+(X613=3)*26.09+(X613=4)*12+(X613=5)*4+(X613=6)+(X613=8)+ (X613=11)*2+(X613=12)*6+(X613=31)*24+(X613=14)+(X613=22)) MPRINT(TAXSCF): ),(X619 MPRINT(ACONV): *((X620=2)*52.18+(X620=3)*26.09+(X620=4)*12+(X620=5)*4+(X620=6)+(X620=8)+ (X620=11)*2+(X620=12)*6+(X620=31)*24+(X620=14)+(X620=22)) MPRINT(TAXSCF): ), (X708 MPRINT(ACONV): *((X709=2)*52.18+(X709=3)*26.09+(X709=4)*12+(X709=5)*4+(X709=6)+(X709=8)+ (X709=11)*2+(X709=12)*6+(X709=31)*24+(X709=14)+(X709=22)) MPRINT(TAXSCF): )); MPRINT(TAXSCF): END; MPRINT(TAXSCF): * AGI - note that starting in 2010, AGI questions no longer asked, so using total income minus non-taxable income plus IRA/401k withdrawals as a proxy. No information on adjustments to AGI; MPRINT(TAXSCF): AGI=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC+UNEMPINC+CHSPALINC+OTHINC+PENINC+GSSINC; MPRINT(TAXSCF): IF AGI=-1 THEN AGI=0; 405 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): AGIGE50K=(AGI>=50000); MPRINT(TAXSCF): AGICL=1*(AGI < 50000)+2*(50000 <= AGI < 100000)+3*(AGI >= 100000); MPRINT(TAXSCF): * For allocating itemized deductions - mortgage interest, investment interest expense, property taxes, and charitable contributions - between new tax units, assume tax unit with higher income assigned all itemized deductions. Creating a flag here for use in computing deductions later in the program. Using wages, business, and pension income as income measure (all other income components are split 50/50 between the new tax units).; MPRINT(TAXSCF): IF (TAXUNIT IN(1 2)) THEN DO; MPRINT(TAXSCF): R_TINCOME=R_LABORINC+R_BUSINC+R_REGPEN+R_WITHDRAW; MPRINT(TAXSCF): SP_TINCOME=SP_LABORINC+SP_BUSINC+SP_REGPEN+SP_WITHDRAW; MPRINT(TAXSCF): ITEMDEDCT_FLAG=(TAXUNIT=1 & R_TINCOME >= SP_TINCOME) +(TAXUNIT=2 & SP_TINCOME > R_TINCOME); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TAXUNIT=0 THEN ITEMDEDCT_FLAG=1; MPRINT(TAXSCF): * Set personal exemption to one for split households, divide kids among split households, if one, give to both tax units, if even number, split evenly between tax units, if odd number, give more to higher income tax unit; MPRINT(TAXSCF): IF TAXUNIT IN(1 2) THEN DO; MPRINT(TAXSCF): PERSEXP=1; MPRINT(TAXSCF): IF KIDS>1 THEN DO; MPRINT(TAXSCF): IF (KIDSU13>0 & MOD(KIDSU13,2)=0) THEN KIDSU13=KIDSU13/2; MPRINT(TAXSCF): ELSE IF (KIDSU13>0 & MOD(KIDSU13,2)^=0) THEN DO; MPRINT(TAXSCF): KIDSU13=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU13/2,1))+ (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU13/2)-.5); MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (KIDSU17>0 & MOD(KIDSU17,2)=0) THEN KIDSU17=KIDSU17/2; MPRINT(TAXSCF): ELSE IF (KIDSU17>0 & MOD(KIDSU17,2)^=0) THEN DO; MPRINT(TAXSCF): KIDSU17=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU17/2,1))+ (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU17/2)-.5); MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (KIDSU18>0 & MOD(KIDSU18,2)=0) THEN KIDSU18=KIDSU18/2; MPRINT(TAXSCF): ELSE IF (KIDSU18>0 & MOD(KIDSU18,2)^=0) THEN DO; MPRINT(TAXSCF): KIDSU18=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU18/2,1))+ (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU18/2)-.5); MPRINT(TAXSCF): END; MPRINT(TAXSCF): KIDS=KIDSU13+KIDSU17+KIDSU18; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF PERSEXP=1 & MARRIED=1 THEN FILESTAT=3; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS=0 & MARRIED=0 THEN FILESTAT=1; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS>0 & MARRIED=0 THEN FILESTAT=4; MPRINT(TAXSCF): TOTEXPT=PERSEXP+KIDS; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF FILESTAT=0 THEN PUT "MISSING FILING STATUS " Y1= X5744= X5746= TAXUNIT= MARRIED= KIDS= PERSEXP=; MPRINT(TAXSCF): RUN; NOTE: There were 23336 observations read from the data set WORK.SCF. NOTE: The data set WORK.SCF has 23336 observations and 5197 variables. NOTE: DATA statement used (Total process time): real time 1.26 seconds cpu time 0.60 seconds MPRINT(TAXSCF): * Create tax units based on NPEU members. If there are multiple NPEU members, need to allocate income, assets, and debt across the members; MPRINT(TAXSCF): DATA TEMP NPEU; MPRINT(TAXSCF): SET SCF(WHERE=(TAXUNIT IN(0 1) & X7050 >=1)); MPRINT(TAXSCF): file "null.txt"; 406 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): TAXUNIT=2; MPRINT(TAXSCF): ARRAY NPEUAGE {*} X110 X116 X122 X128 X134 X204 X210 X216 X222; MPRINT(TAXSCF): ARRAY LIVEWITH {*} X112 X118 X124 X130 X136 X206 X212 X218 X224; MPRINT(TAXSCF): ARRAY FINDEP {*} X113 X119 X125 X131 X137 X207 X213 X219 X225; MPRINT(TAXSCF): DO I=1 TO DIM(LIVEWITH); MPRINT(TAXSCF): IF LIVEWITH{I} IN(1 2 3 4) & FINDEP{I} IN(2 3 4 5) THEN DO; MPRINT(TAXSCF): TAXUNIT=TAXUNIT+1; MPRINT(TAXSCF): TUAGE=NPEUAGE{I}; MPRINT(TAXSCF): SPAGE=0; MPRINT(TAXSCF): OUTPUT NPEU; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): RUN; NOTE: The file "null.txt" is: Filename=/disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code/null.txt, Owner Name=taxsim,Group Name=taxsim, Access Permission=-rw-r--r--, Last Modified=29Jan2021:13:35:36 NOTE: 0 records were written to the file "null.txt". NOTE: There were 2625 observations read from the data set WORK.SCF. WHERE TAXUNIT in (0, 1) and (X7050>=1); NOTE: The data set WORK.TEMP has 0 observations and 5197 variables. NOTE: The data set WORK.NPEU has 3053 observations and 5197 variables. NOTE: DATA statement used (Total process time): real time 0.13 seconds cpu time 0.13 seconds MPRINT(TAXSCF): DATA NPEU; MPRINT(TAXSCF): SET NPEU; MPRINT(TAXSCF): ARRAY INCTYPES {*} WSINCOME WSINCSP TBUSINC INTINC NTAXINC DIVINC RENTINC UNEMPINC AFDCINC GSSINC PENINC OTHINC CAPGLINC; MPRINT(TAXSCF): DO I=1 TO DIM(INCTYPES); MPRINT(TAXSCF): INCTYPES{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Allocate NPEU wage income across all NPEU members less than 70 years old. If only other type of income is Social Security, allocate amount across NPEU members age 62 or more. Otherwise, allocate total amount of nonwage income divided by the number of other types of income to each type of income equally to each NPEU member; MPRINT(TAXSCF): NUMU70=(0=62 & X113=5)+(X116>=62 & X119=5)+(X122>=62 & X125=5) +(X128>=62 & X131=5)+(X134>=62 & X137=5)+(X204>=62 & X207=5) +(X210>=62 & X213=5)+(X216>=62 & X219=5)+(X222>=62 & X225=5); MPRINT(TAXSCF): NUMINCTYPES=(X6406=1)+(X6407=1)+(X6408=1)+(X6409=1)+(X6410=1)+(X6411=1) +(X6412=1)+(X6413=1)+(X6414 > 5); MPRINT(TAXSCF): IF (NUMU70 > 0) THEN WSINCOME=(MAX(0,X6403)/NUMU70)*(TUAGE < 70); MPRINT(TAXSCF): ELSE WSINCOME=(MAX(0,X6403)/X7050); MPRINT(TAXSCF): IF (X6415 > 0 & NUMINCTYPES > 0) THEN DO; MPRINT(TAXSCF): IF (NUMGE62 > 0) THEN GSSINC=(X6406=1)*((MAX(0,X6415)/(NUMINCTYPES))/NUMGE62)*(TUAGE>=62); MPRINT(TAXSCF): ELSE GSSINC=(X6406=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): TBUSINC=(X6412=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): INTINC=(X6410=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): DIVINC=(X6411=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): RENTINC=(X6413=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): PENINC=(X6407=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050) +(X6408=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): AFDCINC=(X6409=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): CAPGLINC=(X6414 IN(13))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); 407 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): UNEMPINC=(X6414 IN(10))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): OTHINC=(X6414 IN(11 12 15))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): END; MPRINT(TAXSCF): OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; MPRINT(TAXSCF): NONTAX=NTAXINC+AFDCINC; MPRINT(TAXSCF): * All NPEU tax units take the standard deduction, have one personal exemption, and have filing status of single; MPRINT(TAXSCF): ITEMDEDCT_FLAG=0; MPRINT(TAXSCF): PERSEXP=1; MPRINT(TAXSCF): TOTEXPT=1; MPRINT(TAXSCF): KIDS=0; MPRINT(TAXSCF): KIDSU13=0; MPRINT(TAXSCF): KIDSU17=0; MPRINT(TAXSCF): KIDSU18=0; MPRINT(TAXSCF): FILESTAT=1; MPRINT(TAXSCF): AGI=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC+UNEMPINC+CHSPALINC+OTHINC+PENINC+GSSINC; MPRINT(TAXSCF): IF AGI=-1 THEN AGI=0; MPRINT(TAXSCF): AGIGE50K=(AGI>=50000); MPRINT(TAXSCF): AGICL=1*(AGI < 50000)+2*(50000 <= AGI < 100000)+3*(AGI >= 100000); MPRINT(TAXSCF): RUN; NOTE: There were 3053 observations read from the data set WORK.NPEU. NOTE: The data set WORK.NPEU has 3053 observations and 5200 variables. NOTE: DATA statement used (Total process time): real time 0.08 seconds cpu time 0.08 seconds MPRINT(TAXSCF): * Add NPEU tax units; MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF NPEU; MPRINT(TAXSCF): RUN; NOTE: There were 23336 observations read from the data set WORK.SCF. NOTE: There were 3053 observations read from the data set WORK.NPEU. NOTE: The data set WORK.SCF has 26389 observations and 5200 variables. NOTE: DATA statement used (Total process time): real time 0.51 seconds cpu time 0.51 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): ************Itemized deductions; MPRINT(TAXSCF): IF ITEMDEDCT_FLAG=1 THEN DO; MPRINT(TAXSCF): ************Mortgage interest deduction; MPRINT(TAXSCF): * Convert real estate taxes on primary residence into a yearly amount; MPRINT(TAXSCF): RESTAXM1=0; MPRINT(TAXSCF): IF (X721 > 0) THEN DO; MPRINT(TAXSCF): RESTAXM1=X721 MPRINT(ACONV): *((X722=2)*52.18+(X722=3)*26.09+(X722=4)*12+(X722=5)*4+(X722=6)+(X722=8)+ (X722=11)*2+(X722=12)*6+(X722=31)*24+(X722=14)+(X722=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Create arrays for various mortgage loan components; MPRINT(TAXSCF): ARRAY TLMTH {*} TLMTHM1 TLMTHM2 TLMTHM3; MPRINT(TAXSCF): ARRAY CMOPAY {*} CMOPAYM1 CMOPAYM2 CMOPAYM3; MPRINT(TAXSCF): ARRAY PAYLFT {*} PAYLFTM1 PAYLFTM2 PAYLFTM3; 408 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ARRAY AMTOWE {*} AMTOWEM1 AMTOWEM2 AMTOWEM3; MPRINT(TAXSCF): ARRAY AMTOWE_1 {*} AMTOWE_1M1 AMTOWE_1M2 AMTOWE_1M3; MPRINT(TAXSCF): ARRAY AINTDCT {*} AINTDCTM1 AINTDCTM2 AINTDCTM3; MPRINT(TAXSCF): ARRAY LNAGE {*} LNAGEM1 LNAGEM2 LNAGEM3; MPRINT(TAXSCF): ARRAY CURBAL {*} CURBALM1 CURBALM2 CURBALM3; MPRINT(TAXSCF): ARRAY CURBAL_1 {*} CURBAL_1M1 CURBAL_1M2 CURBAL_1M3; MPRINT(TAXSCF): ARRAY CINTDCT {*} CINTDCTM1 CINTDCTM2 CINTDCTM3; MPRINT(TAXSCF): ARRAY DCTDIFF {*} DCTDIFFM1 DCTDIFFM2 DCTDIFFM3; MPRINT(TAXSCF): ARRAY SINTDCT {*} SINTDCTM1 SINTDCTM2 SINTDCTM3; MPRINT(TAXSCF): ARRAY AVINTDCT {*} AVINTDCTM1 AVINTDCTM2 AVINTDCTM3; MPRINT(TAXSCF): ARRAY NMPMT {*} X807 X907 X1007; MPRINT(TAXSCF): ARRAY NMYR {*} X806 X906 X1006; MPRINT(TAXSCF): ARRAY REGPAYF {*} X809 X909 X1009; MPRINT(TAXSCF): ARRAY REGPAY {*} X808 X908 X1008; MPRINT(TAXSCF): ARRAY TYPAYF {*} X814 X914 X1014; MPRINT(TAXSCF): ARRAY TYPAY {*} X813 X913 X1013; MPRINT(TAXSCF): ARRAY LNSTMN {*} X801 X901 X1001; MPRINT(TAXSCF): ARRAY LNSTYR {*} X802 X902 X1002; MPRINT(TAXSCF): ARRAY HBALLN {*} X811 X911 X1011; MPRINT(TAXSCF): ARRAY BALLN {*} X812 X912 X1012; MPRINT(TAXSCF): ARRAY HAVELN {*} X723 X830 X931; MPRINT(TAXSCF): ARRAY AMTBORR {*} X804 X904 X1004; MPRINT(TAXSCF): ARRAY JAMTBORR {*} J804 J904 J1004; MPRINT(TAXSCF): ARRAY AMTOUT {*} X805 X905 X1005; MPRINT(TAXSCF): ARRAY JAMTOUT {*} J805 J905 J1005; MPRINT(TAXSCF): ARRAY INTRATE {*} X816 X916 X1016; MPRINT(TAXSCF): ARRAY ONSCHED {*} X7571 X7570 X7569; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTH); MPRINT(TAXSCF): TLMTH{I}=0; MPRINT(TAXSCF): CMOPAY{I}=0; MPRINT(TAXSCF): PAYLFT{I}=0; MPRINT(TAXSCF): AMTOWE{I}=0; MPRINT(TAXSCF): AMTOWE_1{I}=0; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): LNAGE{I}=0; MPRINT(TAXSCF): CURBAL{I}=0; MPRINT(TAXSCF): CURBAL_1{I}=0; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): DCTDIFF{I}=0; MPRINT(TAXSCF): SINTDCT{I}=0; MPRINT(TAXSCF): AVINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): NUMORT=(X723=1)+(X830=1)+(X931=1); MPRINT(TAXSCF): TOTAMTOUTM=0; MPRINT(TAXSCF): TOTDEDCTM=0; MPRINT(TAXSCF): GRFAMTOUTM=0; MPRINT(TAXSCF): A17AMTOUTM=0; MPRINT(TAXSCF): HAAMTOUTM=0; MPRINT(TAXSCF): DO I=1 TO DIM(NMPMT); MPRINT(TERMCON): IF (NMYR{I}=0 & NMPMT{I}=0) THEN DO; MPRINT(TERMCON): TLMTH{I}=0; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYR{I}^=0|NMPMT{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYR{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYR{I}=-1) THEN DO; MPRINT(TERMCON): TLMTH{I}=NMYR{I}; MPRINT(TERMCON): IF (NMPMT{I}=0) THEN DO; 409 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TERMCON): NMPMT{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYR{I}>0) THEN DO; MPRINT(TERMCON): TLMTH{I}=NMYR{I}*12; MPRINT(TERMCON): IF (NMPMT{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYF{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMT{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYF{I}=-7) THEN DO; MPRINT(TERMCON): NMPMT{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYF{I}=8) THEN DO; MPRINT(TERMCON): NMPMT{I}=1; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYF{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYF{I}=1) THEN NMPMT{I}=TLMTH{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=2) THEN NMPMT{I}=TLMTH{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=3) THEN NMPMT{I}=TLMTH{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=4) THEN NMPMT{I}=TLMTH{I}; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=5) THEN NMPMT{I}=TLMTH{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=6) THEN NMPMT{I}=TLMTH{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=20) THEN NMPMT{I}=TLMTH{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=21) THEN NMPMT{I}=TLMTH{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=11) THEN NMPMT{I}=TLMTH{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=12) THEN NMPMT{I}=TLMTH{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=23) THEN NMPMT{I}=TLMTH{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=24) THEN NMPMT{I}=TLMTH{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=25) THEN NMPMT{I}=TLMTH{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=31) THEN NMPMT{I}=TLMTH{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=18) THEN NMPMT{I}=TLMTH{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=0) THEN NMPMT{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYF{I}>.Z & REGPAYF{I}^=-1 & REGPAYF{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMT{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTH{I}= REGPAYF{I}= NMPMT{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTH{I}>.Z & TLMTH{I}<-2) THEN DO; MPRINT(MOCONV): NMPMT{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTH{I}= REGPAYF{I}= NMPMT{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTH{I}<=.Z) THEN NMPMT{I}=TLMTH{I}; MPRINT(MOCONV): ELSE IF (TLMTH{I}^=-1 & TLMTH{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYF{I}= TLMTH{I}= "SETTING AMT=."; MPRINT(MOCONV): NMPMT{I}=.; MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMT{I}=-1) THEN DO; MPRINT(TERMCON): TLMTH{I}=-1; MPRINT(TERMCON): IF (NMYR{I}=0) THEN DO; MPRINT(TERMCON): NMYR{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMT{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYF{I}; 410 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYF{I}>0) THEN PFREQ=TYPAYF{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTH{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; MPRINT(TERMCON): TLMTH{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): IF (NMPMT{I}>0) THEN DO; MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTH{I}=NMPMT{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}))); MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12))); MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTH{I}=NMPMT{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTH{I}=NMPMT{I}*2/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTH{I}=NMPMT{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTH{I}=NMPMT{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTH{I}=NMPMT{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTH{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): TLMTH{I}=NMPMT{I}; MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMT{I}= PFREQ= TLMTH{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMT{I}>.Z & NMPMT{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTH{I}=NMPMT{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMT{I}= PFREQ= TLMTH{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMT{I}=0) THEN TLMTH{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMT{I}<=.Z) THEN TLMTH{I}=NMPMT{I}; MPRINT(IMOCONV): ELSE IF (NMPMT{I}^=-1 & NMPMT{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMT{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTH{I}=.; MPRINT(IMOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTH{I}>0) THEN DO; MPRINT(TERMCON): NMYR{I}=MAX(1,INT(.5+(TLMTH{I}/12))); MPRINT(TERMCON): TLMTH{I}=MAX(1,ROUND(TLMTH{I})); MPRINT(TERMCON): END; MPRINT(TERMCON): IF (NMYR{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMT{I}= NMYR{I}= TLMTH{I}= REGPAYF{I}= REGPAY{I}= TYPAYF{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAY{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYF{I}=1) THEN CMOPAY{I}=REGPAY{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=2) THEN CMOPAY{I}=REGPAY{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=3) THEN CMOPAY{I}=REGPAY{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=4) THEN CMOPAY{I}=REGPAY{I}; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=5) THEN CMOPAY{I}=REGPAY{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=6) THEN CMOPAY{I}=REGPAY{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=20) THEN CMOPAY{I}=REGPAY{I}*10/12; 411 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (REGPAYF{I}=21) THEN CMOPAY{I}=REGPAY{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=8) THEN CMOPAY{I}=REGPAY{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=11) THEN CMOPAY{I}=REGPAY{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=12) THEN CMOPAY{I}=REGPAY{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=23) THEN CMOPAY{I}=REGPAY{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=24) THEN CMOPAY{I}=REGPAY{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=25) THEN CMOPAY{I}=REGPAY{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=31) THEN CMOPAY{I}=REGPAY{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=18) THEN CMOPAY{I}=REGPAY{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=0) THEN CMOPAY{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYF{I}>.Z & REGPAYF{I}^=-1 & REGPAYF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAY{I}= REGPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAY{I}>.Z & REGPAY{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAY{I}= REGPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAY{I}<=.Z) THEN CMOPAY{I}=REGPAY{I}; MPRINT(MOCONV): ELSE IF (REGPAY{I}^=-1 & REGPAY{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYF{I}= REGPAY{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(MOCONV): IF (TYPAYF{I}=1) THEN CMOPAY{I}=TYPAY{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=2) THEN CMOPAY{I}=TYPAY{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=3) THEN CMOPAY{I}=TYPAY{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=4) THEN CMOPAY{I}=TYPAY{I}; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=5) THEN CMOPAY{I}=TYPAY{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=6) THEN CMOPAY{I}=TYPAY{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=20) THEN CMOPAY{I}=TYPAY{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=21) THEN CMOPAY{I}=TYPAY{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=8) THEN CMOPAY{I}=TYPAY{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=11) THEN CMOPAY{I}=TYPAY{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=12) THEN CMOPAY{I}=TYPAY{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=23) THEN CMOPAY{I}=TYPAY{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=24) THEN CMOPAY{I}=TYPAY{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=25) THEN CMOPAY{I}=TYPAY{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=31) THEN CMOPAY{I}=TYPAY{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=18) THEN CMOPAY{I}=TYPAY{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=0) THEN CMOPAY{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYF{I}>.Z & TYPAYF{I}^=-1 & TYPAYF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAY{I}= TYPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAY{I}>.Z & TYPAY{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAY{I}= TYPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAY{I}<=.Z) THEN CMOPAY{I}=TYPAY{I}; MPRINT(MOCONV): ELSE IF (TYPAY{I}^=-1 & TYPAY{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYF{I}= TYPAY{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; 412 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): IF NMYR{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFT{I}=(TLMTH{I}-((1998-LNSTYR{I})*12)); MPRINT(TAXSCF): LNAGE{I}=TLMTH{I}-PAYLFT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFT{I}=0; MPRINT(TAXSCF): LNAGE{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): file "null.txt"; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((X723=1) & (X810 IN(1 2 3)) & TLMTHM1 > 0 & X816 > 0) THEN DO; MPRINT(TAXSCF): IF (X811=1) THEN DO; MPRINT(MORTPAY): AMOPAYM1=ROUND((MORT((X804),.,((X816/10000)/12),(TLMTHM1))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (CMOPAYM1 > AMOPAYM1) THEN CMOPAYM1=AMOPAYM1; MPRINT(TAXSCF): 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= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X811=2) THEN DO; MPRINT(TAXSCF): IF (X804 > X812) THEN ADJBORR=X804-X812; MPRINT(TAXSCF): ELSE IF (X804 < X812) THEN ADJBORR=X804; MPRINT(TAXSCF): IF ADJBORR > 0 THEN MPRINT(MORTPAY): AMOPAYM1=ROUND((MORT((ADJBORR),.,((X816/10000)/12),(TLMTHM1))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (X804=X812) THEN AMOPAYM1=((X804)*(X816/10000))/12; MPRINT(TAXSCF): IF (CMOPAYM1 > AMOPAYM1) THEN CMOPAYM1=AMOPAYM1; MPRINT(TAXSCF): 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= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * 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); MPRINT(TAXSCF): * NOT INCLUDING LAND CONTRACTS; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELN); MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTDCT{I}=CMOPAY{I}*12; MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELN{I}=1 & HBALLN{I} IN(1 2) & NMYR{I} NOT IN(0 -1 -7) & INTRATE{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & PAYLFT{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAY{I} < AMTBORR{I}*.005) THEN CMOPAY{I}=MAX(REGPAY{I},TYPAY{I}); 413 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): 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})); MPRINT(TAXSCF): 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))); MPRINT(TAXSCF): IF LNSTYR{I}^=1998 THEN AINTDCT{I}=(CMOPAY{I}*12)-(AMTOWE_1{I}-AMTOWE{I}); MPRINT(TAXSCF): ELSE IF LNSTYR{I}=1998 THEN AINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTH{I} < 0 | CMOPAY{I} < 0 | PAYLFT{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWE{I}=0; MPRINT(TAXSCF): AMTOWE_1{I}=0; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & AMTBORR{I} > 0 & LNAGE{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTDCT{I}=(CMOPAY{I}*12)-(CURBAL_1{I}-CURBAL{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTH{I} < 0 | AMTBORR{I} < 0 | LNAGE{I} < 0) THEN DO; MPRINT(TAXSCF): CURBAL{I}=0; MPRINT(TAXSCF): CURBAL_1{I}=0; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUT{I} > 0 & INTRATE{I} > 0) THEN SINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): ELSE SINTDCT{I}=0; MPRINT(TAXSCF): * 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 the home was not purchased in the survey year. If the home was purchased in the survey year, set deduction to zero.; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & PAYLFT{I}=0) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=CURBAL_1{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): AINTDCT{I}=CINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & LNSTYR{I}=1998 & X720=1998) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): SINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & LNSTYR{I}=1998) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTDCT{I} < 0 | CINTDCT{I} < 0) & CURBAL{I} > 0 & CURBAL_1{I} > 0) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=CURBAL_1{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): AINTDCT{I}=CINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTDCT{I} < 0 | CINTDCT{I} < 0) & (CURBAL{I} <= 0 & CURBAL_1{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCT{I} > 0 & CINTDCT{I} > 0) THEN DCTDIFF{I}=CINTDCT{I}-SINTDCT{I}; MPRINT(TAXSCF): ELSE DCTDIFF{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELN{I}=1 & (NMYR{I} IN(-1 -7) | NMPMT{I} IN(-1 -7)) & AMTOUT{I} > 0 & INTRATE{I} > 0) 414 The SAS System 13:32 Friday, January 29, 2021 THEN DO; MPRINT(TAXSCF): SINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELN{I}=1 & (INTRATE{I}=-1)) THEN DO; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): SINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest deduction; MPRINT(TAXSCF): IF ((CINTDCT{I} + AINTDCT{I} + SINTDCT{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTDCT{I}=(CINTDCT{I}+AINTDCT{I}+SINTDCT{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTDCT{I}=0; MPRINT(TAXSCF): * Constraining interest deduction amount to be no more than the reported year 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.; MPRINT(TAXSCF): IF (HAVELN{I}=1 & AVINTDCT{I} > 0 & CMOPAY{I} > 0 & (AVINTDCT{I} > CMOPAY{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTDCT{I}=CMOPAY{I}*12; MPRINT(TAXSCF): CINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): SINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELN{I}=1 & AVINTDCT{I} > 0 & AMTOUT{I} > 0 & (AVINTDCT{I} > .25*AMTOUT{I})) THEN DO; MPRINT(TAXSCF): AVINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): CINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELN{I}=1 & Y1=YY1*10+1 & AVINTDCT{I}=0 & NMYR{I}^=1998) 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}= /; MPRINT(TAXSCF): * 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; MPRINT(TAXSCF): IF (X702=1 & X714=1 & X7135=5) THEN DO; MPRINT(TAXSCF): TOTDEDCTM=TOTDEDCTM+(AVINTDCT{I}/X715)*(HAVELN{I}=1); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE TOTDEDCTM=TOTDEDCTM+AVINTDCT{I}; MPRINT(TAXSCF): * Total amount outstanding on loans; MPRINT(TAXSCF): TOTAMTOUTM=TOTAMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): * Need to divide mortgages up by date, pre 10/13/87 mortgages are considered grandfathered debt by IRS, and different limits apply to mortgages taken out after 12/15/2017; MPRINT(TAXSCF): IF ((LNSTYR{I}=1987 & LNSTMN{I} < 10) | (LNSTYR{I} < 1987)) THEN DO; MPRINT(TAXSCF): GRFAMTOUTM=GRFAMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((LNSTYR{I}=2017 & LNSTMN{I}=12) | (LNSTYR{I} > 2017)) THEN DO; MPRINT(TAXSCF): A17AMTOUTM=A17AMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((LNSTYR{I}=1987 & LNSTMN {I} >= 10) | (1987 < LNSTYR{I} < 2017) | (LNSTYR{I}=2017 & LNSTMN{I}<=11)) THEN DO; MPRINT(TAXSCF): HAAMTOUTM=HAAMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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, 3, or 4 as home acquisition debt (same as a mortgage, counts toward mortgage balance limit), while HELOCs with other use codes counted as home equity debt. Ignoring the mopup as we dont know if that LOC 415 The SAS System 13:32 Friday, January 29, 2021 is secured by a home; MPRINT(TAXSCF): ARRAY CMOPAYL {*} CMOPAYL1 CMOPAYL2 CMOPAYL3; MPRINT(TAXSCF): ARRAY SINTDCTL {*} SINTDCTL1 SINTDCTL2 SINTDCTL3; MPRINT(TAXSCF): ARRAY AQDBT {*} AQDBTL1 AQDBTL2 AQDBTL3; MPRINT(TAXSCF): ARRAY AQINT {*} AQINTL1 AQINTL2 AQINTL3; MPRINT(TAXSCF): ARRAY EQDBT {*} EQDBTL1 EQDBTL2 EQDBTL3; MPRINT(TAXSCF): ARRAY SBYHOME {*} X1103 X1114 X1125; MPRINT(TAXSCF): ARRAY DOOWE {*} X1105 X1116 X1127; MPRINT(TAXSCF): ARRAY LNPURP {*} X1106 X1117 X1128; MPRINT(TAXSCF): ARRAY AMTOUTL {*} X1108 X1119 X1130; MPRINT(TAXSCF): ARRAY TYPAYL {*} X1109 X1120 X1131; MPRINT(TAXSCF): ARRAY TYPAYLF {*} X1110 X1121 X1132; MPRINT(TAXSCF): ARRAY INTRATEL {*} X1111 X1122 X1133; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): TOTAQDBTL=0; MPRINT(TAXSCF): TOTEQDBTL=0; MPRINT(TAXSCF): TOTDEDCTL=0; MPRINT(TAXSCF): TOTAQDEDCTL=0; MPRINT(TAXSCF): TOTLOCINVEX=0; MPRINT(TAXSCF): DO I=1 TO DIM(CMOPAYL); MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): AQDBT{I}=0; MPRINT(TAXSCF): AQINT{I}=0; MPRINT(TAXSCF): EQDBT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (X1101=1) THEN DO; MPRINT(TAXSCF): DO I=1 TO DIM(SBYHOME); MPRINT(TAXSCF): IF (SBYHOME{I}=1 & DOOWE{I}=1) THEN DO; MPRINT(TAXSCF): IF (TYPAYL{I} > 0) THEN DO; MPRINT(MOCONV): IF (TYPAYLF{I}=1) THEN CMOPAYL{I}=TYPAYL{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=2) THEN CMOPAYL{I}=TYPAYL{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=3) THEN CMOPAYL{I}=TYPAYL{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=4) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=5) THEN CMOPAYL{I}=TYPAYL{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=6) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=20) THEN CMOPAYL{I}=TYPAYL{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=21) THEN CMOPAYL{I}=TYPAYL{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=8) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=11) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=12) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=23) THEN CMOPAYL{I}=TYPAYL{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=24) THEN CMOPAYL{I}=TYPAYL{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=25) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=31) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=18) THEN CMOPAYL{I}=TYPAYL{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=0) THEN CMOPAYL{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}>.Z & TYPAYLF{I}^=-1 & TYPAYLF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}>.Z & TYPAYL{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}<=.Z) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYL{I}^=-1 & TYPAYL{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYLF{I}= TYPAYL{I}= "SETTING AMT=."; 416 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TYPAYL{I} IN(0 -1 -2)) THEN DO; MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (INTRATEL{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=((INTRATEL{I}/10000)*AMTOUTL{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEL{I} IN(0 -1)) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTL{I} > 0 & CMOPAYL{I} > 0 & SINTDCTL{I} > CMOPAYL{I}*12) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=CMOPAYL{I}*12; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (LNPURP{I} IN(1 3 4)) THEN DO; MPRINT(TAXSCF): AQDBT{I}=AMTOUTL{I}; MPRINT(TAXSCF): AQINT{I}=SINTDCTL{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (LNPURP{I} NOT IN(1 3 4)) THEN DO; MPRINT(TAXSCF): EQDBT{I}=AMTOUTL{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTDEDCTL=TOTDEDCTL+SINTDCTL{I}; MPRINT(TAXSCF): TOTAQDEDCTL=TOTAQDEDCTL+AQINT{I}; MPRINT(TAXSCF): TOTAQDBTL=TOTAQDBTL+AQDBT{I}; MPRINT(TAXSCF): TOTEQDBTL=TOTEQDBTL+EQDBT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * Dropped third column of grid for 2010 forward; MPRINT(TAXSCF): * Create arrays for various other property loan components; MPRINT(TAXSCF): ARRAY TLMTHO {*} TLMTHO1 TLMTHO2 TLMTHO3; MPRINT(TAXSCF): ARRAY CMOPAYO {*} CMOPAYO1 CMOPAYO2 CMOPAYO3; MPRINT(TAXSCF): ARRAY AMOPAYO {*} AMOPAYO1 AMOPAYO2 AMOPAYO3; MPRINT(TAXSCF): ARRAY PAYLFTO {*} PAYLFTO1 PAYLFTO2 PAYLFTO3; MPRINT(TAXSCF): ARRAY AMTOWEO {*} AMTOWEO1 AMTOWEO2 AMTOWEO3; MPRINT(TAXSCF): ARRAY AMTOWE_1O {*} AMTOWE_1O1 AMTOWE_1O2 AMTOWE_1O3; MPRINT(TAXSCF): ARRAY AINTDCTO {*} AINTDCTO1 AINTDCTO2 AINTDCTO3; MPRINT(TAXSCF): ARRAY LNAGEO {*} LNAGEO1 LNAGEO2 LNAGEO3; MPRINT(TAXSCF): ARRAY CURBALO {*} CURBALO1 CURBALO2 CURBALO3; MPRINT(TAXSCF): ARRAY CURBAL_1O {*} CURBAL_1O1 CURBAL_1O2 CURBAL_1O3; MPRINT(TAXSCF): ARRAY CINTDCTO {*} CINTDCTO1 CINTDCTO2 CINTDCTO3; MPRINT(TAXSCF): ARRAY DCTDIFFO {*} DCTDIFFO1 DCTDIFFO2 DCTDIFFO3; MPRINT(TAXSCF): ARRAY SINTDCTO {*} SINTDCTO1 SINTDCTO2 SINTDCTO3; MPRINT(TAXSCF): ARRAY AVINTDCTO {*} AVINTDCTO1 AVINTDCTO2 AVINTDCTO3; MPRINT(TAXSCF): ARRAY QUALPROP {*} QPROP1 QPROP2 QPROP3; MPRINT(TAXSCF): ARRAY QUALPINV {*} QPINV1 QPINV2 QPINV3; MPRINT(TAXSCF): ARRAY ADJBORRO {*} ADJBORRO1 ADJBORRO2 ADJBORRO3; MPRINT(TAXSCF): ARRAY NMPMTO {*} X1717 X1817 X1917; MPRINT(TAXSCF): ARRAY NMYRO {*} X1716 X1816 X1916; MPRINT(TAXSCF): ARRAY REGPAYFO {*} X1719 X1819 X1919; MPRINT(TAXSCF): ARRAY REGPAYO {*} X1718 X1818 X1918; MPRINT(TAXSCF): ARRAY TYPAYFO {*} X1724 X1824 X1924; MPRINT(TAXSCF): ARRAY TYPAYO {*} X1723 X1823 X1923; MPRINT(TAXSCF): ARRAY LNSTMNO {*} X1712 X1812 X1912; 417 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ARRAY LNSTYRO {*} X1713 X1813 X1913; MPRINT(TAXSCF): ARRAY HBALLNO {*} X1721 X1821 X1921; MPRINT(TAXSCF): ARRAY BALLNO {*} X1722 X1822 X1922; MPRINT(TAXSCF): ARRAY AMTBORRO {*} X1714 X1814 X1914; MPRINT(TAXSCF): ARRAY JAMTBORRO {*} J1714 J1814 J1914; MPRINT(TAXSCF): ARRAY AMTOUTO {*} X1715 X1815 X1915; MPRINT(TAXSCF): ARRAY JAMTOUTO {*} J1715 J1815 J1915; MPRINT(TAXSCF): ARRAY HAVELNO {*} X1711 X1811 X1911; MPRINT(TAXSCF): ARRAY INTRATEO {*} X1726 X1826 X1926; MPRINT(TAXSCF): ARRAY ONSCHEDO {*} X7554 X7553 X7552; MPRINT(TAXSCF): ARRAY HINCOMEO {*} X1729 X1829 X1929; MPRINT(TAXSCF): ARRAY INCOMEO {*} X1730 X1830 X1930; MPRINT(TAXSCF): ARRAY PROPTYPE {*} X1703 X1803 X1903; MPRINT(TAXSCF): ARRAY PERPROP {*} X1705 X1805 X1905; MPRINT(TAXSCF): ARRAY PROPVAL {*} X1706 X1806 X1906; MPRINT(TAXSCF): ARRAY TAXINS {*} X1720 X1820 X1920; MPRINT(TAXSCF): ARRAY PURCHYRO {*} X1708 X1808 X1908; MPRINT(TAXSCF): ARRAY LIMFLAG {*} LIMFL1 LIMFL2 LIMFL3; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTHO); MPRINT(TAXSCF): TLMTHO{I}=0; MPRINT(TAXSCF): CMOPAYO{I}=0; MPRINT(TAXSCF): PAYLFTO{I}=0; MPRINT(TAXSCF): AMTOWEO{I}=0; MPRINT(TAXSCF): AMTOWE_1O{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): LNAGEO{I}=0; MPRINT(TAXSCF): CURBALO{I}=0; MPRINT(TAXSCF): CURBAL_1O{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): DCTDIFFO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): AVINTDCTO{I}=0; MPRINT(TAXSCF): QUALPROP{I}=0; MPRINT(TAXSCF): QUALPINV{I}=0; MPRINT(TAXSCF): ADJBORRO{I}=0; MPRINT(TAXSCF): LIMFLAG{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTAMTOUTO=0; MPRINT(TAXSCF): TOTDEDCTO=0; MPRINT(TAXSCF): QUALOTHPROP=0; MPRINT(TAXSCF): QUALINVPROP=0; MPRINT(TAXSCF): TOTINVPDCT=0; MPRINT(TAXSCF): FMVOP=0; MPRINT(TAXSCF): DO I=1 TO DIM(NMPMTO); MPRINT(TERMCON): IF (NMYRO{I}=0 & NMPMTO{I}=0) THEN DO; MPRINT(TERMCON): TLMTHO{I}=0; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRO{I}^=0|NMPMTO{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRO{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRO{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHO{I}=NMYRO{I}; MPRINT(TERMCON): IF (NMPMTO{I}=0) THEN DO; MPRINT(TERMCON): NMPMTO{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRO{I}>0) THEN DO; MPRINT(TERMCON): TLMTHO{I}=NMYRO{I}*12; 418 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TERMCON): IF (NMPMTO{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYFO{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMTO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFO{I}=-7) THEN DO; MPRINT(TERMCON): NMPMTO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFO{I}=8) THEN DO; MPRINT(TERMCON): NMPMTO{I}=1; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFO{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYFO{I}=1) THEN NMPMTO{I}=TLMTHO{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=2) THEN NMPMTO{I}=TLMTHO{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=3) THEN NMPMTO{I}=TLMTHO{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=4) THEN NMPMTO{I}=TLMTHO{I}; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=5) THEN NMPMTO{I}=TLMTHO{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=6) THEN NMPMTO{I}=TLMTHO{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=20) THEN NMPMTO{I}=TLMTHO{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=21) THEN NMPMTO{I}=TLMTHO{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=11) THEN NMPMTO{I}=TLMTHO{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=12) THEN NMPMTO{I}=TLMTHO{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=23) THEN NMPMTO{I}=TLMTHO{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=24) THEN NMPMTO{I}=TLMTHO{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=25) THEN NMPMTO{I}=TLMTHO{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=31) THEN NMPMTO{I}=TLMTHO{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=18) THEN NMPMTO{I}=TLMTHO{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=0) THEN NMPMTO{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}>.Z & REGPAYFO{I}^=-1 & REGPAYFO{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMTO{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTHO{I}= REGPAYFO{I}= NMPMTO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHO{I}>.Z & TLMTHO{I}<-2) THEN DO; MPRINT(MOCONV): NMPMTO{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTHO{I}= REGPAYFO{I}= NMPMTO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHO{I}<=.Z) THEN NMPMTO{I}=TLMTHO{I}; MPRINT(MOCONV): ELSE IF (TLMTHO{I}^=-1 & TLMTHO{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFO{I}= TLMTHO{I}= "SETTING AMT=."; MPRINT(MOCONV): NMPMTO{I}=.; MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTO{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHO{I}=-1; MPRINT(TERMCON): IF (NMYRO{I}=0) THEN DO; MPRINT(TERMCON): NMYRO{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTO{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYFO{I}; MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYFO{I}>0) THEN PFREQ=TYPAYFO{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTHO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; 419 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TERMCON): TLMTHO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): IF (NMPMTO{I}>0) THEN DO; MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTHO{I}=NMPMTO{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}))); MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12))); MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTHO{I}=NMPMTO{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTHO{I}=NMPMTO{I}*2/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTHO{I}=NMPMTO{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTHO{I}=NMPMTO{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTHO{I}=NMPMTO{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTHO{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): TLMTHO{I}=NMPMTO{I}; MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMTO{I}= PFREQ= TLMTHO{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}>.Z & NMPMTO{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTHO{I}=NMPMTO{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMTO{I}= PFREQ= TLMTHO{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}=0) THEN TLMTHO{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}<=.Z) THEN TLMTHO{I}=NMPMTO{I}; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}^=-1 & NMPMTO{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMTO{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTHO{I}=.; MPRINT(IMOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTHO{I}>0) THEN DO; MPRINT(TERMCON): NMYRO{I}=MAX(1,INT(.5+(TLMTHO{I}/12))); MPRINT(TERMCON): TLMTHO{I}=MAX(1,ROUND(TLMTHO{I})); MPRINT(TERMCON): END; MPRINT(TERMCON): IF (NMYRO{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMTO{I}= NMYRO{I}= TLMTHO{I}= REGPAYFO{I}= REGPAYO{I}= TYPAYFO{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAYO{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYFO{I}=1) THEN CMOPAYO{I}=REGPAYO{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=2) THEN CMOPAYO{I}=REGPAYO{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=3) THEN CMOPAYO{I}=REGPAYO{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=4) THEN CMOPAYO{I}=REGPAYO{I}; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=5) THEN CMOPAYO{I}=REGPAYO{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=6) THEN CMOPAYO{I}=REGPAYO{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=20) THEN CMOPAYO{I}=REGPAYO{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=21) THEN CMOPAYO{I}=REGPAYO{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=8) THEN CMOPAYO{I}=REGPAYO{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=11) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=12) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)/2; 420 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=23) THEN CMOPAYO{I}=REGPAYO{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=24) THEN CMOPAYO{I}=REGPAYO{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=25) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=31) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=18) THEN CMOPAYO{I}=REGPAYO{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=0) THEN CMOPAYO{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}>.Z & REGPAYFO{I}^=-1 & REGPAYFO{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAYO{I}= REGPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYO{I}>.Z & REGPAYO{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAYO{I}= REGPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYO{I}<=.Z) THEN CMOPAYO{I}=REGPAYO{I}; MPRINT(MOCONV): ELSE IF (REGPAYO{I}^=-1 & REGPAYO{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFO{I}= REGPAYO{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(MOCONV): IF (TYPAYFO{I}=1) THEN CMOPAYO{I}=TYPAYO{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=2) THEN CMOPAYO{I}=TYPAYO{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=3) THEN CMOPAYO{I}=TYPAYO{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=4) THEN CMOPAYO{I}=TYPAYO{I}; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=5) THEN CMOPAYO{I}=TYPAYO{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=6) THEN CMOPAYO{I}=TYPAYO{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=20) THEN CMOPAYO{I}=TYPAYO{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=21) THEN CMOPAYO{I}=TYPAYO{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=8) THEN CMOPAYO{I}=TYPAYO{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=11) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=12) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=23) THEN CMOPAYO{I}=TYPAYO{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=24) THEN CMOPAYO{I}=TYPAYO{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=25) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=31) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=18) THEN CMOPAYO{I}=TYPAYO{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=0) THEN CMOPAYO{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}>.Z & TYPAYFO{I}^=-1 & TYPAYFO{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYO{I}= TYPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYO{I}>.Z & TYPAYO{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYO{I}= TYPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYO{I}<=.Z) THEN CMOPAYO{I}=TYPAYO{I}; MPRINT(MOCONV): ELSE IF (TYPAYO{I}^=-1 & TYPAYO{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYFO{I}= TYPAYO{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF NMYRO{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFTO{I}=(TLMTHO{I}-((1998-LNSTYRO{I})*12)); MPRINT(TAXSCF): LNAGEO{I}=TLMTHO{I}-PAYLFTO{I}; MPRINT(TAXSCF): END; 421 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFTO{I}=0; MPRINT(TAXSCF): LNAGEO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNO); MPRINT(TAXSCF): IF ((HAVELNO{I}=1) & (TAXINS{I} IN(1 2 3)) & TLMTHO{I} > 0 & INTRATEO{I} > 0) THEN DO; MPRINT(TAXSCF): IF (HBALLNO{I}=1) THEN DO; MPRINT(MORTPAY): AMOPAYO{I}=ROUND((MORT((AMTBORRO{I}),.,((INTRATEO{I}/10000)/12),(TLMTHO{I}))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (CMOPAYO{I} > AMOPAYO{I}) THEN CMOPAYO{I}=AMOPAYO{I}; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HBALLNO{I}=5) THEN DO; MPRINT(TAXSCF): IF (AMTBORRO{I} > BALLNO{I}) THEN ADJBORRO{I}=(AMTBORRO{I}-BALLNO{I}); MPRINT(TAXSCF): ELSE IF (AMTBORRO{I} < BALLNO{I}) THEN ADJBORRO{I}=AMTBORRO{I}; MPRINT(TAXSCF): IF ADJBORRO{I} > 0 THEN MPRINT(MORTPAY): AMOPAYO{I}=ROUND((MORT((ADJBORRO{I}),.,((INTRATEO{I}/10000)/12),(TLMTHO{I}))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (AMTBORRO{I}=BALLNO{I}) THEN AMOPAYO{I}=((AMTBORRO{I})*(INTRATEO{I}/10000))/12; MPRINT(TAXSCF): IF (CMOPAYO{I} > AMOPAYO{I}) THEN CMOPAYO{I}=AMOPAYO{I}; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * 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); MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNO); MPRINT(TAXSCF): IF (PROPTYPE{I} IN(12 13 14 21 22 25 40 49 999) & (HINCOMEO{I}=5 | INCOMEO{I}=-1)) | (PROPTYPE{I} IN(12 13 14 21 22 25 40 49 999) & HINCOMEO{I}=1 & INCOMEO{I} < (CMOPAYO{I}*12)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified properties; MPRINT(TAXSCF): QUALPROP{I}=(HAVELNO{I}=1); MPRINT(TAXSCF): QUALOTHPROP=QUALOTHPROP+QUALPROP{I}; MPRINT(TAXSCF): FMVOP=FMVOP+PROPVAL{I}*(HAVELNO{I}=1); MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & HBALLNO{I} IN(1 5) & NMYRO{I} NOT IN(0 -1 -7) & INTRATEO{I}^=-1) THEN DO; 422 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAYO{I} < AMTBORRO{I}*.005) THEN CMOPAYO{I}=MAX(REGPAYO{I},TYPAYO{I}); MPRINT(TAXSCF): 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})); MPRINT(TAXSCF): 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))); MPRINT(TAXSCF): IF LNSTYRO{I}^=1998 THEN AINTDCTO{I}=(CMOPAYO{I}*12)-(AMTOWE_1O{I}-AMTOWEO{I}); MPRINT(TAXSCF): ELSE IF LNSTYRO{I}=1998 THEN AINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | CMOPAYO{I} < 0 | PAYLFTO{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEO{I}=0; MPRINT(TAXSCF): AMTOWE_1O{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & AMTBORRO{I} > 0 & LNAGEO{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTDCTO{I}=(CMOPAYO{I}*12)-(CURBAL_1O{I}-CURBALO{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | AMTBORRO{I} < 0 | LNAGEO{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALO{I}=0; MPRINT(TAXSCF): CURBAL_1O{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): ELSE SINTDCTO{I}=0; MPRINT(TAXSCF): * 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 the home was not purchased in the survey year. If the home was purchased in the survey year, set deduction to zero.; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I}=0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=1998 & PURCHYRO{I}=1998) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=1998) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & CURBALO{I} > 0 & CURBAL_1O{I} > 0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & (CURBALO{I} <= 0 & CURBAL_1O{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTO{I} > 0 & CINTDCTO{I} > 0) THEN DCTDIFFO{I}=CINTDCTO{I}-SINTDCTO{I}; 423 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE DCTDIFFO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (NMYRO{I} IN(-1 -7) & NMPMTO{I} IN(-1 -7)) & AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (INTRATEO{I}=-1)) THEN DO; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest deduction; MPRINT(TAXSCF): IF ((CINTDCTO{I} + AINTDCTO{I} + SINTDCTO{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=(CINTDCTO{I}+AINTDCTO{I}+SINTDCTO{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTDCTO{I}=0; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & CMOPAYO{I} > 0 & (AVINTDCTO{I} > CMOPAYO{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): SINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & AMTOUTO{I} > 0 & (AVINTDCTO{I} > .25*AMTOUTO{I})) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): * Compute total deduction and total amount outstanding; MPRINT(TAXSCF): TOTDEDCTO=TOTDEDCTO+((AVINTDCTO{I})*PERPROP{I}/10000)*(HAVELNO{I}=1); MPRINT(TAXSCF): TOTAMTOUTO=TOTAMTOUTO+AMTOUTO{I}; MPRINT(TAXSCF): * Create flag for loans after 12/15/17, used in computing limits on mortgage interest deduction for home acquistion debt; MPRINT(TAXSCF): LIMFLAG{I}=(LNSTYRO{I}> 2017 | (LNSTYRO{I}=2017 & LNSTMNO{I}=12)); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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 hhs are rational and report the home/properties with the biggest deductions.; MPRINT(TAXSCF): ADJDEDCTO=0; MPRINT(TAXSCF): ADJAMTOUTO=0; MPRINT(TAXSCF): ADJ17AMTOUTO=0; MPRINT(TAXSCF): FMVOTHPROP=0; MPRINT(TAXSCF): IF (QUALOTHPROP > 0) THEN DO; MPRINT(TAXSCF): IF (QUALOTHPROP=1 & QPROP1=1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); 424 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=1 & QPROP2=1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=1 & QPROP3=1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO3; MPRINT(TAXSCF): ADJ17AMTOUTO=X1915*(LIMFL3=1); MPRINT(TAXSCF): ADJAMTOUTO=X1915*(LIMFL3=0); MPRINT(TAXSCF): FMVOTHPROP=X1906*(X1905/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=2) THEN DO; MPRINT(TAXSCF): IF (QPROP1=1 & QPROP2=1) THEN DO; MPRINT(TAXSCF): IF (AVINTDCTO1 >= AVINTDCTO2) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO2 >= AVINTDCTO1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QPROP1=1 & QPROP3=1) THEN DO; MPRINT(TAXSCF): IF (AVINTDCTO1 >= AVINTDCTO3) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO3 >= AVINTDCTO1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO3; MPRINT(TAXSCF): ADJ17AMTOUTO=X1915*(LIMFL3=1); MPRINT(TAXSCF): ADJAMTOUTO=X1915*(LIMFL3=0); MPRINT(TAXSCF): FMVOTHPROP=X1906*(X1905/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QPROP2=1 & QPROP3=1) THEN DO; MPRINT(TAXSCF): IF (AVINTDCTO2 >= AVINTDCTO3) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO3 >= AVINTDCTO2) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO3; MPRINT(TAXSCF): ADJ17AMTOUTO=X1915*(LIMFL3=1); MPRINT(TAXSCF): ADJAMTOUTO=X1915*(LIMFL3=0); MPRINT(TAXSCF): FMVOTHPROP=X1906*(X1905/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; 425 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=3) THEN DO; MPRINT(TAXSCF): IF (AVINTDCTO1 >= AVINTDCTO2 & AVINTDCTO1 >= AVINTDCTO3) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO2 >= AVINTDCTO1 & AVINTDCTO2 >= AVINTDCTO3) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO3 >= AVINTDCTO1 & AVINTDCTO3 >= AVINTDCTO2) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO3; MPRINT(TAXSCF): ADJ17AMTOUTO=X1915*(LIMFL3=1); MPRINT(TAXSCF): ADJAMTOUTO=X1915*(LIMFL3=0); MPRINT(TAXSCF): FMVOTHPROP=X1906*(X1905/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (X701=-7 & X7133=1) THEN DO; MPRINT(TAXSCF): HOUSE=(X7134/10000)*X716; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE HOUSE=SUM(0,X604,X614,X623,X716,(X513+X526)); MPRINT(TAXSCF): IF (TOTEQDBTL > 0 & GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL+TOTEQDBTL > (HOUSE)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) > 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=MIN((HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL)),TOTEQDBTL,100000); MPRINT(TAXSCF): ADJDEDCTL=TOTDEDCTL*(ADJEQDBTL/TOTEQDBTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) <= 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=0; MPRINT(TAXSCF): ADJDEDCTL=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((FILESTAT=3) & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) > 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=MIN((HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL)),TOTEQDBTL,50000); MPRINT(TAXSCF): ADJDEDCTL=TOTDEDCTL*(ADJEQDBTL/TOTEQDBTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((FILESTAT=3) & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) <= 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=0; MPRINT(TAXSCF): ADJDEDCTL=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TOTEQDBTL ^=. & TOTDEDCTL ^=.) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=TOTEQDBTL; MPRINT(TAXSCF): ADJDEDCTL=TOTDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TOTEQDBTL > 0 & GRFAMTOUTM+A17AMTOUTM+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= /; MPRINT(TAXSCF): * 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), worksheet changed in 2018; MPRINT(TAXSCF): ADJDEDCT=0; 426 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): * case 1 - grandfathered debt, no home acquisition debt, maybe home equity; MPRINT(TAXSCF): IF (GRFAMTOUTM > 0 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & ADJEQDBTL <= 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & ADJEQDBTL > 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+100000)/(GRFAMTOUTM+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & ADJEQDBTL <= 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & ADJEQDBTL > 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+50000)/(GRFAMTOUTM+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * case 2 - some grandfathered debt, some home acquisition debt, maybe home equity; MPRINT(TAXSCF): ELSE IF (GRFAMTOUTM > 0 & (HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & (ADJEQDBTL=0 | ADJEQDBTL <= 100000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & ADJEQDBTL > 100000 & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+100000) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (ADJEQDBTL <= 100000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+ADJEQDBTL),(1000000+ADJEQDBTL))) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (ADJEQDBTL > 100000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+100000),1100000))/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (ADJEQDBTL=0 | ADJEQDBTL <= 50000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & ADJEQDBTL > 50000 & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+50000) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (ADJEQDBTL=0 | ADJEQDBTL <= 50000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; 427 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+ADJEQDBTL),(500000+ADJEQDBTL))) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (ADJEQDBTL=0 | ADJEQDBTL > 50000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+50000),550000))/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * case 3 - no grandfathered debt, maybe home acquisition, maybe home equity; MPRINT(TAXSCF): ELSE IF (GRFAMTOUTM=0 & (HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | ADJEQDBTL > 0)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 0 & ADJEQDBTL <= 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((100000)/ADJEQDBTL)*ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL <= 1000000) & ADJEQDBTL <= 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL <= 1000000) & ADJEQDBTL > 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+100000)/ (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL > 1000000) & (ADJEQDBTL <= 100000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((1000000+ADJEQDBTL)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL > 1000000) & (ADJEQDBTL > 100000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((1100000)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 0 & ADJEQDBTL <= 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((50000)/ADJEQDBTL)*ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000) & ADJEQDBTL <= 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000) & ADJEQDBTL > 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+50000)/ (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000) & (ADJEQDBTL <= 50000)) THEN DO; 428 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((500000+ADJEQDBTL)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000) & (ADJEQDBTL > 50000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((550000)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * a few obs will come out here, but they either have -1 as the interest rate or are land contracts; MPRINT(TAXSCF): IF ((GRFAMTOUTM > 0 | HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | (ADJEQDBTL*(1998 LE 2016)) > 0 | A17AMTOUTM > 0 & ADJ17AMTOUTO > 0) & ADJDEDCT=0 & X5744 IN(1 5 6) & Y1=YY1*10+1 & X720^=1998) THEN PUT "MORTGAGE DEDUCTION SHOULD NOT BE ZERO " Y1= X5744= X5746= GRFAMTOUTM= HAAMTOUTM= ADJAMTOUTO= TOTAQDBTL= ADJEQDBTL= A17AMTOUTM= ADJ17AMTOUTO= TOTDEDCTM= ADJDEDCTO= ADJDEDCTL= OVERLIM= QUALOTHPROP= CINTDCTM1= CINTDCTM2= CINTDCTM3= CINTDCTO1= CINTDCTO2= X702= X714= X7135= X723=/; MPRINT(TAXSCF): IF ((GRFAMTOUTM > 0 | HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | ADJEQDBTL > 0 | A17AMTOUTM > 0 & ADJ17AMTOUTO > 0) & OVERLIM=. & Y1=YY1*10+1) THEN PUT "OVER LIMIT INDICATOR MISSING " Y1= X5744= X5746= GRFAMTOUTM= HAAMTOUTM= ADJAMTOUTO= TOTAQDBTL= ADJEQDBTL= A17AMTOUTM= ADJ17AMTOUTO= TOTDEDCTM= ADJDEDCTO= ADJDEDCTL= OVERLIM= ADJDEDCT=/; MPRINT(TAXSCF): IF ADJDEDCT >= 100000 & Y1=YY1*10+1 THEN PUT "HUGE MORTGAGE INTEREST DEDUCTION " Y1= TOTDEDCTM= GRFAMTOUTM= HAAMTOUTM= TOTAQDBTL= ADJDEDCTL= ADJEQDBTL= ADJDEDCTO= ADJAMTOUTO= A17AMTOUTM= ADJ17AMTOUTO= HOUSE= QUALOTHPROP= FMVOTHPROP= X5744= X5746= ADJDEDCT= /; MPRINT(TAXSCF): ************Real estate taxes; MPRINT(TAXSCF): * TAXSIM doesnt want local property taxes in amount of itemized deductions, listed as a separate variable; MPRINT(TAXSCF): * 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; MPRINT(TAXSCF): PROPTXRATE=0; MPRINT(TAXSCF): IF (HOUSE > 0 & RESTAXM1 > 0) THEN PROPTXRATE=(RESTAXM1/HOUSE)*100; MPRINT(TAXSCF): IF (PROPTXRATE > 10 & Y1=YY1*10+1) THEN PUT "HIGH PROPERTY TAX RATE " Y1= HOUSE= RESTAXM1= X721= J721= X722= J722= X501= X601= X701= PROPTXRATE=/; MPRINT(TAXSCF): IF (PROPTXRATE > 10 & X722=4) THEN RESTAXM1=X721; MPRINT(TAXSCF): ************Investment interest expense; MPRINT(TAXSCF): * 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 need to add up dividend/interest income. Capital gains 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.; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * LOCs - only counting loans not secured by the residence and with asset or real estate investment as loan purpose.; MPRINT(TAXSCF): IF (X1101=1) THEN DO; MPRINT(TAXSCF): DO I=1 TO DIM(SBYHOME); MPRINT(TAXSCF): IF (SBYHOME{I}=5 & DOOWE{I}=1 & LNPURP{I} IN(76 78 79)) THEN DO; MPRINT(TAXSCF): IF (TYPAYL{I} > 0) THEN DO; MPRINT(MOCONV): IF (TYPAYLF{I}=1) THEN CMOPAYL{I}=TYPAYL{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=2) THEN CMOPAYL{I}=TYPAYL{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=3) THEN CMOPAYL{I}=TYPAYL{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=4) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=5) THEN CMOPAYL{I}=TYPAYL{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=6) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=20) THEN CMOPAYL{I}=TYPAYL{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=21) THEN CMOPAYL{I}=TYPAYL{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=8) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=11) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=12) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=23) THEN CMOPAYL{I}=TYPAYL{I}*13/12; 429 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=24) THEN CMOPAYL{I}=TYPAYL{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=25) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=31) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=18) THEN CMOPAYL{I}=TYPAYL{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=0) THEN CMOPAYL{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}>.Z & TYPAYLF{I}^=-1 & TYPAYLF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}>.Z & TYPAYL{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}<=.Z) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYL{I}^=-1 & TYPAYL{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYLF{I}= TYPAYL{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TYPAYL{I} IN(0 -1 -2)) THEN DO; MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (INTRATEL{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=((INTRATEL{I}/10000)*AMTOUTL{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEL{I} IN(0 -1)) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTL{I} > 0 & CMOPAYL{I} > 0 & SINTDCTL{I} > CMOPAYL{I}*12) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=CMOPAYL{I}*12; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTLOCINVEX=TOTLOCINVEX+SINTDCTL{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Other properties - only counting properties held for investment purposes, and hh must receive income from the property.; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNO); MPRINT(TAXSCF): IF (PROPTYPE{I} IN(41 42 43 44 45 46 47 48) & (INCOMEO{I} > 0)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified properties; MPRINT(TAXSCF): QUALPINV{I}=(HAVELNO{I}=1); MPRINT(TAXSCF): QUALINVPROP=QUALINVPROP+QUALPINV{I}; MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & HBALLNO{I} IN(1 5) & NMYRO{I} NOT IN(0 -1 -7) & INTRATEO{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAYO{I} < AMTBORRO{I}*.005) THEN CMOPAYO{I}=MAX(REGPAYO{I},TYPAYO{I}); MPRINT(TAXSCF): 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})); MPRINT(TAXSCF): 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))); MPRINT(TAXSCF): IF LNSTYRO{I}^=1998 THEN AINTDCTO{I}=(CMOPAYO{I}*12)-(AMTOWE_1O{I}-AMTOWEO{I}); 430 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE IF LNSTYRO{I}=1998 THEN AINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | CMOPAYO{I} < 0 | PAYLFTO{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEO{I}=0; MPRINT(TAXSCF): AMTOWE_1O{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & AMTBORRO{I} > 0 & LNAGEO{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTDCTO{I}=(CMOPAYO{I}*12)-(CURBAL_1O{I}-CURBALO{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | AMTBORRO{I} < 0 | LNAGEO{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALO{I}=0; MPRINT(TAXSCF): CURBAL_1O{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): ELSE SINTDCTO{I}=0; MPRINT(TAXSCF): * 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 the home was not purchased in the survey year. If the home was purchased in the survey year, set deduction to zero.; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I}=0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=1998 & PURCHYRO{I}=1998) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=1998) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & CURBALO{I} > 0 & CURBAL_1O{I} > 0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & (CURBALO{I} <= 0 & CURBAL_1O{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTO{I} > 0 & CINTDCTO{I} > 0) THEN DCTDIFFO{I}=CINTDCTO{I}-SINTDCTO{I}; MPRINT(TAXSCF): ELSE DCTDIFFO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (NMYRO{I} IN(-1 -7) & NMPMTO{I} IN(-1 -7)) & AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; 431 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (INTRATEO{I}=-1)) THEN DO; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest deduction; MPRINT(TAXSCF): IF ((CINTDCTO{I} + AINTDCTO{I} + SINTDCTO{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=(CINTDCTO{I}+AINTDCTO{I}+SINTDCTO{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTDCTO{I}=0; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & CMOPAYO{I} > 0 & (AVINTDCTO{I} > CMOPAYO{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): SINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & AMTOUTO{I} > 0 & (AVINTDCTO{I} > .25*AMTOUTO{I})) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): * Compute total investment interest expense; MPRINT(TAXSCF): TOTINVPDCT=TOTINVPDCT+((AVINTDCTO{I})*PERPROP{I}/10000)*(HAVELNO{I}=1); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Other loans - only counting loans for (non-business) investment purposes; MPRINT(TAXSCF): ARRAY TLMTHI {*} TLMTHI1 TLMTHI2 TLMTHI3 TLMTHI4 TLMTHI5 TLMTHI6; MPRINT(TAXSCF): ARRAY CMOPAYI {*} CMOPAYI1 CMOPAYI2 CMOPAYI3 CMOPAYI4 CMOPAYI5 CMOPAYI6; MPRINT(TAXSCF): ARRAY PAYLFTI {*} PAYLFTI1 PAYLFTI2 PAYLFTI3 PAYLFTI4 PAYLFTI5 PAYLFTI6; MPRINT(TAXSCF): ARRAY AMTOWEI {*} AMTOWEI1 AMTOWEI2 AMTOWEI3 AMTOWEI4 AMTOWEI5 AMTOWEI6; MPRINT(TAXSCF): ARRAY AMTOWE_1I {*} AMTOWE_1I1 AMTOWE_1I2 AMTOWE_1I3 AMTOWE_1I4 AMTOWE_1I5 AMTOWE_1I6; MPRINT(TAXSCF): ARRAY AINTEXPI {*} AINTEXPI1 AINTEXPI2 AINTEXPI3 AINTEXPI4 AINTEXPI5 AINTEXPI6; MPRINT(TAXSCF): ARRAY LNAGEI {*} LNAGEI1 LNAGEI2 LNAGEI3 LNAGEI4 LNAGEI5 LNAGEI6; MPRINT(TAXSCF): ARRAY CURBALI {*} CURBALI1 CURBALI2 CURBALI3 URBALI4 CURBALI5 CURBALI6; MPRINT(TAXSCF): ARRAY CURBAL_1I {*} CURBAL_1I1 CURBAL_1I2 CURBAL_1I3 CURBAL_1I4 CURBAL_1I5 CURBAL_1I6; MPRINT(TAXSCF): ARRAY CINTEXPI {*} CINTEXPI1 CINTEXPI2 CINTEXPI3 CINTEXPI4 CINTEXPI5 CINTEXPI6; MPRINT(TAXSCF): ARRAY DCTDIFFI {*} DCTDIFFI1 DCTDIFFI2 DCTDIFFI3 DCTDIFFI4 DCTDIFFI5 DCTDIFFI6; MPRINT(TAXSCF): ARRAY SINTEXPI {*} SINTEXPI1 SINTEXPI2 SINTEXPI3 SINTEXPI4 SINTEXPI5 SINTEXPI6; MPRINT(TAXSCF): ARRAY AVINTEXPI {*} AVINTEXPI1 AVINTEXPI2 AVINTEXPI3 AVINTEXPI4 AVINTEXPI5 AVINTEXPI6; MPRINT(TAXSCF): ARRAY QUALN {*} QLN1 QLN2 QLN3 QLN4 QLN5 QLN6; MPRINT(TAXSCF): ARRAY NMPMTI {*} X2716 X2733 X2816 X2833 X2916 X2933; MPRINT(TAXSCF): ARRAY NMYRI {*} X2717 X2734 X2817 X2834 X2917 X2934; MPRINT(TAXSCF): ARRAY REGPAYFI {*} X7527 X7526 X7525 X7524 X7523 X7522; MPRINT(TAXSCF): ARRAY REGPAYI {*} X2718 X2735 X2818 X2835 X2918 X2935; MPRINT(TAXSCF): ARRAY TYPAYFI {*} X2720 X2737 X2820 X2837 X2920 X2937; MPRINT(TAXSCF): ARRAY TYPAYI {*} X2719 X2736 X2819 X2836 X2919 X2936; MPRINT(TAXSCF): ARRAY LNSTYRI {*} X2713 X2730 X2813 X2830 X2913 X2930; MPRINT(TAXSCF): ARRAY AMTBORRI {*} X2714 X2731 X2814 X2831 X2914 X2931; MPRINT(TAXSCF): ARRAY JAMTBORRI {*} J2714 J2731 J2814 J2831 J2914 J2931; MPRINT(TAXSCF): ARRAY AMTOUTI {*} X2723 X2740 X2823 X2840 X2923 X2940; 432 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ARRAY JAMTOUTI {*} J2723 J2740 J2823 J2840 J2923 J2940; MPRINT(TAXSCF): ARRAY INTRATEI {*} X2724 X2741 X2824 X2841 X2924 X2941; MPRINT(TAXSCF): ARRAY ONSCHEDI {*} X7521 X7520 X7519 X7518 X7517 X7516; MPRINT(TAXSCF): ; MPRINT(TAXSCF): ARRAY LNTYPE {*} X2710 X2727 X2810 X2827 X2910 X2927; MPRINT(TAXSCF): ARRAY BUSLN {*} X6842 X6843 X6844 X6845 X6846 X6847; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTHI); MPRINT(TAXSCF): TLMTHI{I}=0; MPRINT(TAXSCF): CMOPAYI{I}=0; MPRINT(TAXSCF): PAYLFTI{I}=0; MPRINT(TAXSCF): AMTOWEI{I}=0; MPRINT(TAXSCF): AMTOWE_1I{I}=0; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): LNAGEI{I}=0; MPRINT(TAXSCF): CURBALI{I}=0; MPRINT(TAXSCF): CURBAL_1I{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): DCTDIFFI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; MPRINT(TAXSCF): AVINTEXPI{I}=0; MPRINT(TAXSCF): QUALN{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTLNINVEX=0; MPRINT(TAXSCF): QUALOANINV=0; MPRINT(TAXSCF): DO I=1 TO DIM(NMPMTI); MPRINT(TERMCON): IF (NMYRI{I}=0 & NMPMTI{I}=0) THEN DO; MPRINT(TERMCON): TLMTHI{I}=0; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRI{I}^=0|NMPMTI{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRI{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRI{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHI{I}=NMYRI{I}; MPRINT(TERMCON): IF (NMPMTI{I}=0) THEN DO; MPRINT(TERMCON): NMPMTI{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRI{I}>0) THEN DO; MPRINT(TERMCON): TLMTHI{I}=NMYRI{I}*12; MPRINT(TERMCON): IF (NMPMTI{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYFI{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMTI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFI{I}=-7) THEN DO; MPRINT(TERMCON): NMPMTI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFI{I}=8) THEN DO; MPRINT(TERMCON): NMPMTI{I}=1; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFI{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYFI{I}=1) THEN NMPMTI{I}=TLMTHI{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=2) THEN NMPMTI{I}=TLMTHI{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=3) THEN NMPMTI{I}=TLMTHI{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=4) THEN NMPMTI{I}=TLMTHI{I}; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=5) THEN NMPMTI{I}=TLMTHI{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=6) THEN NMPMTI{I}=TLMTHI{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=20) THEN NMPMTI{I}=TLMTHI{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=21) THEN NMPMTI{I}=TLMTHI{I}*3/12; 433 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=11) THEN NMPMTI{I}=TLMTHI{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=12) THEN NMPMTI{I}=TLMTHI{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=23) THEN NMPMTI{I}=TLMTHI{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=24) THEN NMPMTI{I}=TLMTHI{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=25) THEN NMPMTI{I}=TLMTHI{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=31) THEN NMPMTI{I}=TLMTHI{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=18) THEN NMPMTI{I}=TLMTHI{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=0) THEN NMPMTI{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}>.Z & REGPAYFI{I}^=-1 & REGPAYFI{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMTI{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTHI{I}= REGPAYFI{I}= NMPMTI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHI{I}>.Z & TLMTHI{I}<-2) THEN DO; MPRINT(MOCONV): NMPMTI{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTHI{I}= REGPAYFI{I}= NMPMTI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHI{I}<=.Z) THEN NMPMTI{I}=TLMTHI{I}; MPRINT(MOCONV): ELSE IF (TLMTHI{I}^=-1 & TLMTHI{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFI{I}= TLMTHI{I}= "SETTING AMT=."; MPRINT(MOCONV): NMPMTI{I}=.; MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTI{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHI{I}=-1; MPRINT(TERMCON): IF (NMYRI{I}=0) THEN DO; MPRINT(TERMCON): NMYRI{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTI{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYFI{I}; MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYFI{I}>0) THEN PFREQ=TYPAYFI{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTHI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; MPRINT(TERMCON): TLMTHI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): IF (NMPMTI{I}>0) THEN DO; MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTHI{I}=NMPMTI{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}))); MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12))); MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTHI{I}=NMPMTI{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTHI{I}=NMPMTI{I}*2/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTHI{I}=NMPMTI{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTHI{I}=NMPMTI{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTHI{I}=NMPMTI{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTHI{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; 434 The SAS System 13:32 Friday, January 29, 2021 MPRINT(IMOCONV): TLMTHI{I}=NMPMTI{I}; MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMTI{I}= PFREQ= TLMTHI{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}>.Z & NMPMTI{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTHI{I}=NMPMTI{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMTI{I}= PFREQ= TLMTHI{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}=0) THEN TLMTHI{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}<=.Z) THEN TLMTHI{I}=NMPMTI{I}; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}^=-1 & NMPMTI{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMTI{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTHI{I}=.; MPRINT(IMOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTHI{I}>0) THEN DO; MPRINT(TERMCON): NMYRI{I}=MAX(1,INT(.5+(TLMTHI{I}/12))); MPRINT(TERMCON): TLMTHI{I}=MAX(1,ROUND(TLMTHI{I})); MPRINT(TERMCON): END; MPRINT(TERMCON): IF (NMYRI{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMTI{I}= NMYRI{I}= TLMTHI{I}= REGPAYFI{I}= REGPAYI{I}= TYPAYFI{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAYI{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYFI{I}=1) THEN CMOPAYI{I}=REGPAYI{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=2) THEN CMOPAYI{I}=REGPAYI{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=3) THEN CMOPAYI{I}=REGPAYI{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=4) THEN CMOPAYI{I}=REGPAYI{I}; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=5) THEN CMOPAYI{I}=REGPAYI{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=6) THEN CMOPAYI{I}=REGPAYI{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=20) THEN CMOPAYI{I}=REGPAYI{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=21) THEN CMOPAYI{I}=REGPAYI{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=8) THEN CMOPAYI{I}=REGPAYI{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=11) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=12) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=23) THEN CMOPAYI{I}=REGPAYI{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=24) THEN CMOPAYI{I}=REGPAYI{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=25) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=31) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=18) THEN CMOPAYI{I}=REGPAYI{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=0) THEN CMOPAYI{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}>.Z & REGPAYFI{I}^=-1 & REGPAYFI{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAYI{I}= REGPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYI{I}>.Z & REGPAYI{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAYI{I}= REGPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYI{I}<=.Z) THEN CMOPAYI{I}=REGPAYI{I}; MPRINT(MOCONV): ELSE IF (REGPAYI{I}^=-1 & REGPAYI{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFI{I}= REGPAYI{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): END; 435 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(MOCONV): IF (TYPAYFI{I}=1) THEN CMOPAYI{I}=TYPAYI{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=2) THEN CMOPAYI{I}=TYPAYI{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=3) THEN CMOPAYI{I}=TYPAYI{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=4) THEN CMOPAYI{I}=TYPAYI{I}; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=5) THEN CMOPAYI{I}=TYPAYI{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=6) THEN CMOPAYI{I}=TYPAYI{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=20) THEN CMOPAYI{I}=TYPAYI{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=21) THEN CMOPAYI{I}=TYPAYI{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=8) THEN CMOPAYI{I}=TYPAYI{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=11) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=12) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=23) THEN CMOPAYI{I}=TYPAYI{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=24) THEN CMOPAYI{I}=TYPAYI{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=25) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=31) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=18) THEN CMOPAYI{I}=TYPAYI{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=0) THEN CMOPAYI{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}>.Z & TYPAYFI{I}^=-1 & TYPAYFI{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYI{I}= TYPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYI{I}>.Z & TYPAYI{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYI{I}= TYPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYI{I}<=.Z) THEN CMOPAYI{I}=TYPAYI{I}; MPRINT(MOCONV): ELSE IF (TYPAYI{I}^=-1 & TYPAYI{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYFI{I}= TYPAYI{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF NMYRI{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFTI{I}=(TLMTHI{I}-((1998-LNSTYRI{I})*12)); MPRINT(TAXSCF): LNAGEI{I}=TLMTHI{I}-PAYLFTI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFTI{I}=0; MPRINT(TAXSCF): LNAGEI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): DO I=1 TO MIN(6,X2709); MPRINT(TAXSCF): IF (LNTYPE{I} IN(76 78 79) & BUSLN{I} IN(0 5 8)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified loans; MPRINT(TAXSCF): QUALN{I}=1; MPRINT(TAXSCF): QUALOANINV=QUALOANINV+QUALN{I}; MPRINT(TAXSCF): IF (NMYRI{I} NOT IN(0 -1 -7) & INTRATEI{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & PAYLFTI{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAYI{I} < AMTBORRI{I}*.005) THEN CMOPAYI{I}=MAX(REGPAYI{I},TYPAYI{I}); MPRINT(TAXSCF): AMTOWEI{I}=CMOPAYI{I}*((1-1/(1+(INTRATEI{I}/10000)/12)**PAYLFTI{I})/ ((INTRATEI{I}/10000)/12)); MPRINT(TAXSCF): AMTOWE_1I{I}=CMOPAYI{I}*((1-1/(1+(INTRATEI{I}/10000)/12)**(PAYLFTI{I}+12))/ ((INTRATEI{I}/10000)/12)); MPRINT(TAXSCF): IF LNSTYRI{I}^=1998 THEN AINTEXPI{I}=(CMOPAYI{I}*12)-(AMTOWE_1I{I}-AMTOWEI{I}); MPRINT(TAXSCF): ELSE IF LNSTYRI{I}=1998 THEN AINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): END; 436 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE IF (TLMTHI{I} < 0 | CMOPAYI{I} < 0 | PAYLFTI{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEI{I}=0; MPRINT(TAXSCF): AMTOWE_1I{I}=0; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & AMTBORRI{I} > 0 & LNAGEI{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTEXPI{I}=(CMOPAYI{I}*12)-(CURBAL_1I{I}-CURBALI{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHI{I} < 0 | AMTBORRI{I} < 0 | LNAGEI{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALI{I}=0; MPRINT(TAXSCF): CURBAL_1I{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUTI{I} > 0 & INTRATEI{I} > 0) THEN SINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): ELSE SINTEXPI{I}=0; MPRINT(TAXSCF): * 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, set the interest expense to zero.; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & PAYLFTI{I}=0) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=CURBAL_1I{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=CINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & LNSTYRI{I}=1998) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTEXPI{I} < 0 | CINTEXPI{I} < 0) & CURBALI{I} > 0 & CURBAL_1I{I} > 0) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=CURBAL_1I{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=CINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTEXPI{I} < 0 | CINTEXPI{I} < 0) & (CURBALI{I} <= 0 & CURBAL_1I{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTEXPI{I} > 0 & CINTEXPI{I} > 0) THEN DCTDIFFI{I}=CINTEXPI{I}-SINTEXPI{I}; MPRINT(TAXSCF): ELSE DCTDIFFI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): CINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEI{I}=-1) THEN DO; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; MPRINT(TAXSCF): END; 437 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): * Averaging across the three measures of interest expense; MPRINT(TAXSCF): IF ((CINTEXPI{I} + AINTEXPI{I} + SINTEXPI{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=(CINTEXPI{I}+AINTEXPI{I}+SINTEXPI{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTEXPI{I}=0; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (AVINTEXPI{I} > 0 & CMOPAYI{I} > 0 & (AVINTEXPI{I} > CMOPAYI{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=CMOPAYI{I}*12; MPRINT(TAXSCF): CINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): SINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AVINTEXPI{I} > 0 & AMTOUTI{I} > 0 & (AVINTEXPI{I} > .25*AMTOUTI{I})) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): CINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): * Compute loan investment interest expense; MPRINT(TAXSCF): TOTLNINVEX=TOTLNINVEX+AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Total investment interest expense, if investment interest expense is greater than interest/dividend income, then expense is limited to income amount; MPRINT(TAXSCF): TOTINTINC=X5708+X5710; MPRINT(TAXSCF): TOTINVEX=0; MPRINT(TAXSCF): TOTINVEX=TOTLOCINVEX+TOTINVPDCT+TOTLNINVEX; MPRINT(TAXSCF): IF TOTINVEX > 0 THEN HINVEX=1; MPRINT(TAXSCF): ELSE HINVEX=0; MPRINT(TAXSCF): IF TOTINVEX > TOTINTINC & Y1=YY1*10+1 THEN PUT "TOO MUCH INVESTMENT INTEREST EXPENSES " Y1= TOTINVEX= TOTLOCINVEX= TOTINVPDCT= TOTLNINVEX= TOTINTINC=/; MPRINT(TAXSCF): IF (TOTINVEX > TOTINTINC) THEN TOTINVEX=TOTINTINC; MPRINT(TAXSCF): * In 1988, 40% of personal interest is deductible, this includes credit cards, car/other vehicle loans, other consumer loans, loans against life insurance policies, home improvement loans, and non-HELOC LOCs.; MPRINT(TAXSCF): TOTPINEX=0; MPRINT(TAXSCF): **************Charitable Contributions; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): GCHARITY=(X5822=1); MPRINT(TAXSCF): CHARITYAMT=0; MPRINT(TAXSCF): IF (X5822=1 & X5823 > 0) THEN DO; MPRINT(TAXSCF): IF (X5823 > .5*AGI) & (AGI>0) THEN CHARITYAMT=.5*AGI; MPRINT(TAXSCF): ELSE CHARITYAMT=X5823; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF X5822=1 & X5823 > 0 & AGI < 0 & Y1=YY1*10+1 THEN PUT "NEGATIVE AGI BUT CHARITYAMT > 0 " Y1= X5823= CHARITYAMT= X5744= X5746= AGI=; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ITEMDEDCT_FLAG=0 THEN DO; MPRINT(TAXSCF): ADJDEDCT=0; MPRINT(TAXSCF): RESTAXM1=0; 438 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): TOTINVEX=0; MPRINT(TAXSCF): CHARITYAMT=0; MPRINT(TAXSCF): TOTPINEX=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): **********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.; MPRINT(TAXSCF): TOTITEMDCT=0; MPRINT(TAXSCF): * no limits on itemized deductions in 1988, 2012 and 2018; MPRINT(TAXSCF): * starting in 2015, itemized deduction phaseout limit for AGI are the same as for personal exemptions, so using EXLIM1-4 in this code; MPRINT(TAXSCF): TEMPITEMDCT=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); MPRINT(TAXSCF): IF TEMPITEMDCT > 0 & ((AGI <= 121200 & FILESTAT^=3) | (AGI <= 60600 & FILESTAT=3)) THEN DO; MPRINT(TAXSCF): TOTITEMDCT=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); MPRINT(TAXSCF): DEDCTLIM=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TEMPITEMDCT > 0 & DEDCTLIM^=0 THEN DO; MPRINT(TAXSCF): ITDLIM=121200*(FILESTAT^=3)+60600*(FILESTAT=3); MPRINT(TAXSCF): DEDCTLIM=1; MPRINT(TAXSCF): IWLINE1=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); MPRINT(TAXSCF): IF (IWLINE1-TOTINVEX <= 0) THEN TOTITEMDCT=IWLINE1; MPRINT(TAXSCF): ELSE IF (IWLINE1-TOTINVEX > 0) THEN DO; MPRINT(TAXSCF): IWLINE4=(IWLINE1-TOTINVEX)*.80; MPRINT(TAXSCF): IWLINE7=AGI-ITDLIM; MPRINT(TAXSCF): IWLINE8=IWLINE7*.03; MPRINT(TAXSCF): IWLINE9=MIN(IWLINE4,IWLINE8); MPRINT(TAXSCF): TOTITEMDCT=IWLINE1-IWLINE9; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TEMPITEMDCT=0 THEN DEDCTLIM=0; MPRINT(TAXSCF): * NOTE: Change in worksheet for 2006; MPRINT(TAXSCF): * no limits on exemptions in 1988 and 2012, no exemptions in 2018; MPRINT(TAXSCF): TOTEXPTAMT=0; MPRINT(TAXSCF): EXPTLIM=0; MPRINT(TAXSCF): EXLIM=121200*(FILESTAT=1)+181800*(FILESTAT IN(2 5)) +90900*(FILESTAT=3)+151500*(FILESTAT=4); MPRINT(TAXSCF): EXPAGIT=122500*(FILESTAT^=3)+61250*(FILESTAT=3); MPRINT(TAXSCF): DLINE6=2500*(FILESTAT^=3)+1250*(FILESTAT=3); MPRINT(TAXSCF): IF (AGI <= EXLIM) THEN TOTEXPTAMT=TOTEXPT*2650; MPRINT(TAXSCF): ELSE IF (AGI > EXLIM) THEN DO; MPRINT(TAXSCF): EXPTLIM=1; MPRINT(TAXSCF): EWLINE2=TOTEXPT*2650; MPRINT(TAXSCF): EWLINE5=AGI-EXLIM; MPRINT(TAXSCF): IF EWLINE5 > EXPAGIT THEN TOTEXPTAMT=TOTEXPT*0; MPRINT(TAXSCF): ELSE IF EWLINE5 <= EXPAGIT THEN DO; MPRINT(TAXSCF): EWLINE6=ROUND((EWLINE5/DLINE6),1); MPRINT(TAXSCF): EWLINE7=EWLINE6*.02; MPRINT(TAXSCF): EWLINE8=EWLINE7*EWLINE2; MPRINT(TAXSCF): TOTEXPTAMT=EWLINE2-EWLINE8; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Standard deduction by filing status, including addition deduction amount for over 65, dont have any info on blindness. Also compute number of age exemptions and flag nonfilers based on IRS filing thresholds and a few other assumptions. Nonfilers also cannot have negative AGI, losses from business or capital gains or more than 1/3 of the lowest filing threshold, which is married, filing separately; MPRINT(TAXSCF): BUSRENTCAPLOSS=(TBUSINC < 0 | RENTINC < 0 | CAPGLINC < 0); MPRINT(TAXSCF): HWSINCSE=(WSINCOME >= (.33*2650) | WSINCSP >= (.33*2650) | TBUSINC >= (.33*2650)); MPRINT(TAXSCF): STDDCT=0; MPRINT(TAXSCF): IF (FILESTAT=1 & TUAGE < 65) THEN DO; 439 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): STDDCT=4150; MPRINT(TAXSCF): NONFILER=(0 < AGI < 6800)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=1 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=5150; MPRINT(TAXSCF): NONFILER=(0 < AGI < 7800)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=2 & TUAGE < 65 & SPAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=6900; MPRINT(TAXSCF): NONFILER=(0 < AGI < 12200)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=2 & TUAGE >= 65 & SPAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=8500; MPRINT(TAXSCF): NONFILER=(0 < AGI < 13800)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=2 & (TUAGE >= 65 | SPAGE >= 65)) THEN DO; MPRINT(TAXSCF): STDDCT=7700; MPRINT(TAXSCF): NONFILER=(0 < AGI < 13000)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=6900/2; MPRINT(TAXSCF): NONFILER=(AGI < 2650)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=8500/2; MPRINT(TAXSCF): NONFILER=(AGI < 2650)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=4 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=6050; MPRINT(TAXSCF): NONFILER=(0 < AGI < 8700)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=4 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=7050; MPRINT(TAXSCF): NONFILER=(0 < AGI < 9700)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=5 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=6900; MPRINT(TAXSCF): NONFILER=(AGI < 9550)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=5 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=7700; MPRINT(TAXSCF): NONFILER=(0 < AGI < 10350)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): AGEXMP=(TUAGE > 65) + (SPAGE > 65)*(FILESTAT=2); MPRINT(TAXSCF): * Did the hh itemize; MPRINT(TAXSCF): * No itemization question in 1989 or 1992, so itemize will be zero; MPRINT(TAXSCF): ITEMIZE=(TAXUNIT=0)*(X7367=1 | X7368=1 | X7369=1)+(TAXUNIT=1)*(X7368=1)+(TAXUNIT=2)*(X7369=1); MPRINT(TAXSCF): CITEMIZE=(TOTITEMDCT => STDDCT); MPRINT(TAXSCF): * Construct other variables needed for TAXSIM; MPRINT(TAXSCF): TAXUNITID=Y1*100+TAXUNIT; MPRINT(TAXSCF): YEAR=1997; MPRINT(TAXSCF): AGECL=1*(TUAGE < 26)+2*(26<=TUAGE<35)+3*(35<=TUAGE<45) +4*(45<=TUAGE<55)+5*(55<=TUAGE<65)+6*(TUAGE>=65); MPRINT(TAXSCF): * 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).; MPRINT(TAXSCF): STCAPINC=0; 440 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): LTCAPINC=0; MPRINT(TAXSCF): IF (AGICL IN(1)) THEN DO; MPRINT(TAXSCF): IF (CAPGLINC > 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.89; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.89); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (CAPGLINC < 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.67; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.67); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AGICL IN(2)) THEN DO; MPRINT(TAXSCF): IF (CAPGLINC > 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.88; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.88); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (CAPGLINC < 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.62; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.62); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AGICL IN(3)) THEN DO; MPRINT(TAXSCF): IF (CAPGLINC > 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.90; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.90); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (CAPGLINC < 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.47; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.47); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ARRAY NEG_1 {*} TBUSINC OTHINC RENTINC OTHPINC; MPRINT(TAXSCF): DO I=1 TO DIM(NEG_1); MPRINT(TAXSCF): IF NEG_1{I}=-1 THEN NEG_1{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): UNADJTOTDEDCT=MAX(0,(ADJDEDCT+TOTINVEX+CHARITYAMT)); MPRINT(TAXSCF): CHCAREXP=0; MPRINT(TAXSCF): TINCOME=WSINCOME+WSINCSP+TBUSINC+INTINC+NTAXINC+DIVINC+CAPGLINC+RENTINC +UNEMPINC+GSSINC+PENINC+AFDCINC+OTHINC; MPRINT(TAXSCF): TOTXINC=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC +UNEMPINC+GSSINC+PENINC+OTHINC; MPRINT(TAXSCF): *set 3000 max loss for capital gains for comparison with IRS estimates; MPRINT(TAXSCF): IF CAPGLINC < -3000 THEN CAPGL3K=-3000; MPRINT(TAXSCF): ELSE CAPGL3K=CAPGLINC; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (TOTXINC=0 & TINCOME > 0 & AFDCINC=0 & NTAXINC=0 & TAXUNIT < 3 & Y1=YY1*10+1) THEN PUT "TOTXINC IS ZERO BUT TINCOME > 0 " YY1= Y1= TOTXINC= TINCOME= WSINCOME= WSINCSP= TBUSINC= INTINC= NTAXINC= DIVINC= RENTINC= UNEMPINC= AFDCINC= GSSINC= PENINC= OTHINC= CAPGLINC= RAGE= SPAGE= FILESTAT= TAXUNIT= X4100= X4700=/; MPRINT(TAXSCF): * Adding in payroll tax liability and mtr, assuming employee pays both employee and employer share, and 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 earning 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 tax year, 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 441 The SAS System 13:32 Friday, January 29, 2021 earners, divide x5702/x5704 50-50 and caculate the payroll liability and mtr. Computing the payroll atr in a similar fashion. NOTE: Need to adjust for different amounts used to compute the mtr, initially computing payroll mtr for adding $1 to earnings.; MPRINT(TAXSCF): * Need to adjust for 1988, 2% credit for SE, in 1991, limit on medicare tax; MPRINT(TAXSCF): ** earnings from wages and businesses for head and spouse/parnter; MPRINT(TAXSCF): REARN=R_LABORINC+R_BUSINC; MPRINT(TAXSCF): SPEARN=SP_LABORINC+SP_BUSINC; MPRINT(TAXSCF): HHEARN=REARN+SPEARN; MPRINT(TAXSCF): TWSINC=WSINCOME+WSINCSP; MPRINT(TAXSCF): PAYROLLIAB=0; MPRINT(TAXSCF): PAYROLLMTR=0; MPRINT(TAXSCF): PAYROLLATR=0; MPRINT(TAXSCF): IF TAXUNIT=0 THEN DO; MPRINT(TAXSCF): IF (X4106 IN(1 2 3 4 -7) & X4706=0) | (X4106=0 & X4706 IN(1 2 3 4 -7)) | (X4106=0 & X4706=0 & X102=0 & (TWSINC > 0 | TBUSINC > 0)) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(65400,(TWSINC+TBUSINC*(TBUSINC >0)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*.029)*(1998 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*.029)*(1998 EQ 1992); MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 65400)*(100*.124))+ (100*.029)*(1998 GE 1995)+ (100*.029)*(1998 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB >0) THEN PAYROLLATR=100*(PAYROLLIAB/(TWSINC+TBUSINC*(TBUSINC > 0))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X4106 IN(1 2 3 4 -7) & X4706 IN(1 2 3 4 -7)) THEN DO; MPRINT(TAXSCF): IF (X4115 >=1 & X4715 >=1 & HHEARN > 0) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(65400,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(REARN/HHEARN))*.029*(1998 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*(REARN/HHEARN))*.029*(1998 EQ 1992)+ MIN(65400,((TWSINC+TBUSINC*(TBUSINC >0))*(SPEARN/HHEARN)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(SPEARN/HHEARN))*.029*(1998 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*(SPEARN/HHEARN))*.029*(1998 EQ 1992); MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(REARN/HHEARN) <= 65400)*(100*.124))+(100*.029)*(1998 GE 1995)+ (100*.029)*(1998 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1)*(REARN/HHEARN) <= 125000); MPRINT(TAXSCF): IF ((MIN(65400,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(REARN/HHEARN))*.029) > 0) THEN PAYROLLATR=100*((MIN(65400,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*.124 + ((1998 GE 1995)*((TWSINC+TBUSINC*(TBUSINC >0))*(REARN/HHEARN))*.029)+ ((1998 EQ 1992)*(MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*(REARN/HHEARN))*.029))/ ((TWSINC+TBUSINC*(TBUSINC > 0))*(REARN/HHEARN))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X4115 =-1 & X4715=-1) | (X4115 >=1 & X4715=-1) | (X4115=-1 & X4715 >=1) | (HHEARN=0) THEN DO; MPRINT(TAXSCF): IF ((TWSINC+TBUSINC*(TBUSINC >0)) <= 65400) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=(TWSINC+TBUSINC*(TBUSINC >0))*.124+ (TWSINC+TBUSINC*(TBUSINC >0))*.029; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((TWSINC+TBUSINC*(TBUSINC >0)) > 65400) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(2*65400,((TWSINC+TBUSINC*(TBUSINC >0))))*.124+ (TWSINC+TBUSINC*(TBUSINC >0))*.029*(1998 GE 1995)+ MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*.029*(1998 EQ 1992); MPRINT(TAXSCF): END; MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(.5) <= 65400)*(100*.124))+(100*.029)*(1998 GE 1995)+ (100*.029)*(1998 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB*.5 > 0) THEN PAYROLLATR=100*((PAYROLLIAB*.5)/((TWSINC+TBUSINC*(TBUSINC >0))*(.5))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X4106=0 & X4706=0 & X102^=0 & (TWSINC > 0 | TBUSINC > 0)) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=2*(MIN(65400,((TWSINC+TBUSINC*(TBUSINC >0))*(.5)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(.5))*.029*(1998 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)*(.5)))*.029)*(1998 EQ 1992)); MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(.5) <= 65400)*(100*.124))+(100*.029)*(1998 GE 1995)+ (100*.029)*(1998 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB*.5 > 0) THEN PAYROLLATR=100*((PAYROLLIAB*.5)/((TWSINC+TBUSINC*(TBUSINC >0))*(.5))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TAXUNIT >= 1 THEN DO; 442 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): IF (WSINCOME > 0 | TBUSINC > 0) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(65400,(WSINCOME+TBUSINC*(TBUSINC >0)))*.124 + ((WSINCOME+TBUSINC*(TBUSINC >0))*.029)*(1998 GE 1995)+ (MIN(125000,(WSINCOME+TBUSINC*(TBUSINC >0)))*.029)*(1998 EQ 1992); MPRINT(TAXSCF): PAYROLLMTR=(((WSINCOME+TBUSINC*(TBUSINC > 0)+1)<=65400)*(100*.124))+ (100*.029)*(1998 GE 1995)+ (100*.029)*(1998 EQ 1992)*((WSINCOME+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB >0) THEN PAYROLLATR=100*(PAYROLLIAB/(WSINCOME+TBUSINC*(TBUSINC > 0))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF PAYROLLIAB=0 & PAYROLLMTR=0 & PAYROLLATR=0 & (TWSINC > 0 | TBUSINC > 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= TWSINC= TBUSINC= R_LABORINC= R_BUSINC= R_SOLEPROP= SP_LABORINC= SP_BUSINC= SP_SOLEPROP= REARN= SPEARN= HHEARN= TAXUNIT=/; MPRINT(TAXSCF): * Check for missing variables; MPRINT(TAXSCF): ARRAY CHVARS {*} YY1 Y1 CHARITYAMT X5823 TOTITEMDCT STDDCT AGI AGICL AGIGE50K DEDCTLIM X7372 X7018 X8023 X105 PERSEXP KIDS TOTEXPT FILESTAT TOTEXPTAMT EXPTLIM RAGE SPAGE TUAGE YEAR STATE TAXUNIT WSINCOME WSINCSP TBUSINC NTAXINC INTINC DIVINC CAPGLINC RENTINC UNEMPINC CHSPALINC AFDCINC PENINC OTHINC GSSINC OTHPINC NONTAX RENT UNADJTOTDEDCT CHCAREXP TINCOME TOTXINC STCAPINC LTCAPINC PAYROLLIAB PAYROLLMTR PAYROLLATR LWP KIDSU17 KIDSU18 KIDSU13; MPRINT(TAXSCF): DO I=1 TO DIM(CHVARS); MPRINT(TAXSCF): IF CHVARS{I}=. THEN PUT "MISSING VALUE FOR " Y1= CHVARS{I}=; MPRINT(TAXSCF): END; MPRINT(TAXSCF): RUN; NOTE: The file "null.txt" is: Filename=/disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code/null.txt, Owner Name=taxsim,Group Name=taxsim, Access Permission=-rw-r--r--, Last Modified=29Jan2021:13:35:36 NOTE: 762 records were written to the file "null.txt". The minimum record length was 0. The maximum record length was 370. NOTE: There were 26389 observations read from the data set WORK.SCF. NOTE: The data set WORK.SCF has 26389 observations and 5480 variables. NOTE: DATA statement used (Total process time): real time 0.76 seconds cpu time 0.76 seconds MPRINT(TAXSCF): * Create a dataset for full TAXSIM. Breaking out total itemized deductions into its parts - have applied the limits for the mortgage interest deduction and investment interest expense, but not for charitable contributions.; MPRINT(TAXSCF): PROC SORT DATA=SCF; MPRINT(TAXSCF): BY TAXUNITID; MPRINT(TAXSCF): RUN; NOTE: There were 26389 observations read from the data set WORK.SCF. NOTE: The data set WORK.SCF has 26389 observations and 5480 variables. NOTE: PROCEDURE SORT used (Total process time): real time 0.48 seconds cpu time 0.49 seconds MPRINT(TAXSCF): proc means; MPRINT(TAXSCF): var y1 yy1 year year; MPRINT(TAXSCF): run; NOTE: There were 26389 observations read from the data set WORK.SCF. NOTE: The PROCEDURE MEANS printed page 817. 443 The SAS System 13:32 Friday, January 29, 2021 NOTE: PROCEDURE MEANS used (Total process time): real time 0.06 seconds cpu time 0.07 seconds MPRINT(TAXSCF): * Rename variables to TAXSIM names, use lowercase for TAXSIM file names; MPRINT(TAXSCF): libname swt "../swt/sas"; NOTE: Libref SWT was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/swt/sas MPRINT(TAXSCF): DATA swt.swt98; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): rep=mod(y1,10); MPRINT(TAXSCF): * IF FILESTAT > 0; MPRINT(TAXSCF): mstat=1*(FILESTAT IN(1 4))+2*(FILESTAT IN(2 5))+6*(FILESTAT IN(3)); MPRINT(TAXSCF): otherprop=RENTINC+TBUSINC; MPRINT(TAXSCF): nonprop=CHSPALINC+OTHINC; MPRINT(TAXSCF): otheritem=TOTINVEX+TOTPINEX; MPRINT(TAXSCF): mortgage=ADJDEDCT+X5823; MPRINT(TAXSCF): scorp=0; MPRINT(TAXSCF): pbusinc=0; MPRINT(TAXSCF): pprofinc=0; MPRINT(TAXSCF): sbusinc=0; MPRINT(TAXSCF): sprofinc=0; MPRINT(TAXSCF): tyear=YEAR; MPRINT(TAXSCF): tstate=STATE; MPRINT(TAXSCF): * set idtl=2 to get detailed output from TAXSIM; MPRINT(TAXSCF): idtl=2; MPRINT(TAXSCF): DROP STATE; MPRINT(TAXSCF): RENAME TAXUNITID=taxsimid TUAGE=page SPAGE=sage KIDS=depx KIDSU13=dep13 KIDSU17=dep17 KIDSU18=dep18 WSINCOME=pwages WSINCSP=swages DIVINC=dividends INTINC=intrec STCAPINC=stcg LTCAPINC=ltcg PENINC=pensions GSSINC=gssi UNEMPINC=ui AFDCINC=transfers RENT=rentpaid RESTAXM1=proptax CHCAREXP=childcare tyear=year; MPRINT(TAXSCF): RUN; WARNING: Variable tyear cannot be renamed to year because year already exists. NOTE: There were 26389 observations read from the data set WORK.SCF. NOTE: The data set SWT.SWT98 has 26389 observations and 5493 variables. NOTE: DATA statement used (Total process time): real time 6.32 seconds cpu time 0.84 seconds MPRINT(TAXSCF): proc means; MPRINT(TAXSCF): var y1 yy1 year; MPRINT(TAXSCF): run; NOTE: There were 26389 observations read from the data set SWT.SWT98. NOTE: The PROCEDURE MEANS printed page 818. NOTE: PROCEDURE MEANS used (Total process time): real time 5.63 seconds cpu time 0.38 seconds MPRINT(TAXSCF): libname taxsim "../txpydata/sas"; NOTE: Libref TAXSIM was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/txpydata/sas MPRINT(TAXSCF): proc contents data=swt.swt98; 444 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): run; NOTE: PROCEDURE CONTENTS used (Total process time): real time 0.01 seconds cpu time 0.01 seconds NOTE: The PROCEDURE CONTENTS printed pages 819-925. MPRINT(TAXSCF): DATA taxsim.txpydata98; MPRINT(TAXSCF): SET swt.swt98(KEEP=taxsimid year mstat page sage depx dep13 dep17 dep18 pwages swages dividends intrec stcg ltcg otherprop nonprop pensions gssi ui transfers rentpaid proptax otheritem childcare mortgage scorp pbusinc pprofinc sbusinc sprofinc Y1 YY1 taxunit rep); MPRINT(TAXSCF): y1=Y1; MPRINT(TAXSCF): yy1=YY1; MPRINT(TAXSCF): RUN; NOTE: There were 26389 observations read from the data set SWT.SWT98. NOTE: The data set TAXSIM.TXPYDATA98 has 26389 observations and 35 variables. NOTE: DATA statement used (Total process time): real time 0.19 seconds cpu time 0.08 seconds MPRINT(TAXSCF): proc contents data=taxsim.txpydata98; MPRINT(TAXSCF): run; NOTE: PROCEDURE CONTENTS used (Total process time): real time 0.00 seconds cpu time 0.00 seconds NOTE: The PROCEDURE CONTENTS printed pages 926-927. 3907 3908 %TAXSCF(SYEAR=1995,TYEAR=1994,WYEAR=1992,ITDLIM1=111800,ITDLIM2=55900,ITDL10=0,EXPAMT=2450, 3909 EXPAMT2=0,EXDL9=0,EXPAGIT1=122500,EXPAGIT2=61250,EXLIM1=111800,EXLIM2=167700, 3910 EXLIM3=83850,EXLIM4=139750,STDAMT1=3800,STDAMT2=4750,STDAMT3=6350,STDAMT4=7100, 3911 STDAMT5=7850,STDAMT6=5600,STDAMT7=6550,FILELIM1=6250,FILELIM2=7200,FILELIM3=11250,FILELIM4=12000, 3912 FILELIM5=12750,FILELIM6=2450,FILELIM7=8050,FILELIM8=9000,FILELIM9=8800,FILELIM10=9550,LCGAGI1=.86, 3913 LCLAGI1=.68,LCGAGI2=.86,LCLAGI2=.63,LCGAGI3=.89,LCLAGI3=.55, MPRINT(TAXSCF): * define libraries for SCF public datasets; 3914 PAYTAX=.124,MEDHI=.029,PTLIM=60600,HTAXFILE=HTAXFILE=&SYSPARM); MPRINT(TAXSCF): LIBNAME SCF95 "../orig/sas7bdat" ACCESS=READONLY; NOTE: Libref SCF95 refers to the same physical library as SCF98. NOTE: Libref SCF95 was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/orig/sas7bdat MPRINT(TAXSCF): * directory for datasets created by the program; MPRINT(TAXSCF): LIBNAME OUT "."; NOTE: Libref OUT was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code MPRINT(TAXSCF): * csv file for TAXSIM v32; MPRINT(TAXSCF): FILENAME SCFTAX "txpydata95.csv"; MPRINT(TAXSCF): * csv from TAXSIM v32; MPRINT(TAXSCF): FILENAME TAXSIM "results95.csv"; MPRINT(TAXSCF): * read in public SCF data, assumes dataset name is pXXiY.sas7bdat; MPRINT(TAXSCF): * NOTE: Any changes to the libname or data set name must also be made in this data step; MPRINT(TAXSCF): DATA MAIN; 445 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): SET SCF95.P95I6; NOTE: Data file SCF95.P95I6.DATA is in a format that is native to another host, or the file encoding does not match the session encoding. Cross Environment Data Access will be used, which might require additional CPU resources and might reduce performance. MPRINT(TAXSCF): RUN; NOTE: There were 21495 observations read from the data set SCF95.P95I6. NOTE: The data set WORK.MAIN has 21495 observations and 4986 variables. NOTE: DATA statement used (Total process time): real time 4.32 seconds cpu time 4.33 seconds MPRINT(TAXSCF): PROC SORT DATA=MAIN; MPRINT(TAXSCF): BY Y1; MPRINT(TAXSCF): RUN; NOTE: There were 21495 observations read from the data set WORK.MAIN. NOTE: The data set WORK.MAIN has 21495 observations and 4986 variables. NOTE: PROCEDURE SORT used (Total process time): real time 0.33 seconds cpu time 0.33 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET MAIN; MPRINT(TAXSCF): file "null.txt"; MPRINT(TAXSCF): WGT=(X42001/5); MPRINT(TAXSCF): POP=1; MPRINT(TAXSCF): * setting STATE variable to zero, set to -1 if you want TAXSIM to compute state tax for all 51 states; MPRINT(TAXSCF): STATE=0; MPRINT(TAXSCF): * Small data fix for one case in 1992; MPRINT(TAXSCF): * Small data fix for one case in 1998; MPRINT(TAXSCF): * Small data fix for one case in 2007; MPRINT(TAXSCF): * Small data fix for one case in 2013; MPRINT(TAXSCF): * Payment frequency on other loans not asked in 1989, assumed to be monthly; MPRINT(TAXSCF): * Only one other income variable after 1992, set to zero for 1992 forward; MPRINT(TAXSCF): X5726=0; MPRINT(TAXSCF): X5727=0; MPRINT(TAXSCF): * Spouse/partner in PEU, need to create X7020 for 1989 to 1998; MPRINT(TAXSCF): IF X107 IN(0 2 5 12) THEN X7020=1; MPRINT(TAXSCF): ELSE IF X107=1 THEN X7020=2; MPRINT(TAXSCF): * A few other recodes to construct variables not asked in 1989 and 1992; MPRINT(TAXSCF): * Number of years with spouse/partner; MPRINT(TAXSCF): IF 1995=X8005 THEN X7370=-1; MPRINT(TAXSCF): ELSE X7370=1995-X8005; MPRINT(TAXSCF): * Number of people in NPEU, need to compute for 1989 to 2004, variable exists for 2007 forward; MPRINT(TAXSCF): X7050=X101-X7001; MPRINT(TAXSCF): * Absent spouse/partner indicator; MPRINT(TAXSCF): IF (X100=5) | (X106=5 & X107 IN(2 5 12)) THEN ABSP_P=1; MPRINT(TAXSCF): ELSE ABSP_P=0; MPRINT(TAXSCF): PERSEXP=1+(X105 IN(1 2))*(ABSP_P=0); MPRINT(TAXSCF): * Including children living elsewhere that are under 18, max of one extra as there is uncertainty about dependent status; MPRINT(TAXSCF): 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) + (X5912 > 0 | X5912=-2); MPRINT(TAXSCF): * For the child tax credit - must be under 17; 446 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): 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) ; MPRINT(TAXSCF): KIDSU18=(X108 IN(4 13))*(X110 < 18) + (X114 IN(4 13))*(X116 < 18) + (X120 IN(4 13))*(X122 < 18) + (X126 IN(4 13))*(X128 < 18) + (X132 IN(4 13))*(X134 < 18) + (X202 IN(4 13))*(X204 < 18) + (X208 IN(4 13))*(X210 < 18) + (X214 IN(4 13))*(X216 < 18) + (X220 IN(4 13))*(X222 < 18) ; MPRINT(TAXSCF): KIDSU13=(X108 IN(4 13))*(X110 < 13) + (X114 IN(4 13))*(X116 < 13) + (X120 IN(4 13))*(X122 < 13) + (X126 IN(4 13))*(X128 < 13) + (X132 IN(4 13))*(X134 < 13) + (X202 IN(4 13))*(X204 < 13) + (X208 IN(4 13))*(X210 < 13) + (X214 IN(4 13))*(X216 < 13) + (X220 IN(4 13))*(X222 < 13) ; MPRINT(TAXSCF): * Indicator for R living with a partner; MPRINT(TAXSCF): LWP=(X8023=2); MPRINT(TAXSCF): RAGE=X14; MPRINT(TAXSCF): * Set spouse/parnter age to zero if absent spouse/partner; MPRINT(TAXSCF): SPAGE=X19*(X7020=2); MPRINT(TAXSCF): * Possible scenarios, not considering NPEU right now, will create those tax units last 1. Married filing jointly households = tax unit 2. Single person households = tax unit 3. Filing separately households = split into two tax units, need to determine if single or married filing separately filing status 4. LWP households = split into two tax units even if one person is a nonfiler For 3. and 4., one of the tax units may have head of household status depending on presence of children For each new tax unit, start with replicate of household data and parse out income, deductions, exemptions; MPRINT(TAXSCF): * Create new observations from married filing separately households or LWP households. 0. Tax unit = household 1. Created tax unit for household head 2. Created tax unit for spouse/parnter 3-8. Created tax unit for NPEU member Note: If R and Sp are legally married for more than one year, treat as married filing joint even if x5746=3,4. If R and Sp LWP and report filing jointly treat as two tax units. If R and Sp married and report filing separately, treat as filing jointly unless either R or Sp has a past marriage. Inspection of the data reveals that too many married couples report filing separately when compared to the IRS data. The past marriage condition put the number closer to the IRS data.; MPRINT(TAXSCF): MARRIED=(X8023=1 & X105=1 & X7370 >= 1 & X7020=2); MPRINT(TAXSCF): IF (X5744 IN(1 6) & X5746=1 & MARRIED=1) | (MARRIED=1 & ((X5744=5 | X5746 IN(3 4)) | (X5746=2 & X7377^=2 & X7392^=2))) | (X8023 > 0 & X105=0 & (X5744=5 | (X5744 IN(1 6) & X5746=0))) | (X8023 > 0 & X105 > 0 & X5744 IN(1 5 6) & X5746=0 & X7020=1) | (X8023=8 & X105=0 & X5744=1 & X5746=1) THEN TAXUNIT=0; MPRINT(TAXSCF): ELSE IF (X5744 IN(1 6) & X5746 IN(2 3 4)) | (X8023 > 0 & X105 > 0 & (X5744=5 | (X5744 IN(1 6) & X5746 IN(0 1)))) | (X8023=1 & X105=1 & X7370=-1 & X5744=1) THEN TAXUNIT=1; MPRINT(TAXSCF): ELSE PUT "MISSING TAXUNIT STATUS " YY1= X5744= X5746= X8023= X105= X7020= MARRIED= X7372= X7018= X7370=; MPRINT(TAXSCF): TUAGE=RAGE; MPRINT(TAXSCF): RUN; NOTE: The file "null.txt" is: Filename=/disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code/null.txt, Owner Name=taxsim,Group Name=taxsim, Access Permission=-rw-r--r--, Last Modified=29Jan2021:13:35:55 NOTE: 0 records were written to the file "null.txt". NOTE: There were 21495 observations read from the data set WORK.MAIN. NOTE: The data set WORK.SCF has 21495 observations and 5005 variables. NOTE: DATA statement used (Total process time): real time 0.43 seconds cpu time 0.44 seconds MPRINT(TAXSCF): DATA NEWUNITS; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): IF TAXUNIT=1; MPRINT(TAXSCF): TAXUNIT=2; MPRINT(TAXSCF): TUAGE=SPAGE; MPRINT(TAXSCF): SPAGE=0; 447 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): RUN; NOTE: There were 21495 observations read from the data set WORK.SCF. NOTE: The data set WORK.NEWUNITS has 1617 observations and 5005 variables. NOTE: DATA statement used (Total process time): real time 0.19 seconds cpu time 0.19 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF NEWUNITS; MPRINT(TAXSCF): RUN; NOTE: There were 21495 observations read from the data set WORK.SCF. NOTE: There were 1617 observations read from the data set WORK.NEWUNITS. NOTE: The data set WORK.SCF has 23112 observations and 5005 variables. NOTE: DATA statement used (Total process time): real time 0.43 seconds cpu time 0.44 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): * Codes for filestat, assigning status even if did not file, will determine non-filer status later, filing status for split tax units done after splitting up income 1= Single 2= Married filing jointly 3= Married filing separately 4= Head of HH 5= Qualified widower; MPRINT(TAXSCF): FILESTAT=0; MPRINT(TAXSCF): IF TAXUNIT=0 THEN DO; MPRINT(TAXSCF): IF (MARRIED=1) THEN FILESTAT=2; MPRINT(TAXSCF): ELSE IF MARRIED=0 THEN DO; MPRINT(TAXSCF): IF PERSEXP=1 & KIDS=0 THEN FILESTAT=1; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS > 0 & X8023=5 & X7372=5 & X8007>=1992 THEN FILESTAT=5; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS > 0 THEN FILESTAT=4; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTEXPT=PERSEXP+KIDS; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * No AGI variables starting in 2010; MPRINT(TAXSCF): * Coding income variables with -1 and -2 to zero; MPRINT(TAXSCF): ARRAY NEG {*} X5704 X5714 X5724 X5726 X5729; MPRINT(TAXSCF): DO I=1 TO DIM(NEG); MPRINT(TAXSCF): IF NEG{I} IN(-2 -1) THEN NEG{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Income from wages and business; MPRINT(TAXSCF): R_LABORINC=MAX(0,X4112) MPRINT(ACONV): *((X4113=2)*52.18+(X4113=3)*26.09+(X4113=4)*12+(X4113=5)*4+(X4113=6)+(X4113=8)+ (X4113=11)*2+(X4113=12)*6+(X4113=31)*24+(X4113=14)+(X4113=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): SP_LABORINC=MAX(0,X4712) MPRINT(ACONV): *((X4713=2)*52.18+(X4713=3)*26.09+(X4713=4)*12+(X4713=5)*4+(X4713=6)+(X4713=8)+ (X4713=11)*2+(X4713=12)*6+(X4713=31)*24+(X4713=14)+(X4713=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): R_BUSINC=MAX(0,X4131) MPRINT(ACONV): *((X4132=2)*52.18+(X4132=3)*26.09+(X4132=4)*12+(X4132=5)*4+(X4132=6)+(X4132=8)+ (X4132=11)*2+(X4132=12)*6+(X4132=31)*24+(X4132=14)+(X4132=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): SP_BUSINC=MAX(0,X4731) MPRINT(ACONV): *((X4732=2)*52.18+(X4732=3)*26.09+(X4732=4)*12+(X4732=5)*4+(X4732=6)+(X4732=8)+ (X4732=11)*2+(X4732=12)*6+(X4732=31)*24+(X4732=14)+(X4732=22)) 448 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ; MPRINT(TAXSCF): * Income from pensions and tax-deferred account withdrawals. No withdrawal information for IRAs or future pensions prior to 2004. No withdrawal information for any tax-deferred accounts, aside from other income, prior to 2001; MPRINT(TAXSCF): R_REGPEN=MAX(0,(X5318 MPRINT(ACONV): *((X5319=2)*52.18+(X5319=3)*26.09+(X5319=4)*12+(X5319=5)*4+(X5319=6)+(X5319=8)+ (X5319=11)*2+(X5319=12)*6+(X5319=31)*24+(X5319=14)+(X5319=22)) MPRINT(TAXSCF): *(X5315=1)*(X5317>=1))) +MAX(0,(X5326 MPRINT(ACONV): *((X5327=2)*52.18+(X5327=3)*26.09+(X5327=4)*12+(X5327=5)*4+(X5327=6)+(X5327=8)+ (X5327=11)*2+(X5327=12)*6+(X5327=31)*24+(X5327=14)+(X5327=22)) MPRINT(TAXSCF): *(X5323=1)*(X5325>=1))) +MAX(0,(X5334 MPRINT(ACONV): *((X5335=2)*52.18+(X5335=3)*26.09+(X5335=4)*12+(X5335=5)*4+(X5335=6)+(X5335=8)+ (X5335=11)*2+(X5335=12)*6+(X5335=31)*24+(X5335=14)+(X5335=22)) MPRINT(TAXSCF): *(X5331=1)*(X5333>=1))) +MAX(0,(X5418 MPRINT(ACONV): *((X5419=2)*52.18+(X5419=3)*26.09+(X5419=4)*12+(X5419=5)*4+(X5419=6)+(X5419=8)+ (X5419=11)*2+(X5419=12)*6+(X5419=31)*24+(X5419=14)+(X5419=22)) MPRINT(TAXSCF): *(X5415=1)*(X5417>=1))) +MAX(0,(X5426 MPRINT(ACONV): *((X5427=2)*52.18+(X5427=3)*26.09+(X5427=4)*12+(X5427=5)*4+(X5427=6)+(X5427=8)+ (X5427=11)*2+(X5427=12)*6+(X5427=31)*24+(X5427=14)+(X5427=22)) MPRINT(TAXSCF): *(X5423=1)*(X5425>=1))) +MAX(0,(X5434 MPRINT(ACONV): *((X5435=2)*52.18+(X5435=3)*26.09+(X5435=4)*12+(X5435=5)*4+(X5435=6)+(X5435=8)+ (X5435=11)*2+(X5435=12)*6+(X5435=31)*24+(X5435=14)+(X5435=22)) MPRINT(TAXSCF): *(X5431=1)*(X5433>=1))); MPRINT(TAXSCF): R_WITHDRAW=(X5724)*(X5725=11)*.5; MPRINT(TAXSCF): SP_REGPEN=MAX(0,(X5318 MPRINT(ACONV): *((X5319=2)*52.18+(X5319=3)*26.09+(X5319=4)*12+(X5319=5)*4+(X5319=6)+(X5319=8)+ (X5319=11)*2+(X5319=12)*6+(X5319=31)*24+(X5319=14)+(X5319=22)) MPRINT(TAXSCF): *(X5315=2)*(X5317>=1))) +MAX(0,(X5326 MPRINT(ACONV): *((X5327=2)*52.18+(X5327=3)*26.09+(X5327=4)*12+(X5327=5)*4+(X5327=6)+(X5327=8)+ (X5327=11)*2+(X5327=12)*6+(X5327=31)*24+(X5327=14)+(X5327=22)) MPRINT(TAXSCF): *(X5323=2)*(X5325>=1))) +MAX(0,(X5334 MPRINT(ACONV): *((X5335=2)*52.18+(X5335=3)*26.09+(X5335=4)*12+(X5335=5)*4+(X5335=6)+(X5335=8)+ (X5335=11)*2+(X5335=12)*6+(X5335=31)*24+(X5335=14)+(X5335=22)) MPRINT(TAXSCF): *(X5331=2)*(X5333>=1))) +MAX(0,(X5418 MPRINT(ACONV): *((X5419=2)*52.18+(X5419=3)*26.09+(X5419=4)*12+(X5419=5)*4+(X5419=6)+(X5419=8)+ (X5419=11)*2+(X5419=12)*6+(X5419=31)*24+(X5419=14)+(X5419=22)) MPRINT(TAXSCF): *(X5415=2)*(X5417>=1))) +MAX(0,(X5426 MPRINT(ACONV): *((X5427=2)*52.18+(X5427=3)*26.09+(X5427=4)*12+(X5427=5)*4+(X5427=6)+(X5427=8)+ (X5427=11)*2+(X5427=12)*6+(X5427=31)*24+(X5427=14)+(X5427=22)) MPRINT(TAXSCF): *(X5423=2)*(X5425>=1))) +MAX(0,(X5434 MPRINT(ACONV): *((X5435=2)*52.18+(X5435=3)*26.09+(X5435=4)*12+(X5435=5)*4+(X5435=6)+(X5435=8)+ (X5435=11)*2+(X5435=12)*6+(X5435=31)*24+(X5435=14)+(X5435=22)) MPRINT(TAXSCF): *(X5431=2)*(X5433>=1))); MPRINT(TAXSCF): SP_WITHDRAW=(X5724)*(X5725=11)*.5; MPRINT(TAXSCF): * For new tax units need to split up income and determine which new tax unit is assigned which deductions and exemptions. Also need to zero out any variables not relevant to the new tax unit (ex. spouses wages); MPRINT(TAXSCF): IF TAXUNIT IN(1 2) THEN DO; MPRINT(TAXSCF): * age; MPRINT(TAXSCF): IF (TAXUNIT=1) THEN SPAGE=0; MPRINT(TAXSCF): * wages; MPRINT(TAXSCF): IF (TAXUNIT=1 & (R_LABORINC+SP_LABORINC>0)) THEN WSINCOME=MAX(0,X5702)*(R_LABORINC/(R_LABORINC+SP_LABORINC))*(R_LABORINC>0); MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & (R_LABORINC+SP_LABORINC>0)) THEN WSINCOME=MAX(0,X5702)*(SP_LABORINC/(R_LABORINC+SP_LABORINC))*(SP_LABORINC>0); MPRINT(TAXSCF): ELSE WSINCOME=MAX(0,X5702)*.5; MPRINT(TAXSCF): WSINCSP=0; MPRINT(TAXSCF): * business income; MPRINT(TAXSCF): R_SOLEPROP=(X4106 IN(2 3 4) | (X3113=1 & X3119=2) | (X3213=1 & X3219=2) | (X3313=1 & X3319=2)); 449 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): SP_SOLEPROP=(X4706 IN(2 3 4) | (X3114=1 & X3119=2) | (X3214=1 & X3219=2) | (X3313=1 & X3319=2)); MPRINT(TAXSCF): IF (TAXUNIT=1 & (R_BUSINC+SP_BUSINC>0) & (R_SOLEPROP=1 | SP_SOLEPROP=1)) THEN DO; MPRINT(TAXSCF): IF (R_SOLEPROP=1 & SP_SOLEPROP=1) THEN TBUSINC=X5704*(R_BUSINC/(R_BUSINC+SP_BUSINC))*(R_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=1 & SP_SOLEPROP=0) THEN TBUSINC=X5704; MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=0 & SP_SOLEPROP=1) THEN TBUSINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & (R_BUSINC+SP_BUSINC>0) & (R_SOLEPROP=1 | SP_SOLEPROP=1)) THEN DO; MPRINT(TAXSCF): IF (R_SOLEPROP=1 & SP_SOLEPROP=1) THEN TBUSINC=X5704*(SP_BUSINC/(R_BUSINC+SP_BUSINC))*(SP_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=0 & SP_SOLEPROP=1) THEN TBUSINC=X5704; MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=1 & SP_SOLEPROP=0) THEN TBUSINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE TBUSINC=X5704*.5; MPRINT(TAXSCF): * interest, dividends, and capital gains - just split 50-50; MPRINT(TAXSCF): NTAXINC= MAX(0,X5706)*.5; MPRINT(TAXSCF): INTINC= MAX(0,X5708)*.5; MPRINT(TAXSCF): DIVINC= MAX(0,X5710)*.5; MPRINT(TAXSCF): IF X5712=-1 THEN CAPGLINC=0; MPRINT(TAXSCF): ELSE CAPGLINC=X5712*.5; MPRINT(TAXSCF): * rent, royalties, partnership and scorp income; MPRINT(TAXSCF): R_PARTNER_SCORP=(X4106 IN(2 3 4) | (X3113=1 & X3119 IN(1 3 6 11 12 15)) | (X3213=1 & X3219 IN(1 3 6 11 12 15))); MPRINT(TAXSCF): SP_PARTNER_SCORP=(X4106 IN(2 3 4) | (X3114=1 & X3119 IN(1 3 6 11 12 15)) | (X3214=1 & X3219 IN(1 3 6 11 12 15))); MPRINT(TAXSCF): IF (TAXUNIT=1 & (R_BUSINC+SP_BUSINC>0) & (R_PARTNER_SCORP=1 | SP_PARTNER_SCORP=1)) THEN DO; MPRINT(TAXSCF): IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=1) THEN RENTINC=X5714*(R_BUSINC/(R_BUSINC+SP_BUSINC))*(R_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=0) THEN RENTINC=X5714; MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=0 & SP_PARTNER_SCORP=1) THEN RENTINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & (R_BUSINC+SP_BUSINC>0) & (R_PARTNER_SCORP=1 | SP_PARTNER_SCORP=1)) THEN DO; MPRINT(TAXSCF): IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=1) THEN RENTINC=X5714*(SP_BUSINC/(R_BUSINC+SP_BUSINC))*(SP_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=0 & SP_PARTNER_SCORP=1) THEN RENTINC=X5714; MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=0) THEN RENTINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE RENTINC=X5714*.5; MPRINT(TAXSCF): * unemployment income, no questions about unemployed in past 12 months prior to 1998; MPRINT(TAXSCF): IF (TAXUNIT=1) THEN DO; MPRINT(TAXSCF): UNEMPINC=MAX(0,X5716)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2) THEN DO; MPRINT(TAXSCF): UNEMPINC=MAX(0,X5716)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * child support and alimony income; MPRINT(TAXSCF): IF (TAXUNIT=1 & X7377=2) THEN DO; MPRINT(TAXSCF): CHSPALINC=MAX(0,X5718)*(X7392^=2)+MAX(0,X5718)*(X7392=2)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & X7392=2) THEN DO; MPRINT(TAXSCF): CHSPALINC=MAX(0,X5718)*(X7377^=2)+MAX(0,X5718)*(X7377=2)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE CHSPALINC=MAX(0,X5718)*.5; MPRINT(TAXSCF): * government transfers, split 50/50; MPRINT(TAXSCF): AFDCINC=MAX(0,X5720)*.5; MPRINT(TAXSCF): * other income, split 50/50 - remove other income that is non-taxable, such as scholarships/grants, inheritances/gifts/, support from family or others, also remove IRA/Keogh income; MPRINT(TAXSCF): * special fix for 1992, removing other income coded 14, repayment of debts, it appears the total amount of the debt was reported, not just the interest on the debt; MPRINT(TAXSCF): OTHINC= (X5724)*(X5725 NOT IN(3 11 12 13 28))*.5+(X5726)*(X5727 NOT IN(3 11 12 13 28))*.5; 450 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): * social security and pension income, adding in withdrawals from IRA/Keogh/401ks; MPRINT(TAXSCF): R_GSSINC=MAX(0,(X5306 MPRINT(ACONV): *((X5307=2)*52.18+(X5307=3)*26.09+(X5307=4)*12+(X5307=5)*4+(X5307=6)+(X5307=8)+ (X5307=11)*2+(X5307=12)*6+(X5307=31)*24+(X5307=14)+(X5307=22)) MPRINT(TAXSCF): *(X5305>=1))); MPRINT(TAXSCF): SP_GSSINC=MAX(0,(X5311 MPRINT(ACONV): *((X5312=2)*52.18+(X5312=3)*26.09+(X5312=4)*12+(X5312=5)*4+(X5312=6)+(X5312=8)+ (X5312=11)*2+(X5312=12)*6+(X5312=31)*24+(X5312=14)+(X5312=22)) MPRINT(TAXSCF): *(X5310>=1))); MPRINT(TAXSCF): T_GSSINC=MAX(0,((X5306 MPRINT(ACONV): *((X5307=2)*52.18+(X5307=3)*26.09+(X5307=4)*12+(X5307=5)*4+(X5307=6)+(X5307=8)+ (X5307=11)*2+(X5307=12)*6+(X5307=31)*24+(X5307=14)+(X5307=22)) MPRINT(TAXSCF): *(X5305>=1))+(X5311 MPRINT(ACONV): *((X5312=2)*52.18+(X5312=3)*26.09+(X5312=4)*12+(X5312=5)*4+(X5312=6)+(X5312=8)+ (X5312=11)*2+(X5312=12)*6+(X5312=31)*24+(X5312=14)+(X5312=22)) MPRINT(TAXSCF): *(X5310>=1)))); MPRINT(TAXSCF): NOSS_X5722=MAX(0,(X5722-T_GSSINC)); MPRINT(TAXSCF): IF (TAXUNIT=1) THEN DO; MPRINT(TAXSCF): IF (R_REGPEN > 0) THEN PENINC=NOSS_X5722*(R_REGPEN/(R_REGPEN+SP_REGPEN))+R_WITHDRAW; MPRINT(TAXSCF): ELSE IF (R_REGPEN=0 & R_WITHDRAW > 0) THEN PENINC=R_WITHDRAW; MPRINT(TAXSCF): ELSE IF (R_REGPEN=0 & R_WITHDRAW=0 & SP_REGPEN > 0) THEN PENINC=0; MPRINT(TAXSCF): ELSE IF (R_REGPEN=0 & R_WITHDRAW=0 & SP_REGPEN=0) THEN PENINC=NOSS_X5722*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2) THEN DO; MPRINT(TAXSCF): IF (SP_REGPEN > 0) THEN PENINC=NOSS_X5722*(SP_REGPEN/(R_REGPEN+SP_REGPEN))+SP_WITHDRAW; MPRINT(TAXSCF): ELSE IF (SP_REGPEN=0 & SP_WITHDRAW > 0) THEN PENINC=SP_WITHDRAW; MPRINT(TAXSCF): ELSE IF (SP_REGPEN=0 & SP_WITHDRAW=0 & R_REGPEN > 0) THEN PENINC=0; MPRINT(TAXSCF): ELSE IF (SP_REGPEN=0 & SP_WITHDRAW=0 & R_REGPEN=0) THEN PENINC=NOSS_X5722*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): GSSINC=MAX(0,R_GSSINC)*(TAXUNIT=1)+MAX(0,SP_GSSINC)*(TAXUNIT=2); MPRINT(TAXSCF): OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; MPRINT(TAXSCF): NONTAX=NTAXINC+AFDCINC; MPRINT(TAXSCF): RENT=MAX(0,(X602 MPRINT(ACONV): *((X603=2)*52.18+(X603=3)*26.09+(X603=4)*12+(X603=5)*4+(X603=6)+(X603=8)+ (X603=11)*2+(X603=12)*6+(X603=31)*24+(X603=14)+(X603=22)) MPRINT(TAXSCF): ),(X612 MPRINT(ACONV): *((X613=2)*52.18+(X613=3)*26.09+(X613=4)*12+(X613=5)*4+(X613=6)+(X613=8)+ (X613=11)*2+(X613=12)*6+(X613=31)*24+(X613=14)+(X613=22)) MPRINT(TAXSCF): ),(X619 MPRINT(ACONV): *((X620=2)*52.18+(X620=3)*26.09+(X620=4)*12+(X620=5)*4+(X620=6)+(X620=8)+ (X620=11)*2+(X620=12)*6+(X620=31)*24+(X620=14)+(X620=22)) MPRINT(TAXSCF): ), (X708 MPRINT(ACONV): *((X709=2)*52.18+(X709=3)*26.09+(X709=4)*12+(X709=5)*4+(X709=6)+(X709=8)+ (X709=11)*2+(X709=12)*6+(X709=31)*24+(X709=14)+(X709=22)) MPRINT(TAXSCF): ))*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TAXUNIT=0 THEN DO; MPRINT(TAXSCF): R_SOLEPROP=(X4106 IN(2 3 4) | (X3113=1 & X3119=2) | (X3213=1 & X3219=2) | (X3313=1 & X3319=2)); MPRINT(TAXSCF): SP_SOLEPROP=(X4706 IN(2 3 4) | (X3114=1 & X3119=2) | (X3214=1 & X3219=2) | (X3313=1 & X3319=2)); MPRINT(TAXSCF): * Split wages across primary and secondary earner for married filing jointly households; MPRINT(TAXSCF): IF FILESTAT^=2 THEN DO; MPRINT(TAXSCF): WSINCOME=MAX(0,X5702); MPRINT(TAXSCF): WSINCSP=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF FILESTAT=2 THEN DO; MPRINT(TAXSCF): IF ((R_LABORINC > 0 & SP_LABORINC=0) | (R_LABORINC=0 & SP_LABORINC > 0) | (R_LABORINC=0 & SP_LABORINC=0)) THEN DO; MPRINT(TAXSCF): WSINCOME=MAX(0,X5702); 451 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): WSINCSP=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (R_LABORINC > 0 & SP_LABORINC > 0) THEN DO; MPRINT(TAXSCF): WSINCOME=MAX(0,X5702)*(R_LABORINC/(R_LABORINC+SP_LABORINC)); MPRINT(TAXSCF): WSINCSP=MAX(0,X5702)*(SP_LABORINC/(R_LABORINC+SP_LABORINC)); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TBUSINC = X5704; MPRINT(TAXSCF): NTAXINC= MAX(0,X5706); MPRINT(TAXSCF): INTINC= MAX(0,X5708); MPRINT(TAXSCF): DIVINC= MAX(0,X5710); MPRINT(TAXSCF): IF X5712=-1 THEN CAPGLINC=0; MPRINT(TAXSCF): ELSE CAPGLINC=X5712; MPRINT(TAXSCF): RENTINC= X5714; MPRINT(TAXSCF): UNEMPINC = MAX(0,X5716); MPRINT(TAXSCF): CHSPALINC=MAX(0,X5718); MPRINT(TAXSCF): AFDCINC = MAX(0,X5720); MPRINT(TAXSCF): * Starting in 2004, IRA/Keogh/401K type income is not reported in other income, instead withdrawals are reported separately during the questions about the assets, so need to add the withdrawals to pension income. There may be a few withdrawals still reported as other income if the asset account was closed or emptied out during the year prior to the survey.; MPRINT(TAXSCF): * also remove other income that is non-taxable, such as scholarships/grants, inheritances/gifts/, support from family or others; MPRINT(TAXSCF): * special fix for 1992, removing other income coded 14, repayment of debts, it appears the total amount of the debt was report, not just the interest on the debt; MPRINT(TAXSCF): OTHINC= (X5724)*(X5725 NOT IN(3 11 12 13 28))+(X5726)*(X5727 NOT IN(3 11 12 13 28)); MPRINT(TAXSCF): GSSINC=MAX(0,((X5306 MPRINT(ACONV): *((X5307=2)*52.18+(X5307=3)*26.09+(X5307=4)*12+(X5307=5)*4+(X5307=6)+(X5307=8)+ (X5307=11)*2+(X5307=12)*6+(X5307=31)*24+(X5307=14)+(X5307=22)) MPRINT(TAXSCF): *(X5305>=1))+(X5311 MPRINT(ACONV): *((X5312=2)*52.18+(X5312=3)*26.09+(X5312=4)*12+(X5312=5)*4+(X5312=6)+(X5312=8)+ (X5312=11)*2+(X5312=12)*6+(X5312=31)*24+(X5312=14)+(X5312=22)) MPRINT(TAXSCF): *(X5310>=1)))); MPRINT(TAXSCF): IF GSSINC=0 THEN PENINC= MAX(0,X5722)+R_WITHDRAW+SP_WITHDRAW; MPRINT(TAXSCF): ELSE IF (GSSINC > 0) THEN PENINC=MAX(0,(X5722-GSSINC)) +R_WITHDRAW+SP_WITHDRAW; MPRINT(TAXSCF): OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; MPRINT(TAXSCF): NONTAX=NTAXINC+AFDCINC; MPRINT(TAXSCF): RENT=MAX(0,(X602 MPRINT(ACONV): *((X603=2)*52.18+(X603=3)*26.09+(X603=4)*12+(X603=5)*4+(X603=6)+(X603=8)+ (X603=11)*2+(X603=12)*6+(X603=31)*24+(X603=14)+(X603=22)) MPRINT(TAXSCF): ),(X612 MPRINT(ACONV): *((X613=2)*52.18+(X613=3)*26.09+(X613=4)*12+(X613=5)*4+(X613=6)+(X613=8)+ (X613=11)*2+(X613=12)*6+(X613=31)*24+(X613=14)+(X613=22)) MPRINT(TAXSCF): ),(X619 MPRINT(ACONV): *((X620=2)*52.18+(X620=3)*26.09+(X620=4)*12+(X620=5)*4+(X620=6)+(X620=8)+ (X620=11)*2+(X620=12)*6+(X620=31)*24+(X620=14)+(X620=22)) MPRINT(TAXSCF): ), (X708 MPRINT(ACONV): *((X709=2)*52.18+(X709=3)*26.09+(X709=4)*12+(X709=5)*4+(X709=6)+(X709=8)+ (X709=11)*2+(X709=12)*6+(X709=31)*24+(X709=14)+(X709=22)) MPRINT(TAXSCF): )); MPRINT(TAXSCF): END; MPRINT(TAXSCF): * AGI - note that starting in 2010, AGI questions no longer asked, so using total income minus non-taxable income plus IRA/401k withdrawals as a proxy. No information on adjustments to AGI; MPRINT(TAXSCF): AGI=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC+UNEMPINC+CHSPALINC+OTHINC+PENINC+GSSINC; MPRINT(TAXSCF): IF AGI=-1 THEN AGI=0; MPRINT(TAXSCF): AGIGE50K=(AGI>=50000); MPRINT(TAXSCF): AGICL=1*(AGI < 50000)+2*(50000 <= AGI < 100000)+3*(AGI >= 100000); MPRINT(TAXSCF): * For allocating itemized deductions - mortgage interest, investment interest expense, property 452 The SAS System 13:32 Friday, January 29, 2021 taxes, and charitable contributions - between new tax units, assume tax unit with higher income assigned all itemized deductions. Creating a flag here for use in computing deductions later in the program. Using wages, business, and pension income as income measure (all other income components are split 50/50 between the new tax units).; MPRINT(TAXSCF): IF (TAXUNIT IN(1 2)) THEN DO; MPRINT(TAXSCF): R_TINCOME=R_LABORINC+R_BUSINC+R_REGPEN+R_WITHDRAW; MPRINT(TAXSCF): SP_TINCOME=SP_LABORINC+SP_BUSINC+SP_REGPEN+SP_WITHDRAW; MPRINT(TAXSCF): ITEMDEDCT_FLAG=(TAXUNIT=1 & R_TINCOME >= SP_TINCOME) +(TAXUNIT=2 & SP_TINCOME > R_TINCOME); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TAXUNIT=0 THEN ITEMDEDCT_FLAG=1; MPRINT(TAXSCF): * Set personal exemption to one for split households, divide kids among split households, if one, give to both tax units, if even number, split evenly between tax units, if odd number, give more to higher income tax unit; MPRINT(TAXSCF): IF TAXUNIT IN(1 2) THEN DO; MPRINT(TAXSCF): PERSEXP=1; MPRINT(TAXSCF): IF KIDS>1 THEN DO; MPRINT(TAXSCF): IF (KIDSU13>0 & MOD(KIDSU13,2)=0) THEN KIDSU13=KIDSU13/2; MPRINT(TAXSCF): ELSE IF (KIDSU13>0 & MOD(KIDSU13,2)^=0) THEN DO; MPRINT(TAXSCF): KIDSU13=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU13/2,1))+ (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU13/2)-.5); MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (KIDSU17>0 & MOD(KIDSU17,2)=0) THEN KIDSU17=KIDSU17/2; MPRINT(TAXSCF): ELSE IF (KIDSU17>0 & MOD(KIDSU17,2)^=0) THEN DO; MPRINT(TAXSCF): KIDSU17=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU17/2,1))+ (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU17/2)-.5); MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (KIDSU18>0 & MOD(KIDSU18,2)=0) THEN KIDSU18=KIDSU18/2; MPRINT(TAXSCF): ELSE IF (KIDSU18>0 & MOD(KIDSU18,2)^=0) THEN DO; MPRINT(TAXSCF): KIDSU18=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU18/2,1))+ (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU18/2)-.5); MPRINT(TAXSCF): END; MPRINT(TAXSCF): KIDS=KIDSU13+KIDSU17+KIDSU18; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF PERSEXP=1 & MARRIED=1 THEN FILESTAT=3; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS=0 & MARRIED=0 THEN FILESTAT=1; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS>0 & MARRIED=0 THEN FILESTAT=4; MPRINT(TAXSCF): TOTEXPT=PERSEXP+KIDS; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF FILESTAT=0 THEN PUT "MISSING FILING STATUS " Y1= X5744= X5746= TAXUNIT= MARRIED= KIDS= PERSEXP=; MPRINT(TAXSCF): RUN; NOTE: There were 23112 observations read from the data set WORK.SCF. NOTE: The data set WORK.SCF has 23112 observations and 5047 variables. NOTE: DATA statement used (Total process time): real time 0.49 seconds cpu time 0.49 seconds MPRINT(TAXSCF): * Create tax units based on NPEU members. If there are multiple NPEU members, need to allocate income, assets, and debt across the members; MPRINT(TAXSCF): DATA TEMP NPEU; MPRINT(TAXSCF): SET SCF(WHERE=(TAXUNIT IN(0 1) & X7050 >=1)); MPRINT(TAXSCF): file "null.txt"; MPRINT(TAXSCF): TAXUNIT=2; MPRINT(TAXSCF): ARRAY NPEUAGE {*} X110 X116 X122 X128 X134 X204 X210 X216 X222; MPRINT(TAXSCF): ARRAY LIVEWITH {*} X112 X118 X124 X130 X136 X206 X212 X218 X224; 453 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ARRAY FINDEP {*} X113 X119 X125 X131 X137 X207 X213 X219 X225; MPRINT(TAXSCF): DO I=1 TO DIM(LIVEWITH); MPRINT(TAXSCF): IF LIVEWITH{I} IN(1 2 3 4) & FINDEP{I} IN(2 3 4 5) THEN DO; MPRINT(TAXSCF): TAXUNIT=TAXUNIT+1; MPRINT(TAXSCF): TUAGE=NPEUAGE{I}; MPRINT(TAXSCF): SPAGE=0; MPRINT(TAXSCF): OUTPUT NPEU; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): RUN; NOTE: The file "null.txt" is: Filename=/disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code/null.txt, Owner Name=taxsim,Group Name=taxsim, Access Permission=-rw-r--r--, Last Modified=29Jan2021:13:35:56 NOTE: 0 records were written to the file "null.txt". NOTE: There were 2445 observations read from the data set WORK.SCF. WHERE TAXUNIT in (0, 1) and (X7050>=1); NOTE: The data set WORK.TEMP has 0 observations and 5047 variables. NOTE: The data set WORK.NPEU has 2875 observations and 5047 variables. NOTE: DATA statement used (Total process time): real time 0.13 seconds cpu time 0.14 seconds MPRINT(TAXSCF): DATA NPEU; MPRINT(TAXSCF): SET NPEU; MPRINT(TAXSCF): ARRAY INCTYPES {*} WSINCOME WSINCSP TBUSINC INTINC NTAXINC DIVINC RENTINC UNEMPINC AFDCINC GSSINC PENINC OTHINC CAPGLINC; MPRINT(TAXSCF): DO I=1 TO DIM(INCTYPES); MPRINT(TAXSCF): INCTYPES{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Allocate NPEU wage income across all NPEU members less than 70 years old. If only other type of income is Social Security, allocate amount across NPEU members age 62 or more. Otherwise, allocate total amount of nonwage income divided by the number of other types of income to each type of income equally to each NPEU member; MPRINT(TAXSCF): NUMU70=(0=62 & X113=5)+(X116>=62 & X119=5)+(X122>=62 & X125=5) +(X128>=62 & X131=5)+(X134>=62 & X137=5)+(X204>=62 & X207=5) +(X210>=62 & X213=5)+(X216>=62 & X219=5)+(X222>=62 & X225=5); MPRINT(TAXSCF): NUMINCTYPES=(X6406=1)+(X6407=1)+(X6408=1)+(X6409=1)+(X6410=1)+(X6411=1) +(X6412=1)+(X6413=1)+(X6414 > 5); MPRINT(TAXSCF): IF (NUMU70 > 0) THEN WSINCOME=(MAX(0,X6403)/NUMU70)*(TUAGE < 70); MPRINT(TAXSCF): ELSE WSINCOME=(MAX(0,X6403)/X7050); MPRINT(TAXSCF): IF (X6415 > 0 & NUMINCTYPES > 0) THEN DO; MPRINT(TAXSCF): IF (NUMGE62 > 0) THEN GSSINC=(X6406=1)*((MAX(0,X6415)/(NUMINCTYPES))/NUMGE62)*(TUAGE>=62); MPRINT(TAXSCF): ELSE GSSINC=(X6406=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): TBUSINC=(X6412=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): INTINC=(X6410=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): DIVINC=(X6411=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): RENTINC=(X6413=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): PENINC=(X6407=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050) +(X6408=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): AFDCINC=(X6409=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): CAPGLINC=(X6414 IN(13))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): UNEMPINC=(X6414 IN(10))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): OTHINC=(X6414 IN(11 12 15))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): END; 454 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; MPRINT(TAXSCF): NONTAX=NTAXINC+AFDCINC; MPRINT(TAXSCF): * All NPEU tax units take the standard deduction, have one personal exemption, and have filing status of single; MPRINT(TAXSCF): ITEMDEDCT_FLAG=0; MPRINT(TAXSCF): PERSEXP=1; MPRINT(TAXSCF): TOTEXPT=1; MPRINT(TAXSCF): KIDS=0; MPRINT(TAXSCF): KIDSU13=0; MPRINT(TAXSCF): KIDSU17=0; MPRINT(TAXSCF): KIDSU18=0; MPRINT(TAXSCF): FILESTAT=1; MPRINT(TAXSCF): AGI=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC+UNEMPINC+CHSPALINC+OTHINC+PENINC+GSSINC; MPRINT(TAXSCF): IF AGI=-1 THEN AGI=0; MPRINT(TAXSCF): AGIGE50K=(AGI>=50000); MPRINT(TAXSCF): AGICL=1*(AGI < 50000)+2*(50000 <= AGI < 100000)+3*(AGI >= 100000); MPRINT(TAXSCF): RUN; NOTE: There were 2875 observations read from the data set WORK.NPEU. NOTE: The data set WORK.NPEU has 2875 observations and 5050 variables. NOTE: DATA statement used (Total process time): real time 0.07 seconds cpu time 0.07 seconds MPRINT(TAXSCF): * Add NPEU tax units; MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF NPEU; MPRINT(TAXSCF): RUN; NOTE: There were 23112 observations read from the data set WORK.SCF. NOTE: There were 2875 observations read from the data set WORK.NPEU. NOTE: The data set WORK.SCF has 25987 observations and 5050 variables. NOTE: DATA statement used (Total process time): real time 0.50 seconds cpu time 0.49 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): ************Itemized deductions; MPRINT(TAXSCF): IF ITEMDEDCT_FLAG=1 THEN DO; MPRINT(TAXSCF): ************Mortgage interest deduction; MPRINT(TAXSCF): * Convert real estate taxes on primary residence into a yearly amount; MPRINT(TAXSCF): RESTAXM1=0; MPRINT(TAXSCF): IF (X721 > 0) THEN DO; MPRINT(TAXSCF): RESTAXM1=X721 MPRINT(ACONV): *((X722=2)*52.18+(X722=3)*26.09+(X722=4)*12+(X722=5)*4+(X722=6)+(X722=8)+ (X722=11)*2+(X722=12)*6+(X722=31)*24+(X722=14)+(X722=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Create arrays for various mortgage loan components; MPRINT(TAXSCF): ARRAY TLMTH {*} TLMTHM1 TLMTHM2 TLMTHM3; MPRINT(TAXSCF): ARRAY CMOPAY {*} CMOPAYM1 CMOPAYM2 CMOPAYM3; MPRINT(TAXSCF): ARRAY PAYLFT {*} PAYLFTM1 PAYLFTM2 PAYLFTM3; MPRINT(TAXSCF): ARRAY AMTOWE {*} AMTOWEM1 AMTOWEM2 AMTOWEM3; MPRINT(TAXSCF): ARRAY AMTOWE_1 {*} AMTOWE_1M1 AMTOWE_1M2 AMTOWE_1M3; MPRINT(TAXSCF): ARRAY AINTDCT {*} AINTDCTM1 AINTDCTM2 AINTDCTM3; 455 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ARRAY LNAGE {*} LNAGEM1 LNAGEM2 LNAGEM3; MPRINT(TAXSCF): ARRAY CURBAL {*} CURBALM1 CURBALM2 CURBALM3; MPRINT(TAXSCF): ARRAY CURBAL_1 {*} CURBAL_1M1 CURBAL_1M2 CURBAL_1M3; MPRINT(TAXSCF): ARRAY CINTDCT {*} CINTDCTM1 CINTDCTM2 CINTDCTM3; MPRINT(TAXSCF): ARRAY DCTDIFF {*} DCTDIFFM1 DCTDIFFM2 DCTDIFFM3; MPRINT(TAXSCF): ARRAY SINTDCT {*} SINTDCTM1 SINTDCTM2 SINTDCTM3; MPRINT(TAXSCF): ARRAY AVINTDCT {*} AVINTDCTM1 AVINTDCTM2 AVINTDCTM3; MPRINT(TAXSCF): ARRAY NMPMT {*} X807 X907 X1007; MPRINT(TAXSCF): ARRAY NMYR {*} X806 X906 X1006; MPRINT(TAXSCF): ARRAY REGPAYF {*} X809 X909 X1009; MPRINT(TAXSCF): ARRAY REGPAY {*} X808 X908 X1008; MPRINT(TAXSCF): ARRAY TYPAYF {*} X814 X914 X1014; MPRINT(TAXSCF): ARRAY TYPAY {*} X813 X913 X1013; MPRINT(TAXSCF): ARRAY LNSTMN {*} X801 X901 X1001; MPRINT(TAXSCF): ARRAY LNSTYR {*} X802 X902 X1002; MPRINT(TAXSCF): ARRAY HBALLN {*} X811 X911 X1011; MPRINT(TAXSCF): ARRAY BALLN {*} X812 X912 X1012; MPRINT(TAXSCF): ARRAY HAVELN {*} X723 X830 X931; MPRINT(TAXSCF): ARRAY AMTBORR {*} X804 X904 X1004; MPRINT(TAXSCF): ARRAY JAMTBORR {*} J804 J904 J1004; MPRINT(TAXSCF): ARRAY AMTOUT {*} X805 X905 X1005; MPRINT(TAXSCF): ARRAY JAMTOUT {*} J805 J905 J1005; MPRINT(TAXSCF): ARRAY INTRATE {*} X816 X916 X1016; MPRINT(TAXSCF): ARRAY ONSCHED {*} X7571 X7570 X7569; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTH); MPRINT(TAXSCF): TLMTH{I}=0; MPRINT(TAXSCF): CMOPAY{I}=0; MPRINT(TAXSCF): PAYLFT{I}=0; MPRINT(TAXSCF): AMTOWE{I}=0; MPRINT(TAXSCF): AMTOWE_1{I}=0; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): LNAGE{I}=0; MPRINT(TAXSCF): CURBAL{I}=0; MPRINT(TAXSCF): CURBAL_1{I}=0; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): DCTDIFF{I}=0; MPRINT(TAXSCF): SINTDCT{I}=0; MPRINT(TAXSCF): AVINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): NUMORT=(X723=1)+(X830=1)+(X931=1); MPRINT(TAXSCF): TOTAMTOUTM=0; MPRINT(TAXSCF): TOTDEDCTM=0; MPRINT(TAXSCF): GRFAMTOUTM=0; MPRINT(TAXSCF): A17AMTOUTM=0; MPRINT(TAXSCF): HAAMTOUTM=0; MPRINT(TAXSCF): DO I=1 TO DIM(NMPMT); MPRINT(TERMCON): IF (NMYR{I}=0 & NMPMT{I}=0) THEN DO; MPRINT(TERMCON): TLMTH{I}=0; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYR{I}^=0|NMPMT{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYR{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYR{I}=-1) THEN DO; MPRINT(TERMCON): TLMTH{I}=NMYR{I}; MPRINT(TERMCON): IF (NMPMT{I}=0) THEN DO; MPRINT(TERMCON): NMPMT{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; 456 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TERMCON): ELSE IF (NMYR{I}>0) THEN DO; MPRINT(TERMCON): TLMTH{I}=NMYR{I}*12; MPRINT(TERMCON): IF (NMPMT{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYF{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMT{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYF{I}=-7) THEN DO; MPRINT(TERMCON): NMPMT{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYF{I}=8) THEN DO; MPRINT(TERMCON): NMPMT{I}=1; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYF{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYF{I}=1) THEN NMPMT{I}=TLMTH{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=2) THEN NMPMT{I}=TLMTH{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=3) THEN NMPMT{I}=TLMTH{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=4) THEN NMPMT{I}=TLMTH{I}; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=5) THEN NMPMT{I}=TLMTH{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=6) THEN NMPMT{I}=TLMTH{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=20) THEN NMPMT{I}=TLMTH{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=21) THEN NMPMT{I}=TLMTH{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=11) THEN NMPMT{I}=TLMTH{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=12) THEN NMPMT{I}=TLMTH{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=23) THEN NMPMT{I}=TLMTH{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=24) THEN NMPMT{I}=TLMTH{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=25) THEN NMPMT{I}=TLMTH{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=31) THEN NMPMT{I}=TLMTH{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=18) THEN NMPMT{I}=TLMTH{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=0) THEN NMPMT{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYF{I}>.Z & REGPAYF{I}^=-1 & REGPAYF{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMT{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTH{I}= REGPAYF{I}= NMPMT{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTH{I}>.Z & TLMTH{I}<-2) THEN DO; MPRINT(MOCONV): NMPMT{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTH{I}= REGPAYF{I}= NMPMT{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTH{I}<=.Z) THEN NMPMT{I}=TLMTH{I}; MPRINT(MOCONV): ELSE IF (TLMTH{I}^=-1 & TLMTH{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYF{I}= TLMTH{I}= "SETTING AMT=."; MPRINT(MOCONV): NMPMT{I}=.; MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMT{I}=-1) THEN DO; MPRINT(TERMCON): TLMTH{I}=-1; MPRINT(TERMCON): IF (NMYR{I}=0) THEN DO; MPRINT(TERMCON): NMYR{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMT{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYF{I}; MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYF{I}>0) THEN PFREQ=TYPAYF{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTH{I}=-7; 457 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; MPRINT(TERMCON): TLMTH{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): IF (NMPMT{I}>0) THEN DO; MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTH{I}=NMPMT{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}))); MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12))); MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTH{I}=NMPMT{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTH{I}=NMPMT{I}*2/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTH{I}=NMPMT{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTH{I}=NMPMT{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTH{I}=NMPMT{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTH{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): TLMTH{I}=NMPMT{I}; MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMT{I}= PFREQ= TLMTH{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMT{I}>.Z & NMPMT{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTH{I}=NMPMT{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMT{I}= PFREQ= TLMTH{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMT{I}=0) THEN TLMTH{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMT{I}<=.Z) THEN TLMTH{I}=NMPMT{I}; MPRINT(IMOCONV): ELSE IF (NMPMT{I}^=-1 & NMPMT{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMT{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTH{I}=.; MPRINT(IMOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTH{I}>0) THEN DO; MPRINT(TERMCON): NMYR{I}=MAX(1,INT(.5+(TLMTH{I}/12))); MPRINT(TERMCON): TLMTH{I}=MAX(1,ROUND(TLMTH{I})); MPRINT(TERMCON): END; MPRINT(TERMCON): IF (NMYR{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMT{I}= NMYR{I}= TLMTH{I}= REGPAYF{I}= REGPAY{I}= TYPAYF{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAY{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYF{I}=1) THEN CMOPAY{I}=REGPAY{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=2) THEN CMOPAY{I}=REGPAY{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=3) THEN CMOPAY{I}=REGPAY{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=4) THEN CMOPAY{I}=REGPAY{I}; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=5) THEN CMOPAY{I}=REGPAY{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=6) THEN CMOPAY{I}=REGPAY{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=20) THEN CMOPAY{I}=REGPAY{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=21) THEN CMOPAY{I}=REGPAY{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=8) THEN CMOPAY{I}=REGPAY{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=11) THEN CMOPAY{I}=REGPAY{I}*(52/52)/6; 458 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (REGPAYF{I}=12) THEN CMOPAY{I}=REGPAY{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=23) THEN CMOPAY{I}=REGPAY{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=24) THEN CMOPAY{I}=REGPAY{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=25) THEN CMOPAY{I}=REGPAY{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=31) THEN CMOPAY{I}=REGPAY{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=18) THEN CMOPAY{I}=REGPAY{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=0) THEN CMOPAY{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYF{I}>.Z & REGPAYF{I}^=-1 & REGPAYF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAY{I}= REGPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAY{I}>.Z & REGPAY{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAY{I}= REGPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAY{I}<=.Z) THEN CMOPAY{I}=REGPAY{I}; MPRINT(MOCONV): ELSE IF (REGPAY{I}^=-1 & REGPAY{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYF{I}= REGPAY{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(MOCONV): IF (TYPAYF{I}=1) THEN CMOPAY{I}=TYPAY{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=2) THEN CMOPAY{I}=TYPAY{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=3) THEN CMOPAY{I}=TYPAY{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=4) THEN CMOPAY{I}=TYPAY{I}; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=5) THEN CMOPAY{I}=TYPAY{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=6) THEN CMOPAY{I}=TYPAY{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=20) THEN CMOPAY{I}=TYPAY{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=21) THEN CMOPAY{I}=TYPAY{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=8) THEN CMOPAY{I}=TYPAY{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=11) THEN CMOPAY{I}=TYPAY{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=12) THEN CMOPAY{I}=TYPAY{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=23) THEN CMOPAY{I}=TYPAY{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=24) THEN CMOPAY{I}=TYPAY{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=25) THEN CMOPAY{I}=TYPAY{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=31) THEN CMOPAY{I}=TYPAY{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=18) THEN CMOPAY{I}=TYPAY{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=0) THEN CMOPAY{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYF{I}>.Z & TYPAYF{I}^=-1 & TYPAYF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAY{I}= TYPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAY{I}>.Z & TYPAY{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAY{I}= TYPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAY{I}<=.Z) THEN CMOPAY{I}=TYPAY{I}; MPRINT(MOCONV): ELSE IF (TYPAY{I}^=-1 & TYPAY{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYF{I}= TYPAY{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF NMYR{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFT{I}=(TLMTH{I}-((1995-LNSTYR{I})*12)); MPRINT(TAXSCF): LNAGE{I}=TLMTH{I}-PAYLFT{I}; 459 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFT{I}=0; MPRINT(TAXSCF): LNAGE{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): file "null.txt"; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((X723=1) & (X810 IN(1 2 3)) & TLMTHM1 > 0 & X816 > 0) THEN DO; MPRINT(TAXSCF): IF (X811=1) THEN DO; MPRINT(MORTPAY): AMOPAYM1=ROUND((MORT((X804),.,((X816/10000)/12),(TLMTHM1))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (CMOPAYM1 > AMOPAYM1) THEN CMOPAYM1=AMOPAYM1; MPRINT(TAXSCF): 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= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X811=2) THEN DO; MPRINT(TAXSCF): IF (X804 > X812) THEN ADJBORR=X804-X812; MPRINT(TAXSCF): ELSE IF (X804 < X812) THEN ADJBORR=X804; MPRINT(TAXSCF): IF ADJBORR > 0 THEN MPRINT(MORTPAY): AMOPAYM1=ROUND((MORT((ADJBORR),.,((X816/10000)/12),(TLMTHM1))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (X804=X812) THEN AMOPAYM1=((X804)*(X816/10000))/12; MPRINT(TAXSCF): IF (CMOPAYM1 > AMOPAYM1) THEN CMOPAYM1=AMOPAYM1; MPRINT(TAXSCF): 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= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * 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); MPRINT(TAXSCF): * NOT INCLUDING LAND CONTRACTS; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELN); MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTDCT{I}=CMOPAY{I}*12; MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELN{I}=1 & HBALLN{I} IN(1 2) & NMYR{I} NOT IN(0 -1 -7) & INTRATE{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & PAYLFT{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAY{I} < AMTBORR{I}*.005) THEN CMOPAY{I}=MAX(REGPAY{I},TYPAY{I}); MPRINT(TAXSCF): 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})); MPRINT(TAXSCF): AMTOWE_1{I}=CMOPAY{I}*((1-1/(1+(INTRATE{I}/10000)/12)**(PAYLFT{I}+12))/ ((INTRATE{I}/10000)/12)) 460 The SAS System 13:32 Friday, January 29, 2021 +(HBALLN{I}=2)*(BALLN{I}/((1+(INTRATE{I}/10000))**(PAYLFT{I}+12))); MPRINT(TAXSCF): IF LNSTYR{I}^=1995 THEN AINTDCT{I}=(CMOPAY{I}*12)-(AMTOWE_1{I}-AMTOWE{I}); MPRINT(TAXSCF): ELSE IF LNSTYR{I}=1995 THEN AINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTH{I} < 0 | CMOPAY{I} < 0 | PAYLFT{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWE{I}=0; MPRINT(TAXSCF): AMTOWE_1{I}=0; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & AMTBORR{I} > 0 & LNAGE{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTDCT{I}=(CMOPAY{I}*12)-(CURBAL_1{I}-CURBAL{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTH{I} < 0 | AMTBORR{I} < 0 | LNAGE{I} < 0) THEN DO; MPRINT(TAXSCF): CURBAL{I}=0; MPRINT(TAXSCF): CURBAL_1{I}=0; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUT{I} > 0 & INTRATE{I} > 0) THEN SINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): ELSE SINTDCT{I}=0; MPRINT(TAXSCF): * 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 the home was not purchased in the survey year. If the home was purchased in the survey year, set deduction to zero.; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & PAYLFT{I}=0) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=CURBAL_1{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): AINTDCT{I}=CINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & LNSTYR{I}=1995 & X720=1995) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): SINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & LNSTYR{I}=1995) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTDCT{I} < 0 | CINTDCT{I} < 0) & CURBAL{I} > 0 & CURBAL_1{I} > 0) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=CURBAL_1{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): AINTDCT{I}=CINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTDCT{I} < 0 | CINTDCT{I} < 0) & (CURBAL{I} <= 0 & CURBAL_1{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCT{I} > 0 & CINTDCT{I} > 0) THEN DCTDIFF{I}=CINTDCT{I}-SINTDCT{I}; MPRINT(TAXSCF): ELSE DCTDIFF{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELN{I}=1 & (NMYR{I} IN(-1 -7) | NMPMT{I} IN(-1 -7)) & AMTOUT{I} > 0 & INTRATE{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; 461 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELN{I}=1 & (INTRATE{I}=-1)) THEN DO; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): SINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest deduction; MPRINT(TAXSCF): IF ((CINTDCT{I} + AINTDCT{I} + SINTDCT{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTDCT{I}=(CINTDCT{I}+AINTDCT{I}+SINTDCT{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTDCT{I}=0; MPRINT(TAXSCF): * Constraining interest deduction amount to be no more than the reported year 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.; MPRINT(TAXSCF): IF (HAVELN{I}=1 & AVINTDCT{I} > 0 & CMOPAY{I} > 0 & (AVINTDCT{I} > CMOPAY{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTDCT{I}=CMOPAY{I}*12; MPRINT(TAXSCF): CINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): SINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELN{I}=1 & AVINTDCT{I} > 0 & AMTOUT{I} > 0 & (AVINTDCT{I} > .25*AMTOUT{I})) THEN DO; MPRINT(TAXSCF): AVINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): CINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELN{I}=1 & Y1=YY1*10+1 & AVINTDCT{I}=0 & NMYR{I}^=1995) 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}= /; MPRINT(TAXSCF): * 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; MPRINT(TAXSCF): IF (X702=1 & X714=1 & X7135=5) THEN DO; MPRINT(TAXSCF): TOTDEDCTM=TOTDEDCTM+(AVINTDCT{I}/X715)*(HAVELN{I}=1); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE TOTDEDCTM=TOTDEDCTM+AVINTDCT{I}; MPRINT(TAXSCF): * Total amount outstanding on loans; MPRINT(TAXSCF): TOTAMTOUTM=TOTAMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): * Need to divide mortgages up by date, pre 10/13/87 mortgages are considered grandfathered debt by IRS, and different limits apply to mortgages taken out after 12/15/2017; MPRINT(TAXSCF): IF ((LNSTYR{I}=1987 & LNSTMN{I} < 10) | (LNSTYR{I} < 1987)) THEN DO; MPRINT(TAXSCF): GRFAMTOUTM=GRFAMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((LNSTYR{I}=2017 & LNSTMN{I}=12) | (LNSTYR{I} > 2017)) THEN DO; MPRINT(TAXSCF): A17AMTOUTM=A17AMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((LNSTYR{I}=1987 & LNSTMN {I} >= 10) | (1987 < LNSTYR{I} < 2017) | (LNSTYR{I}=2017 & LNSTMN{I}<=11)) THEN DO; MPRINT(TAXSCF): HAAMTOUTM=HAAMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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, 3, or 4 as home acquisition debt (same as a mortgage, counts toward mortgage balance limit), while HELOCs with other use codes counted as home equity debt. Ignoring the mopup as we dont know if that LOC is secured by a home; MPRINT(TAXSCF): ARRAY CMOPAYL {*} CMOPAYL1 CMOPAYL2 CMOPAYL3; MPRINT(TAXSCF): ARRAY SINTDCTL {*} SINTDCTL1 SINTDCTL2 SINTDCTL3; 462 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ARRAY AQDBT {*} AQDBTL1 AQDBTL2 AQDBTL3; MPRINT(TAXSCF): ARRAY AQINT {*} AQINTL1 AQINTL2 AQINTL3; MPRINT(TAXSCF): ARRAY EQDBT {*} EQDBTL1 EQDBTL2 EQDBTL3; MPRINT(TAXSCF): ARRAY SBYHOME {*} X1103 X1114 X1125; MPRINT(TAXSCF): ARRAY DOOWE {*} X1105 X1116 X1127; MPRINT(TAXSCF): ARRAY LNPURP {*} X1106 X1117 X1128; MPRINT(TAXSCF): ARRAY AMTOUTL {*} X1108 X1119 X1130; MPRINT(TAXSCF): ARRAY TYPAYL {*} X1109 X1120 X1131; MPRINT(TAXSCF): ARRAY TYPAYLF {*} X1110 X1121 X1132; MPRINT(TAXSCF): ARRAY INTRATEL {*} X1111 X1122 X1133; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): TOTAQDBTL=0; MPRINT(TAXSCF): TOTEQDBTL=0; MPRINT(TAXSCF): TOTDEDCTL=0; MPRINT(TAXSCF): TOTAQDEDCTL=0; MPRINT(TAXSCF): TOTLOCINVEX=0; MPRINT(TAXSCF): DO I=1 TO DIM(CMOPAYL); MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): AQDBT{I}=0; MPRINT(TAXSCF): AQINT{I}=0; MPRINT(TAXSCF): EQDBT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (X1101=1) THEN DO; MPRINT(TAXSCF): DO I=1 TO DIM(SBYHOME); MPRINT(TAXSCF): IF (SBYHOME{I}=1 & DOOWE{I}=1) THEN DO; MPRINT(TAXSCF): IF (TYPAYL{I} > 0) THEN DO; MPRINT(MOCONV): IF (TYPAYLF{I}=1) THEN CMOPAYL{I}=TYPAYL{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=2) THEN CMOPAYL{I}=TYPAYL{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=3) THEN CMOPAYL{I}=TYPAYL{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=4) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=5) THEN CMOPAYL{I}=TYPAYL{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=6) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=20) THEN CMOPAYL{I}=TYPAYL{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=21) THEN CMOPAYL{I}=TYPAYL{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=8) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=11) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=12) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=23) THEN CMOPAYL{I}=TYPAYL{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=24) THEN CMOPAYL{I}=TYPAYL{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=25) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=31) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=18) THEN CMOPAYL{I}=TYPAYL{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=0) THEN CMOPAYL{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}>.Z & TYPAYLF{I}^=-1 & TYPAYLF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}>.Z & TYPAYL{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}<=.Z) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYL{I}^=-1 & TYPAYL{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYLF{I}= TYPAYL{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; 463 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TYPAYL{I} IN(0 -1 -2)) THEN DO; MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (INTRATEL{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=((INTRATEL{I}/10000)*AMTOUTL{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEL{I} IN(0 -1)) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTL{I} > 0 & CMOPAYL{I} > 0 & SINTDCTL{I} > CMOPAYL{I}*12) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=CMOPAYL{I}*12; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (LNPURP{I} IN(1 3 4)) THEN DO; MPRINT(TAXSCF): AQDBT{I}=AMTOUTL{I}; MPRINT(TAXSCF): AQINT{I}=SINTDCTL{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (LNPURP{I} NOT IN(1 3 4)) THEN DO; MPRINT(TAXSCF): EQDBT{I}=AMTOUTL{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTDEDCTL=TOTDEDCTL+SINTDCTL{I}; MPRINT(TAXSCF): TOTAQDEDCTL=TOTAQDEDCTL+AQINT{I}; MPRINT(TAXSCF): TOTAQDBTL=TOTAQDBTL+AQDBT{I}; MPRINT(TAXSCF): TOTEQDBTL=TOTEQDBTL+EQDBT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * Dropped third column of grid for 2010 forward; MPRINT(TAXSCF): * Create arrays for various other property loan components; MPRINT(TAXSCF): ARRAY TLMTHO {*} TLMTHO1 TLMTHO2 TLMTHO3; MPRINT(TAXSCF): ARRAY CMOPAYO {*} CMOPAYO1 CMOPAYO2 CMOPAYO3; MPRINT(TAXSCF): ARRAY AMOPAYO {*} AMOPAYO1 AMOPAYO2 AMOPAYO3; MPRINT(TAXSCF): ARRAY PAYLFTO {*} PAYLFTO1 PAYLFTO2 PAYLFTO3; MPRINT(TAXSCF): ARRAY AMTOWEO {*} AMTOWEO1 AMTOWEO2 AMTOWEO3; MPRINT(TAXSCF): ARRAY AMTOWE_1O {*} AMTOWE_1O1 AMTOWE_1O2 AMTOWE_1O3; MPRINT(TAXSCF): ARRAY AINTDCTO {*} AINTDCTO1 AINTDCTO2 AINTDCTO3; MPRINT(TAXSCF): ARRAY LNAGEO {*} LNAGEO1 LNAGEO2 LNAGEO3; MPRINT(TAXSCF): ARRAY CURBALO {*} CURBALO1 CURBALO2 CURBALO3; MPRINT(TAXSCF): ARRAY CURBAL_1O {*} CURBAL_1O1 CURBAL_1O2 CURBAL_1O3; MPRINT(TAXSCF): ARRAY CINTDCTO {*} CINTDCTO1 CINTDCTO2 CINTDCTO3; MPRINT(TAXSCF): ARRAY DCTDIFFO {*} DCTDIFFO1 DCTDIFFO2 DCTDIFFO3; MPRINT(TAXSCF): ARRAY SINTDCTO {*} SINTDCTO1 SINTDCTO2 SINTDCTO3; MPRINT(TAXSCF): ARRAY AVINTDCTO {*} AVINTDCTO1 AVINTDCTO2 AVINTDCTO3; MPRINT(TAXSCF): ARRAY QUALPROP {*} QPROP1 QPROP2 QPROP3; MPRINT(TAXSCF): ARRAY QUALPINV {*} QPINV1 QPINV2 QPINV3; MPRINT(TAXSCF): ARRAY ADJBORRO {*} ADJBORRO1 ADJBORRO2 ADJBORRO3; MPRINT(TAXSCF): ARRAY NMPMTO {*} X1717 X1817 X1917; MPRINT(TAXSCF): ARRAY NMYRO {*} X1716 X1816 X1916; MPRINT(TAXSCF): ARRAY REGPAYFO {*} X1719 X1819 X1919; MPRINT(TAXSCF): ARRAY REGPAYO {*} X1718 X1818 X1918; MPRINT(TAXSCF): ARRAY TYPAYFO {*} X1724 X1824 X1924; MPRINT(TAXSCF): ARRAY TYPAYO {*} X1723 X1823 X1923; MPRINT(TAXSCF): ARRAY LNSTMNO {*} X1712 X1812 X1912; MPRINT(TAXSCF): ARRAY LNSTYRO {*} X1713 X1813 X1913; MPRINT(TAXSCF): ARRAY HBALLNO {*} X1721 X1821 X1921; MPRINT(TAXSCF): ARRAY BALLNO {*} X1722 X1822 X1922; 464 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ARRAY AMTBORRO {*} X1714 X1814 X1914; MPRINT(TAXSCF): ARRAY JAMTBORRO {*} J1714 J1814 J1914; MPRINT(TAXSCF): ARRAY AMTOUTO {*} X1715 X1815 X1915; MPRINT(TAXSCF): ARRAY JAMTOUTO {*} J1715 J1815 J1915; MPRINT(TAXSCF): ARRAY HAVELNO {*} X1711 X1811 X1911; MPRINT(TAXSCF): ARRAY INTRATEO {*} X1726 X1826 X1926; MPRINT(TAXSCF): ARRAY ONSCHEDO {*} X7554 X7553 X7552; MPRINT(TAXSCF): ARRAY HINCOMEO {*} X1729 X1829 X1929; MPRINT(TAXSCF): ARRAY INCOMEO {*} X1730 X1830 X1930; MPRINT(TAXSCF): ARRAY PROPTYPE {*} X1703 X1803 X1903; MPRINT(TAXSCF): ARRAY PERPROP {*} X1705 X1805 X1905; MPRINT(TAXSCF): ARRAY PROPVAL {*} X1706 X1806 X1906; MPRINT(TAXSCF): ARRAY TAXINS {*} X1720 X1820 X1920; MPRINT(TAXSCF): ARRAY PURCHYRO {*} X1708 X1808 X1908; MPRINT(TAXSCF): ARRAY LIMFLAG {*} LIMFL1 LIMFL2 LIMFL3; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTHO); MPRINT(TAXSCF): TLMTHO{I}=0; MPRINT(TAXSCF): CMOPAYO{I}=0; MPRINT(TAXSCF): PAYLFTO{I}=0; MPRINT(TAXSCF): AMTOWEO{I}=0; MPRINT(TAXSCF): AMTOWE_1O{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): LNAGEO{I}=0; MPRINT(TAXSCF): CURBALO{I}=0; MPRINT(TAXSCF): CURBAL_1O{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): DCTDIFFO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): AVINTDCTO{I}=0; MPRINT(TAXSCF): QUALPROP{I}=0; MPRINT(TAXSCF): QUALPINV{I}=0; MPRINT(TAXSCF): ADJBORRO{I}=0; MPRINT(TAXSCF): LIMFLAG{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTAMTOUTO=0; MPRINT(TAXSCF): TOTDEDCTO=0; MPRINT(TAXSCF): QUALOTHPROP=0; MPRINT(TAXSCF): QUALINVPROP=0; MPRINT(TAXSCF): TOTINVPDCT=0; MPRINT(TAXSCF): FMVOP=0; MPRINT(TAXSCF): DO I=1 TO DIM(NMPMTO); MPRINT(TERMCON): IF (NMYRO{I}=0 & NMPMTO{I}=0) THEN DO; MPRINT(TERMCON): TLMTHO{I}=0; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRO{I}^=0|NMPMTO{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRO{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRO{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHO{I}=NMYRO{I}; MPRINT(TERMCON): IF (NMPMTO{I}=0) THEN DO; MPRINT(TERMCON): NMPMTO{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRO{I}>0) THEN DO; MPRINT(TERMCON): TLMTHO{I}=NMYRO{I}*12; MPRINT(TERMCON): IF (NMPMTO{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYFO{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMTO{I}=-7; 465 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFO{I}=-7) THEN DO; MPRINT(TERMCON): NMPMTO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFO{I}=8) THEN DO; MPRINT(TERMCON): NMPMTO{I}=1; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFO{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYFO{I}=1) THEN NMPMTO{I}=TLMTHO{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=2) THEN NMPMTO{I}=TLMTHO{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=3) THEN NMPMTO{I}=TLMTHO{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=4) THEN NMPMTO{I}=TLMTHO{I}; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=5) THEN NMPMTO{I}=TLMTHO{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=6) THEN NMPMTO{I}=TLMTHO{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=20) THEN NMPMTO{I}=TLMTHO{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=21) THEN NMPMTO{I}=TLMTHO{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=11) THEN NMPMTO{I}=TLMTHO{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=12) THEN NMPMTO{I}=TLMTHO{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=23) THEN NMPMTO{I}=TLMTHO{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=24) THEN NMPMTO{I}=TLMTHO{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=25) THEN NMPMTO{I}=TLMTHO{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=31) THEN NMPMTO{I}=TLMTHO{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=18) THEN NMPMTO{I}=TLMTHO{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=0) THEN NMPMTO{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}>.Z & REGPAYFO{I}^=-1 & REGPAYFO{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMTO{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTHO{I}= REGPAYFO{I}= NMPMTO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHO{I}>.Z & TLMTHO{I}<-2) THEN DO; MPRINT(MOCONV): NMPMTO{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTHO{I}= REGPAYFO{I}= NMPMTO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHO{I}<=.Z) THEN NMPMTO{I}=TLMTHO{I}; MPRINT(MOCONV): ELSE IF (TLMTHO{I}^=-1 & TLMTHO{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFO{I}= TLMTHO{I}= "SETTING AMT=."; MPRINT(MOCONV): NMPMTO{I}=.; MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTO{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHO{I}=-1; MPRINT(TERMCON): IF (NMYRO{I}=0) THEN DO; MPRINT(TERMCON): NMYRO{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTO{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYFO{I}; MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYFO{I}>0) THEN PFREQ=TYPAYFO{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTHO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; MPRINT(TERMCON): TLMTHO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; 466 The SAS System 13:32 Friday, January 29, 2021 MPRINT(IMOCONV): IF (NMPMTO{I}>0) THEN DO; MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTHO{I}=NMPMTO{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}))); MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12))); MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTHO{I}=NMPMTO{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTHO{I}=NMPMTO{I}*2/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTHO{I}=NMPMTO{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTHO{I}=NMPMTO{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTHO{I}=NMPMTO{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTHO{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): TLMTHO{I}=NMPMTO{I}; MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMTO{I}= PFREQ= TLMTHO{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}>.Z & NMPMTO{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTHO{I}=NMPMTO{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMTO{I}= PFREQ= TLMTHO{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}=0) THEN TLMTHO{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}<=.Z) THEN TLMTHO{I}=NMPMTO{I}; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}^=-1 & NMPMTO{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMTO{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTHO{I}=.; MPRINT(IMOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTHO{I}>0) THEN DO; MPRINT(TERMCON): NMYRO{I}=MAX(1,INT(.5+(TLMTHO{I}/12))); MPRINT(TERMCON): TLMTHO{I}=MAX(1,ROUND(TLMTHO{I})); MPRINT(TERMCON): END; MPRINT(TERMCON): IF (NMYRO{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMTO{I}= NMYRO{I}= TLMTHO{I}= REGPAYFO{I}= REGPAYO{I}= TYPAYFO{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAYO{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYFO{I}=1) THEN CMOPAYO{I}=REGPAYO{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=2) THEN CMOPAYO{I}=REGPAYO{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=3) THEN CMOPAYO{I}=REGPAYO{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=4) THEN CMOPAYO{I}=REGPAYO{I}; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=5) THEN CMOPAYO{I}=REGPAYO{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=6) THEN CMOPAYO{I}=REGPAYO{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=20) THEN CMOPAYO{I}=REGPAYO{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=21) THEN CMOPAYO{I}=REGPAYO{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=8) THEN CMOPAYO{I}=REGPAYO{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=11) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=12) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=23) THEN CMOPAYO{I}=REGPAYO{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=24) THEN CMOPAYO{I}=REGPAYO{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=25) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)/24; 467 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=31) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=18) THEN CMOPAYO{I}=REGPAYO{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=0) THEN CMOPAYO{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}>.Z & REGPAYFO{I}^=-1 & REGPAYFO{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAYO{I}= REGPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYO{I}>.Z & REGPAYO{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAYO{I}= REGPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYO{I}<=.Z) THEN CMOPAYO{I}=REGPAYO{I}; MPRINT(MOCONV): ELSE IF (REGPAYO{I}^=-1 & REGPAYO{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFO{I}= REGPAYO{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(MOCONV): IF (TYPAYFO{I}=1) THEN CMOPAYO{I}=TYPAYO{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=2) THEN CMOPAYO{I}=TYPAYO{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=3) THEN CMOPAYO{I}=TYPAYO{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=4) THEN CMOPAYO{I}=TYPAYO{I}; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=5) THEN CMOPAYO{I}=TYPAYO{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=6) THEN CMOPAYO{I}=TYPAYO{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=20) THEN CMOPAYO{I}=TYPAYO{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=21) THEN CMOPAYO{I}=TYPAYO{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=8) THEN CMOPAYO{I}=TYPAYO{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=11) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=12) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=23) THEN CMOPAYO{I}=TYPAYO{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=24) THEN CMOPAYO{I}=TYPAYO{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=25) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=31) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=18) THEN CMOPAYO{I}=TYPAYO{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=0) THEN CMOPAYO{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}>.Z & TYPAYFO{I}^=-1 & TYPAYFO{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYO{I}= TYPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYO{I}>.Z & TYPAYO{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYO{I}= TYPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYO{I}<=.Z) THEN CMOPAYO{I}=TYPAYO{I}; MPRINT(MOCONV): ELSE IF (TYPAYO{I}^=-1 & TYPAYO{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYFO{I}= TYPAYO{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF NMYRO{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFTO{I}=(TLMTHO{I}-((1995-LNSTYRO{I})*12)); MPRINT(TAXSCF): LNAGEO{I}=TLMTHO{I}-PAYLFTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFTO{I}=0; MPRINT(TAXSCF): LNAGEO{I}=0; 468 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNO); MPRINT(TAXSCF): IF ((HAVELNO{I}=1) & (TAXINS{I} IN(1 2 3)) & TLMTHO{I} > 0 & INTRATEO{I} > 0) THEN DO; MPRINT(TAXSCF): IF (HBALLNO{I}=1) THEN DO; MPRINT(MORTPAY): AMOPAYO{I}=ROUND((MORT((AMTBORRO{I}),.,((INTRATEO{I}/10000)/12),(TLMTHO{I}))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (CMOPAYO{I} > AMOPAYO{I}) THEN CMOPAYO{I}=AMOPAYO{I}; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HBALLNO{I}=5) THEN DO; MPRINT(TAXSCF): IF (AMTBORRO{I} > BALLNO{I}) THEN ADJBORRO{I}=(AMTBORRO{I}-BALLNO{I}); MPRINT(TAXSCF): ELSE IF (AMTBORRO{I} < BALLNO{I}) THEN ADJBORRO{I}=AMTBORRO{I}; MPRINT(TAXSCF): IF ADJBORRO{I} > 0 THEN MPRINT(MORTPAY): AMOPAYO{I}=ROUND((MORT((ADJBORRO{I}),.,((INTRATEO{I}/10000)/12),(TLMTHO{I}))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (AMTBORRO{I}=BALLNO{I}) THEN AMOPAYO{I}=((AMTBORRO{I})*(INTRATEO{I}/10000))/12; MPRINT(TAXSCF): IF (CMOPAYO{I} > AMOPAYO{I}) THEN CMOPAYO{I}=AMOPAYO{I}; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * 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); MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNO); MPRINT(TAXSCF): IF (PROPTYPE{I} IN(12 13 14 21 22 25 40 49 999) & (HINCOMEO{I}=5 | INCOMEO{I}=-1)) | (PROPTYPE{I} IN(12 13 14 21 22 25 40 49 999) & HINCOMEO{I}=1 & INCOMEO{I} < (CMOPAYO{I}*12)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified properties; MPRINT(TAXSCF): QUALPROP{I}=(HAVELNO{I}=1); MPRINT(TAXSCF): QUALOTHPROP=QUALOTHPROP+QUALPROP{I}; MPRINT(TAXSCF): FMVOP=FMVOP+PROPVAL{I}*(HAVELNO{I}=1); MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & HBALLNO{I} IN(1 5) & NMYRO{I} NOT IN(0 -1 -7) & INTRATEO{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAYO{I} < AMTBORRO{I}*.005) THEN CMOPAYO{I}=MAX(REGPAYO{I},TYPAYO{I}); 469 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): 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})); MPRINT(TAXSCF): 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))); MPRINT(TAXSCF): IF LNSTYRO{I}^=1995 THEN AINTDCTO{I}=(CMOPAYO{I}*12)-(AMTOWE_1O{I}-AMTOWEO{I}); MPRINT(TAXSCF): ELSE IF LNSTYRO{I}=1995 THEN AINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | CMOPAYO{I} < 0 | PAYLFTO{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEO{I}=0; MPRINT(TAXSCF): AMTOWE_1O{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & AMTBORRO{I} > 0 & LNAGEO{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTDCTO{I}=(CMOPAYO{I}*12)-(CURBAL_1O{I}-CURBALO{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | AMTBORRO{I} < 0 | LNAGEO{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALO{I}=0; MPRINT(TAXSCF): CURBAL_1O{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): ELSE SINTDCTO{I}=0; MPRINT(TAXSCF): * 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 the home was not purchased in the survey year. If the home was purchased in the survey year, set deduction to zero.; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I}=0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=1995 & PURCHYRO{I}=1995) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=1995) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & CURBALO{I} > 0 & CURBAL_1O{I} > 0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & (CURBALO{I} <= 0 & CURBAL_1O{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTO{I} > 0 & CINTDCTO{I} > 0) THEN DCTDIFFO{I}=CINTDCTO{I}-SINTDCTO{I}; MPRINT(TAXSCF): ELSE DCTDIFFO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (NMYRO{I} IN(-1 -7) & NMPMTO{I} IN(-1 -7)) & AMTOUTO{I} > 0 & INTRATEO{I} > 470 The SAS System 13:32 Friday, January 29, 2021 0) THEN DO; MPRINT(TAXSCF): SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (INTRATEO{I}=-1)) THEN DO; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest deduction; MPRINT(TAXSCF): IF ((CINTDCTO{I} + AINTDCTO{I} + SINTDCTO{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=(CINTDCTO{I}+AINTDCTO{I}+SINTDCTO{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTDCTO{I}=0; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & CMOPAYO{I} > 0 & (AVINTDCTO{I} > CMOPAYO{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): SINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & AMTOUTO{I} > 0 & (AVINTDCTO{I} > .25*AMTOUTO{I})) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): * Compute total deduction and total amount outstanding; MPRINT(TAXSCF): TOTDEDCTO=TOTDEDCTO+((AVINTDCTO{I})*PERPROP{I}/10000)*(HAVELNO{I}=1); MPRINT(TAXSCF): TOTAMTOUTO=TOTAMTOUTO+AMTOUTO{I}; MPRINT(TAXSCF): * Create flag for loans after 12/15/17, used in computing limits on mortgage interest deduction for home acquistion debt; MPRINT(TAXSCF): LIMFLAG{I}=(LNSTYRO{I}> 2017 | (LNSTYRO{I}=2017 & LNSTMNO{I}=12)); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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 hhs are rational and report the home/properties with the biggest deductions.; MPRINT(TAXSCF): ADJDEDCTO=0; MPRINT(TAXSCF): ADJAMTOUTO=0; MPRINT(TAXSCF): ADJ17AMTOUTO=0; MPRINT(TAXSCF): FMVOTHPROP=0; MPRINT(TAXSCF): IF (QUALOTHPROP > 0) THEN DO; MPRINT(TAXSCF): IF (QUALOTHPROP=1 & QPROP1=1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=1 & QPROP2=1) THEN DO; 471 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=1 & QPROP3=1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO3; MPRINT(TAXSCF): ADJ17AMTOUTO=X1915*(LIMFL3=1); MPRINT(TAXSCF): ADJAMTOUTO=X1915*(LIMFL3=0); MPRINT(TAXSCF): FMVOTHPROP=X1906*(X1905/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=2) THEN DO; MPRINT(TAXSCF): IF (QPROP1=1 & QPROP2=1) THEN DO; MPRINT(TAXSCF): IF (AVINTDCTO1 >= AVINTDCTO2) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO2 >= AVINTDCTO1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QPROP1=1 & QPROP3=1) THEN DO; MPRINT(TAXSCF): IF (AVINTDCTO1 >= AVINTDCTO3) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO3 >= AVINTDCTO1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO3; MPRINT(TAXSCF): ADJ17AMTOUTO=X1915*(LIMFL3=1); MPRINT(TAXSCF): ADJAMTOUTO=X1915*(LIMFL3=0); MPRINT(TAXSCF): FMVOTHPROP=X1906*(X1905/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QPROP2=1 & QPROP3=1) THEN DO; MPRINT(TAXSCF): IF (AVINTDCTO2 >= AVINTDCTO3) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO3 >= AVINTDCTO2) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO3; MPRINT(TAXSCF): ADJ17AMTOUTO=X1915*(LIMFL3=1); MPRINT(TAXSCF): ADJAMTOUTO=X1915*(LIMFL3=0); MPRINT(TAXSCF): FMVOTHPROP=X1906*(X1905/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=3) THEN DO; MPRINT(TAXSCF): IF (AVINTDCTO1 >= AVINTDCTO2 & AVINTDCTO1 >= AVINTDCTO3) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; 472 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO2 >= AVINTDCTO1 & AVINTDCTO2 >= AVINTDCTO3) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO3 >= AVINTDCTO1 & AVINTDCTO3 >= AVINTDCTO2) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO3; MPRINT(TAXSCF): ADJ17AMTOUTO=X1915*(LIMFL3=1); MPRINT(TAXSCF): ADJAMTOUTO=X1915*(LIMFL3=0); MPRINT(TAXSCF): FMVOTHPROP=X1906*(X1905/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (X701=-7 & X7133=1) THEN DO; MPRINT(TAXSCF): HOUSE=(X7134/10000)*X716; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE HOUSE=SUM(0,X604,X614,X623,X716,(X513+X526)); MPRINT(TAXSCF): IF (TOTEQDBTL > 0 & GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL+TOTEQDBTL > (HOUSE)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) > 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=MIN((HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL)),TOTEQDBTL,100000); MPRINT(TAXSCF): ADJDEDCTL=TOTDEDCTL*(ADJEQDBTL/TOTEQDBTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) <= 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=0; MPRINT(TAXSCF): ADJDEDCTL=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((FILESTAT=3) & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) > 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=MIN((HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL)),TOTEQDBTL,50000); MPRINT(TAXSCF): ADJDEDCTL=TOTDEDCTL*(ADJEQDBTL/TOTEQDBTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((FILESTAT=3) & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) <= 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=0; MPRINT(TAXSCF): ADJDEDCTL=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TOTEQDBTL ^=. & TOTDEDCTL ^=.) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=TOTEQDBTL; MPRINT(TAXSCF): ADJDEDCTL=TOTDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TOTEQDBTL > 0 & GRFAMTOUTM+A17AMTOUTM+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= /; MPRINT(TAXSCF): * 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), worksheet changed in 2018; MPRINT(TAXSCF): ADJDEDCT=0; MPRINT(TAXSCF): * case 1 - grandfathered debt, no home acquisition debt, maybe home equity; MPRINT(TAXSCF): IF (GRFAMTOUTM > 0 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & ADJEQDBTL <= 100000) THEN DO; 473 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & ADJEQDBTL > 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+100000)/(GRFAMTOUTM+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & ADJEQDBTL <= 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & ADJEQDBTL > 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+50000)/(GRFAMTOUTM+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * case 2 - some grandfathered debt, some home acquisition debt, maybe home equity; MPRINT(TAXSCF): ELSE IF (GRFAMTOUTM > 0 & (HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & (ADJEQDBTL=0 | ADJEQDBTL <= 100000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & ADJEQDBTL > 100000 & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+100000) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (ADJEQDBTL <= 100000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+ADJEQDBTL),(1000000+ADJEQDBTL))) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (ADJEQDBTL > 100000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+100000),1100000))/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (ADJEQDBTL=0 | ADJEQDBTL <= 50000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & ADJEQDBTL > 50000 & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+50000) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (ADJEQDBTL=0 | ADJEQDBTL <= 50000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+ADJEQDBTL),(500000+ADJEQDBTL))) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; 474 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (ADJEQDBTL=0 | ADJEQDBTL > 50000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+50000),550000))/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * case 3 - no grandfathered debt, maybe home acquisition, maybe home equity; MPRINT(TAXSCF): ELSE IF (GRFAMTOUTM=0 & (HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | ADJEQDBTL > 0)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 0 & ADJEQDBTL <= 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((100000)/ADJEQDBTL)*ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL <= 1000000) & ADJEQDBTL <= 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL <= 1000000) & ADJEQDBTL > 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+100000)/ (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL > 1000000) & (ADJEQDBTL <= 100000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((1000000+ADJEQDBTL)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL > 1000000) & (ADJEQDBTL > 100000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((1100000)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 0 & ADJEQDBTL <= 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((50000)/ADJEQDBTL)*ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000) & ADJEQDBTL <= 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000) & ADJEQDBTL > 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+50000)/ (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000) & (ADJEQDBTL <= 50000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((500000+ADJEQDBTL)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); 475 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000) & (ADJEQDBTL > 50000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((550000)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * a few obs will come out here, but they either have -1 as the interest rate or are land contracts; MPRINT(TAXSCF): IF ((GRFAMTOUTM > 0 | HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | (ADJEQDBTL*(1995 LE 2016)) > 0 | A17AMTOUTM > 0 & ADJ17AMTOUTO > 0) & ADJDEDCT=0 & X5744 IN(1 5 6) & Y1=YY1*10+1 & X720^=1995) THEN PUT "MORTGAGE DEDUCTION SHOULD NOT BE ZERO " Y1= X5744= X5746= GRFAMTOUTM= HAAMTOUTM= ADJAMTOUTO= TOTAQDBTL= ADJEQDBTL= A17AMTOUTM= ADJ17AMTOUTO= TOTDEDCTM= ADJDEDCTO= ADJDEDCTL= OVERLIM= QUALOTHPROP= CINTDCTM1= CINTDCTM2= CINTDCTM3= CINTDCTO1= CINTDCTO2= X702= X714= X7135= X723=/; MPRINT(TAXSCF): IF ((GRFAMTOUTM > 0 | HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | ADJEQDBTL > 0 | A17AMTOUTM > 0 & ADJ17AMTOUTO > 0) & OVERLIM=. & Y1=YY1*10+1) THEN PUT "OVER LIMIT INDICATOR MISSING " Y1= X5744= X5746= GRFAMTOUTM= HAAMTOUTM= ADJAMTOUTO= TOTAQDBTL= ADJEQDBTL= A17AMTOUTM= ADJ17AMTOUTO= TOTDEDCTM= ADJDEDCTO= ADJDEDCTL= OVERLIM= ADJDEDCT=/; MPRINT(TAXSCF): IF ADJDEDCT >= 100000 & Y1=YY1*10+1 THEN PUT "HUGE MORTGAGE INTEREST DEDUCTION " Y1= TOTDEDCTM= GRFAMTOUTM= HAAMTOUTM= TOTAQDBTL= ADJDEDCTL= ADJEQDBTL= ADJDEDCTO= ADJAMTOUTO= A17AMTOUTM= ADJ17AMTOUTO= HOUSE= QUALOTHPROP= FMVOTHPROP= X5744= X5746= ADJDEDCT= /; MPRINT(TAXSCF): ************Real estate taxes; MPRINT(TAXSCF): * TAXSIM doesnt want local property taxes in amount of itemized deductions, listed as a separate variable; MPRINT(TAXSCF): * 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; MPRINT(TAXSCF): PROPTXRATE=0; MPRINT(TAXSCF): IF (HOUSE > 0 & RESTAXM1 > 0) THEN PROPTXRATE=(RESTAXM1/HOUSE)*100; MPRINT(TAXSCF): IF (PROPTXRATE > 10 & Y1=YY1*10+1) THEN PUT "HIGH PROPERTY TAX RATE " Y1= HOUSE= RESTAXM1= X721= J721= X722= J722= X501= X601= X701= PROPTXRATE=/; MPRINT(TAXSCF): IF (PROPTXRATE > 10 & X722=4) THEN RESTAXM1=X721; MPRINT(TAXSCF): ************Investment interest expense; MPRINT(TAXSCF): * 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 need to add up dividend/interest income. Capital gains 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.; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * LOCs - only counting loans not secured by the residence and with asset or real estate investment as loan purpose.; MPRINT(TAXSCF): IF (X1101=1) THEN DO; MPRINT(TAXSCF): DO I=1 TO DIM(SBYHOME); MPRINT(TAXSCF): IF (SBYHOME{I}=5 & DOOWE{I}=1 & LNPURP{I} IN(76 78 79)) THEN DO; MPRINT(TAXSCF): IF (TYPAYL{I} > 0) THEN DO; MPRINT(MOCONV): IF (TYPAYLF{I}=1) THEN CMOPAYL{I}=TYPAYL{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=2) THEN CMOPAYL{I}=TYPAYL{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=3) THEN CMOPAYL{I}=TYPAYL{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=4) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=5) THEN CMOPAYL{I}=TYPAYL{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=6) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=20) THEN CMOPAYL{I}=TYPAYL{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=21) THEN CMOPAYL{I}=TYPAYL{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=8) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=11) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=12) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=23) THEN CMOPAYL{I}=TYPAYL{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=24) THEN CMOPAYL{I}=TYPAYL{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=25) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=31) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)*2; 476 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=18) THEN CMOPAYL{I}=TYPAYL{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=0) THEN CMOPAYL{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}>.Z & TYPAYLF{I}^=-1 & TYPAYLF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}>.Z & TYPAYL{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}<=.Z) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYL{I}^=-1 & TYPAYL{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYLF{I}= TYPAYL{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TYPAYL{I} IN(0 -1 -2)) THEN DO; MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (INTRATEL{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=((INTRATEL{I}/10000)*AMTOUTL{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEL{I} IN(0 -1)) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTL{I} > 0 & CMOPAYL{I} > 0 & SINTDCTL{I} > CMOPAYL{I}*12) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=CMOPAYL{I}*12; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTLOCINVEX=TOTLOCINVEX+SINTDCTL{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Other properties - only counting properties held for investment purposes, and hh must receive income from the property.; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNO); MPRINT(TAXSCF): IF (PROPTYPE{I} IN(41 42 43 44 45 46 47 48) & (INCOMEO{I} > 0)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified properties; MPRINT(TAXSCF): QUALPINV{I}=(HAVELNO{I}=1); MPRINT(TAXSCF): QUALINVPROP=QUALINVPROP+QUALPINV{I}; MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & HBALLNO{I} IN(1 5) & NMYRO{I} NOT IN(0 -1 -7) & INTRATEO{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAYO{I} < AMTBORRO{I}*.005) THEN CMOPAYO{I}=MAX(REGPAYO{I},TYPAYO{I}); MPRINT(TAXSCF): 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})); MPRINT(TAXSCF): 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))); MPRINT(TAXSCF): IF LNSTYRO{I}^=1995 THEN AINTDCTO{I}=(CMOPAYO{I}*12)-(AMTOWE_1O{I}-AMTOWEO{I}); MPRINT(TAXSCF): ELSE IF LNSTYRO{I}=1995 THEN AINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | CMOPAYO{I} < 0 | PAYLFTO{I} < 0) THEN DO; 477 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): AMTOWEO{I}=0; MPRINT(TAXSCF): AMTOWE_1O{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & AMTBORRO{I} > 0 & LNAGEO{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTDCTO{I}=(CMOPAYO{I}*12)-(CURBAL_1O{I}-CURBALO{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | AMTBORRO{I} < 0 | LNAGEO{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALO{I}=0; MPRINT(TAXSCF): CURBAL_1O{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): ELSE SINTDCTO{I}=0; MPRINT(TAXSCF): * 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 the home was not purchased in the survey year. If the home was purchased in the survey year, set deduction to zero.; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I}=0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=1995 & PURCHYRO{I}=1995) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=1995) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & CURBALO{I} > 0 & CURBAL_1O{I} > 0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & (CURBALO{I} <= 0 & CURBAL_1O{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTO{I} > 0 & CINTDCTO{I} > 0) THEN DCTDIFFO{I}=CINTDCTO{I}-SINTDCTO{I}; MPRINT(TAXSCF): ELSE DCTDIFFO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (NMYRO{I} IN(-1 -7) & NMPMTO{I} IN(-1 -7)) & AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (INTRATEO{I}=-1)) THEN DO; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; 478 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest deduction; MPRINT(TAXSCF): IF ((CINTDCTO{I} + AINTDCTO{I} + SINTDCTO{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=(CINTDCTO{I}+AINTDCTO{I}+SINTDCTO{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTDCTO{I}=0; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & CMOPAYO{I} > 0 & (AVINTDCTO{I} > CMOPAYO{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): SINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & AMTOUTO{I} > 0 & (AVINTDCTO{I} > .25*AMTOUTO{I})) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): * Compute total investment interest expense; MPRINT(TAXSCF): TOTINVPDCT=TOTINVPDCT+((AVINTDCTO{I})*PERPROP{I}/10000)*(HAVELNO{I}=1); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Other loans - only counting loans for (non-business) investment purposes; MPRINT(TAXSCF): ARRAY TLMTHI {*} TLMTHI1 TLMTHI2 TLMTHI3 TLMTHI4 TLMTHI5 TLMTHI6; MPRINT(TAXSCF): ARRAY CMOPAYI {*} CMOPAYI1 CMOPAYI2 CMOPAYI3 CMOPAYI4 CMOPAYI5 CMOPAYI6; MPRINT(TAXSCF): ARRAY PAYLFTI {*} PAYLFTI1 PAYLFTI2 PAYLFTI3 PAYLFTI4 PAYLFTI5 PAYLFTI6; MPRINT(TAXSCF): ARRAY AMTOWEI {*} AMTOWEI1 AMTOWEI2 AMTOWEI3 AMTOWEI4 AMTOWEI5 AMTOWEI6; MPRINT(TAXSCF): ARRAY AMTOWE_1I {*} AMTOWE_1I1 AMTOWE_1I2 AMTOWE_1I3 AMTOWE_1I4 AMTOWE_1I5 AMTOWE_1I6; MPRINT(TAXSCF): ARRAY AINTEXPI {*} AINTEXPI1 AINTEXPI2 AINTEXPI3 AINTEXPI4 AINTEXPI5 AINTEXPI6; MPRINT(TAXSCF): ARRAY LNAGEI {*} LNAGEI1 LNAGEI2 LNAGEI3 LNAGEI4 LNAGEI5 LNAGEI6; MPRINT(TAXSCF): ARRAY CURBALI {*} CURBALI1 CURBALI2 CURBALI3 URBALI4 CURBALI5 CURBALI6; MPRINT(TAXSCF): ARRAY CURBAL_1I {*} CURBAL_1I1 CURBAL_1I2 CURBAL_1I3 CURBAL_1I4 CURBAL_1I5 CURBAL_1I6; MPRINT(TAXSCF): ARRAY CINTEXPI {*} CINTEXPI1 CINTEXPI2 CINTEXPI3 CINTEXPI4 CINTEXPI5 CINTEXPI6; MPRINT(TAXSCF): ARRAY DCTDIFFI {*} DCTDIFFI1 DCTDIFFI2 DCTDIFFI3 DCTDIFFI4 DCTDIFFI5 DCTDIFFI6; MPRINT(TAXSCF): ARRAY SINTEXPI {*} SINTEXPI1 SINTEXPI2 SINTEXPI3 SINTEXPI4 SINTEXPI5 SINTEXPI6; MPRINT(TAXSCF): ARRAY AVINTEXPI {*} AVINTEXPI1 AVINTEXPI2 AVINTEXPI3 AVINTEXPI4 AVINTEXPI5 AVINTEXPI6; MPRINT(TAXSCF): ARRAY QUALN {*} QLN1 QLN2 QLN3 QLN4 QLN5 QLN6; MPRINT(TAXSCF): ARRAY NMPMTI {*} X2716 X2733 X2816 X2833 X2916 X2933; MPRINT(TAXSCF): ARRAY NMYRI {*} X2717 X2734 X2817 X2834 X2917 X2934; MPRINT(TAXSCF): ARRAY REGPAYFI {*} X7527 X7526 X7525 X7524 X7523 X7522; MPRINT(TAXSCF): ARRAY REGPAYI {*} X2718 X2735 X2818 X2835 X2918 X2935; MPRINT(TAXSCF): ARRAY TYPAYFI {*} X2720 X2737 X2820 X2837 X2920 X2937; MPRINT(TAXSCF): ARRAY TYPAYI {*} X2719 X2736 X2819 X2836 X2919 X2936; MPRINT(TAXSCF): ARRAY LNSTYRI {*} X2713 X2730 X2813 X2830 X2913 X2930; MPRINT(TAXSCF): ARRAY AMTBORRI {*} X2714 X2731 X2814 X2831 X2914 X2931; MPRINT(TAXSCF): ARRAY JAMTBORRI {*} J2714 J2731 J2814 J2831 J2914 J2931; MPRINT(TAXSCF): ARRAY AMTOUTI {*} X2723 X2740 X2823 X2840 X2923 X2940; MPRINT(TAXSCF): ARRAY JAMTOUTI {*} J2723 J2740 J2823 J2840 J2923 J2940; MPRINT(TAXSCF): ARRAY INTRATEI {*} X2724 X2741 X2824 X2841 X2924 X2941; MPRINT(TAXSCF): ARRAY ONSCHEDI {*} X7521 X7520 X7519 X7518 X7517 X7516; 479 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ; MPRINT(TAXSCF): ARRAY LNTYPE {*} X2710 X2727 X2810 X2827 X2910 X2927; MPRINT(TAXSCF): ARRAY BUSLN {*} X6842 X6843 X6844 X6845 X6846 X6847; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTHI); MPRINT(TAXSCF): TLMTHI{I}=0; MPRINT(TAXSCF): CMOPAYI{I}=0; MPRINT(TAXSCF): PAYLFTI{I}=0; MPRINT(TAXSCF): AMTOWEI{I}=0; MPRINT(TAXSCF): AMTOWE_1I{I}=0; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): LNAGEI{I}=0; MPRINT(TAXSCF): CURBALI{I}=0; MPRINT(TAXSCF): CURBAL_1I{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): DCTDIFFI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; MPRINT(TAXSCF): AVINTEXPI{I}=0; MPRINT(TAXSCF): QUALN{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTLNINVEX=0; MPRINT(TAXSCF): QUALOANINV=0; MPRINT(TAXSCF): DO I=1 TO DIM(NMPMTI); MPRINT(TERMCON): IF (NMYRI{I}=0 & NMPMTI{I}=0) THEN DO; MPRINT(TERMCON): TLMTHI{I}=0; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRI{I}^=0|NMPMTI{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRI{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRI{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHI{I}=NMYRI{I}; MPRINT(TERMCON): IF (NMPMTI{I}=0) THEN DO; MPRINT(TERMCON): NMPMTI{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRI{I}>0) THEN DO; MPRINT(TERMCON): TLMTHI{I}=NMYRI{I}*12; MPRINT(TERMCON): IF (NMPMTI{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYFI{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMTI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFI{I}=-7) THEN DO; MPRINT(TERMCON): NMPMTI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFI{I}=8) THEN DO; MPRINT(TERMCON): NMPMTI{I}=1; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFI{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYFI{I}=1) THEN NMPMTI{I}=TLMTHI{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=2) THEN NMPMTI{I}=TLMTHI{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=3) THEN NMPMTI{I}=TLMTHI{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=4) THEN NMPMTI{I}=TLMTHI{I}; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=5) THEN NMPMTI{I}=TLMTHI{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=6) THEN NMPMTI{I}=TLMTHI{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=20) THEN NMPMTI{I}=TLMTHI{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=21) THEN NMPMTI{I}=TLMTHI{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=11) THEN NMPMTI{I}=TLMTHI{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=12) THEN NMPMTI{I}=TLMTHI{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=23) THEN NMPMTI{I}=TLMTHI{I}*13/12; 480 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=24) THEN NMPMTI{I}=TLMTHI{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=25) THEN NMPMTI{I}=TLMTHI{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=31) THEN NMPMTI{I}=TLMTHI{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=18) THEN NMPMTI{I}=TLMTHI{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=0) THEN NMPMTI{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}>.Z & REGPAYFI{I}^=-1 & REGPAYFI{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMTI{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTHI{I}= REGPAYFI{I}= NMPMTI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHI{I}>.Z & TLMTHI{I}<-2) THEN DO; MPRINT(MOCONV): NMPMTI{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTHI{I}= REGPAYFI{I}= NMPMTI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHI{I}<=.Z) THEN NMPMTI{I}=TLMTHI{I}; MPRINT(MOCONV): ELSE IF (TLMTHI{I}^=-1 & TLMTHI{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFI{I}= TLMTHI{I}= "SETTING AMT=."; MPRINT(MOCONV): NMPMTI{I}=.; MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTI{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHI{I}=-1; MPRINT(TERMCON): IF (NMYRI{I}=0) THEN DO; MPRINT(TERMCON): NMYRI{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTI{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYFI{I}; MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYFI{I}>0) THEN PFREQ=TYPAYFI{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTHI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; MPRINT(TERMCON): TLMTHI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): IF (NMPMTI{I}>0) THEN DO; MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTHI{I}=NMPMTI{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}))); MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12))); MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTHI{I}=NMPMTI{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTHI{I}=NMPMTI{I}*2/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTHI{I}=NMPMTI{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTHI{I}=NMPMTI{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTHI{I}=NMPMTI{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTHI{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): TLMTHI{I}=NMPMTI{I}; MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMTI{I}= PFREQ= TLMTHI{I}=; MPRINT(IMOCONV): END; 481 The SAS System 13:32 Friday, January 29, 2021 MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}>.Z & NMPMTI{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTHI{I}=NMPMTI{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMTI{I}= PFREQ= TLMTHI{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}=0) THEN TLMTHI{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}<=.Z) THEN TLMTHI{I}=NMPMTI{I}; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}^=-1 & NMPMTI{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMTI{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTHI{I}=.; MPRINT(IMOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTHI{I}>0) THEN DO; MPRINT(TERMCON): NMYRI{I}=MAX(1,INT(.5+(TLMTHI{I}/12))); MPRINT(TERMCON): TLMTHI{I}=MAX(1,ROUND(TLMTHI{I})); MPRINT(TERMCON): END; MPRINT(TERMCON): IF (NMYRI{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMTI{I}= NMYRI{I}= TLMTHI{I}= REGPAYFI{I}= REGPAYI{I}= TYPAYFI{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAYI{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYFI{I}=1) THEN CMOPAYI{I}=REGPAYI{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=2) THEN CMOPAYI{I}=REGPAYI{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=3) THEN CMOPAYI{I}=REGPAYI{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=4) THEN CMOPAYI{I}=REGPAYI{I}; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=5) THEN CMOPAYI{I}=REGPAYI{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=6) THEN CMOPAYI{I}=REGPAYI{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=20) THEN CMOPAYI{I}=REGPAYI{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=21) THEN CMOPAYI{I}=REGPAYI{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=8) THEN CMOPAYI{I}=REGPAYI{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=11) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=12) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=23) THEN CMOPAYI{I}=REGPAYI{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=24) THEN CMOPAYI{I}=REGPAYI{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=25) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=31) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=18) THEN CMOPAYI{I}=REGPAYI{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=0) THEN CMOPAYI{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}>.Z & REGPAYFI{I}^=-1 & REGPAYFI{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAYI{I}= REGPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYI{I}>.Z & REGPAYI{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAYI{I}= REGPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYI{I}<=.Z) THEN CMOPAYI{I}=REGPAYI{I}; MPRINT(MOCONV): ELSE IF (REGPAYI{I}^=-1 & REGPAYI{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFI{I}= REGPAYI{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; 482 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): IF (TYPAYFI{I}=1) THEN CMOPAYI{I}=TYPAYI{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=2) THEN CMOPAYI{I}=TYPAYI{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=3) THEN CMOPAYI{I}=TYPAYI{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=4) THEN CMOPAYI{I}=TYPAYI{I}; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=5) THEN CMOPAYI{I}=TYPAYI{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=6) THEN CMOPAYI{I}=TYPAYI{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=20) THEN CMOPAYI{I}=TYPAYI{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=21) THEN CMOPAYI{I}=TYPAYI{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=8) THEN CMOPAYI{I}=TYPAYI{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=11) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=12) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=23) THEN CMOPAYI{I}=TYPAYI{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=24) THEN CMOPAYI{I}=TYPAYI{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=25) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=31) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=18) THEN CMOPAYI{I}=TYPAYI{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=0) THEN CMOPAYI{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}>.Z & TYPAYFI{I}^=-1 & TYPAYFI{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYI{I}= TYPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYI{I}>.Z & TYPAYI{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYI{I}= TYPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYI{I}<=.Z) THEN CMOPAYI{I}=TYPAYI{I}; MPRINT(MOCONV): ELSE IF (TYPAYI{I}^=-1 & TYPAYI{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYFI{I}= TYPAYI{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF NMYRI{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFTI{I}=(TLMTHI{I}-((1995-LNSTYRI{I})*12)); MPRINT(TAXSCF): LNAGEI{I}=TLMTHI{I}-PAYLFTI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFTI{I}=0; MPRINT(TAXSCF): LNAGEI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): DO I=1 TO MIN(6,X2709); MPRINT(TAXSCF): IF (LNTYPE{I} IN(76 78 79) & BUSLN{I} IN(0 5 8)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified loans; MPRINT(TAXSCF): QUALN{I}=1; MPRINT(TAXSCF): QUALOANINV=QUALOANINV+QUALN{I}; MPRINT(TAXSCF): IF (NMYRI{I} NOT IN(0 -1 -7) & INTRATEI{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & PAYLFTI{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAYI{I} < AMTBORRI{I}*.005) THEN CMOPAYI{I}=MAX(REGPAYI{I},TYPAYI{I}); MPRINT(TAXSCF): AMTOWEI{I}=CMOPAYI{I}*((1-1/(1+(INTRATEI{I}/10000)/12)**PAYLFTI{I})/ ((INTRATEI{I}/10000)/12)); MPRINT(TAXSCF): AMTOWE_1I{I}=CMOPAYI{I}*((1-1/(1+(INTRATEI{I}/10000)/12)**(PAYLFTI{I}+12))/ ((INTRATEI{I}/10000)/12)); MPRINT(TAXSCF): IF LNSTYRI{I}^=1995 THEN AINTEXPI{I}=(CMOPAYI{I}*12)-(AMTOWE_1I{I}-AMTOWEI{I}); MPRINT(TAXSCF): ELSE IF LNSTYRI{I}=1995 THEN AINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHI{I} < 0 | CMOPAYI{I} < 0 | PAYLFTI{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEI{I}=0; MPRINT(TAXSCF): AMTOWE_1I{I}=0; 483 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & AMTBORRI{I} > 0 & LNAGEI{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTEXPI{I}=(CMOPAYI{I}*12)-(CURBAL_1I{I}-CURBALI{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHI{I} < 0 | AMTBORRI{I} < 0 | LNAGEI{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALI{I}=0; MPRINT(TAXSCF): CURBAL_1I{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUTI{I} > 0 & INTRATEI{I} > 0) THEN SINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): ELSE SINTEXPI{I}=0; MPRINT(TAXSCF): * 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, set the interest expense to zero.; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & PAYLFTI{I}=0) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=CURBAL_1I{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=CINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & LNSTYRI{I}=1995) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTEXPI{I} < 0 | CINTEXPI{I} < 0) & CURBALI{I} > 0 & CURBAL_1I{I} > 0) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=CURBAL_1I{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=CINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTEXPI{I} < 0 | CINTEXPI{I} < 0) & (CURBALI{I} <= 0 & CURBAL_1I{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTEXPI{I} > 0 & CINTEXPI{I} > 0) THEN DCTDIFFI{I}=CINTEXPI{I}-SINTEXPI{I}; MPRINT(TAXSCF): ELSE DCTDIFFI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): CINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEI{I}=-1) THEN DO; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest expense; MPRINT(TAXSCF): IF ((CINTEXPI{I} + AINTEXPI{I} + SINTEXPI{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=(CINTEXPI{I}+AINTEXPI{I}+SINTEXPI{I})/3; 484 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTEXPI{I}=0; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (AVINTEXPI{I} > 0 & CMOPAYI{I} > 0 & (AVINTEXPI{I} > CMOPAYI{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=CMOPAYI{I}*12; MPRINT(TAXSCF): CINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): SINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AVINTEXPI{I} > 0 & AMTOUTI{I} > 0 & (AVINTEXPI{I} > .25*AMTOUTI{I})) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): CINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): * Compute loan investment interest expense; MPRINT(TAXSCF): TOTLNINVEX=TOTLNINVEX+AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Total investment interest expense, if investment interest expense is greater than interest/dividend income, then expense is limited to income amount; MPRINT(TAXSCF): TOTINTINC=X5708+X5710; MPRINT(TAXSCF): TOTINVEX=0; MPRINT(TAXSCF): TOTINVEX=TOTLOCINVEX+TOTINVPDCT+TOTLNINVEX; MPRINT(TAXSCF): IF TOTINVEX > 0 THEN HINVEX=1; MPRINT(TAXSCF): ELSE HINVEX=0; MPRINT(TAXSCF): IF TOTINVEX > TOTINTINC & Y1=YY1*10+1 THEN PUT "TOO MUCH INVESTMENT INTEREST EXPENSES " Y1= TOTINVEX= TOTLOCINVEX= TOTINVPDCT= TOTLNINVEX= TOTINTINC=/; MPRINT(TAXSCF): IF (TOTINVEX > TOTINTINC) THEN TOTINVEX=TOTINTINC; MPRINT(TAXSCF): * In 1988, 40% of personal interest is deductible, this includes credit cards, car/other vehicle loans, other consumer loans, loans against life insurance policies, home improvement loans, and non-HELOC LOCs.; MPRINT(TAXSCF): TOTPINEX=0; MPRINT(TAXSCF): **************Charitable Contributions; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): GCHARITY=(X5822=1); MPRINT(TAXSCF): CHARITYAMT=0; MPRINT(TAXSCF): IF (X5822=1 & X5823 > 0) THEN DO; MPRINT(TAXSCF): IF (X5823 > .5*AGI) & (AGI>0) THEN CHARITYAMT=.5*AGI; MPRINT(TAXSCF): ELSE CHARITYAMT=X5823; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF X5822=1 & X5823 > 0 & AGI < 0 & Y1=YY1*10+1 THEN PUT "NEGATIVE AGI BUT CHARITYAMT > 0 " Y1= X5823= CHARITYAMT= X5744= X5746= AGI=; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ITEMDEDCT_FLAG=0 THEN DO; MPRINT(TAXSCF): ADJDEDCT=0; MPRINT(TAXSCF): RESTAXM1=0; MPRINT(TAXSCF): TOTINVEX=0; MPRINT(TAXSCF): CHARITYAMT=0; MPRINT(TAXSCF): TOTPINEX=0; 485 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): **********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.; MPRINT(TAXSCF): TOTITEMDCT=0; MPRINT(TAXSCF): * no limits on itemized deductions in 1988, 2012 and 2018; MPRINT(TAXSCF): * starting in 2015, itemized deduction phaseout limit for AGI are the same as for personal exemptions, so using EXLIM1-4 in this code; MPRINT(TAXSCF): TEMPITEMDCT=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); MPRINT(TAXSCF): IF TEMPITEMDCT > 0 & ((AGI <= 111800 & FILESTAT^=3) | (AGI <= 55900 & FILESTAT=3)) THEN DO; MPRINT(TAXSCF): TOTITEMDCT=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); MPRINT(TAXSCF): DEDCTLIM=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TEMPITEMDCT > 0 & DEDCTLIM^=0 THEN DO; MPRINT(TAXSCF): ITDLIM=111800*(FILESTAT^=3)+55900*(FILESTAT=3); MPRINT(TAXSCF): DEDCTLIM=1; MPRINT(TAXSCF): IWLINE1=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); MPRINT(TAXSCF): IF (IWLINE1-TOTINVEX <= 0) THEN TOTITEMDCT=IWLINE1; MPRINT(TAXSCF): ELSE IF (IWLINE1-TOTINVEX > 0) THEN DO; MPRINT(TAXSCF): IWLINE4=(IWLINE1-TOTINVEX)*.80; MPRINT(TAXSCF): IWLINE7=AGI-ITDLIM; MPRINT(TAXSCF): IWLINE8=IWLINE7*.03; MPRINT(TAXSCF): IWLINE9=MIN(IWLINE4,IWLINE8); MPRINT(TAXSCF): TOTITEMDCT=IWLINE1-IWLINE9; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TEMPITEMDCT=0 THEN DEDCTLIM=0; MPRINT(TAXSCF): * NOTE: Change in worksheet for 2006; MPRINT(TAXSCF): * no limits on exemptions in 1988 and 2012, no exemptions in 2018; MPRINT(TAXSCF): TOTEXPTAMT=0; MPRINT(TAXSCF): EXPTLIM=0; MPRINT(TAXSCF): EXLIM=111800*(FILESTAT=1)+167700*(FILESTAT IN(2 5)) +83850*(FILESTAT=3)+139750*(FILESTAT=4); MPRINT(TAXSCF): EXPAGIT=122500*(FILESTAT^=3)+61250*(FILESTAT=3); MPRINT(TAXSCF): DLINE6=2500*(FILESTAT^=3)+1250*(FILESTAT=3); MPRINT(TAXSCF): IF (AGI <= EXLIM) THEN TOTEXPTAMT=TOTEXPT*2450; MPRINT(TAXSCF): ELSE IF (AGI > EXLIM) THEN DO; MPRINT(TAXSCF): EXPTLIM=1; MPRINT(TAXSCF): EWLINE2=TOTEXPT*2450; MPRINT(TAXSCF): EWLINE5=AGI-EXLIM; MPRINT(TAXSCF): IF EWLINE5 > EXPAGIT THEN TOTEXPTAMT=TOTEXPT*0; MPRINT(TAXSCF): ELSE IF EWLINE5 <= EXPAGIT THEN DO; MPRINT(TAXSCF): EWLINE6=ROUND((EWLINE5/DLINE6),1); MPRINT(TAXSCF): EWLINE7=EWLINE6*.02; MPRINT(TAXSCF): EWLINE8=EWLINE7*EWLINE2; MPRINT(TAXSCF): TOTEXPTAMT=EWLINE2-EWLINE8; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Standard deduction by filing status, including addition deduction amount for over 65, dont have any info on blindness. Also compute number of age exemptions and flag nonfilers based on IRS filing thresholds and a few other assumptions. Nonfilers also cannot have negative AGI, losses from business or capital gains or more than 1/3 of the lowest filing threshold, which is married, filing separately; MPRINT(TAXSCF): BUSRENTCAPLOSS=(TBUSINC < 0 | RENTINC < 0 | CAPGLINC < 0); MPRINT(TAXSCF): HWSINCSE=(WSINCOME >= (.33*2450) | WSINCSP >= (.33*2450) | TBUSINC >= (.33*2450)); MPRINT(TAXSCF): STDDCT=0; MPRINT(TAXSCF): IF (FILESTAT=1 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=3800; MPRINT(TAXSCF): NONFILER=(0 < AGI < 6250)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; 486 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE IF (FILESTAT=1 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=4750; MPRINT(TAXSCF): NONFILER=(0 < AGI < 7200)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=2 & TUAGE < 65 & SPAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=6350; MPRINT(TAXSCF): NONFILER=(0 < AGI < 11250)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=2 & TUAGE >= 65 & SPAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=7850; MPRINT(TAXSCF): NONFILER=(0 < AGI < 12750)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=2 & (TUAGE >= 65 | SPAGE >= 65)) THEN DO; MPRINT(TAXSCF): STDDCT=7100; MPRINT(TAXSCF): NONFILER=(0 < AGI < 12000)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=6350/2; MPRINT(TAXSCF): NONFILER=(AGI < 2450)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=7850/2; MPRINT(TAXSCF): NONFILER=(AGI < 2450)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=4 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=5600; MPRINT(TAXSCF): NONFILER=(0 < AGI < 8050)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=4 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=6550; MPRINT(TAXSCF): NONFILER=(0 < AGI < 9000)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=5 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=6350; MPRINT(TAXSCF): NONFILER=(AGI < 8800)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=5 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=7100; MPRINT(TAXSCF): NONFILER=(0 < AGI < 9550)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): AGEXMP=(TUAGE > 65) + (SPAGE > 65)*(FILESTAT=2); MPRINT(TAXSCF): * Did the hh itemize; MPRINT(TAXSCF): * No itemization question in 1989 or 1992, so itemize will be zero; MPRINT(TAXSCF): ITEMIZE=(TAXUNIT=0)*(X7367=1 | X7368=1 | X7369=1)+(TAXUNIT=1)*(X7368=1)+(TAXUNIT=2)*(X7369=1); MPRINT(TAXSCF): CITEMIZE=(TOTITEMDCT => STDDCT); MPRINT(TAXSCF): * Construct other variables needed for TAXSIM; MPRINT(TAXSCF): TAXUNITID=Y1*100+TAXUNIT; MPRINT(TAXSCF): YEAR=1994; MPRINT(TAXSCF): AGECL=1*(TUAGE < 26)+2*(26<=TUAGE<35)+3*(35<=TUAGE<45) +4*(45<=TUAGE<55)+5*(55<=TUAGE<65)+6*(TUAGE>=65); MPRINT(TAXSCF): * 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).; MPRINT(TAXSCF): STCAPINC=0; MPRINT(TAXSCF): LTCAPINC=0; MPRINT(TAXSCF): IF (AGICL IN(1)) THEN DO; MPRINT(TAXSCF): IF (CAPGLINC > 0) THEN DO; 487 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.86; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.86); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (CAPGLINC < 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.68; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.68); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AGICL IN(2)) THEN DO; MPRINT(TAXSCF): IF (CAPGLINC > 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.86; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.86); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (CAPGLINC < 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.63; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.63); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AGICL IN(3)) THEN DO; MPRINT(TAXSCF): IF (CAPGLINC > 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.89; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.89); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (CAPGLINC < 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.55; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.55); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ARRAY NEG_1 {*} TBUSINC OTHINC RENTINC OTHPINC; MPRINT(TAXSCF): DO I=1 TO DIM(NEG_1); MPRINT(TAXSCF): IF NEG_1{I}=-1 THEN NEG_1{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): UNADJTOTDEDCT=MAX(0,(ADJDEDCT+TOTINVEX+CHARITYAMT)); MPRINT(TAXSCF): CHCAREXP=0; MPRINT(TAXSCF): TINCOME=WSINCOME+WSINCSP+TBUSINC+INTINC+NTAXINC+DIVINC+CAPGLINC+RENTINC +UNEMPINC+GSSINC+PENINC+AFDCINC+OTHINC; MPRINT(TAXSCF): TOTXINC=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC +UNEMPINC+GSSINC+PENINC+OTHINC; MPRINT(TAXSCF): *set 3000 max loss for capital gains for comparison with IRS estimates; MPRINT(TAXSCF): IF CAPGLINC < -3000 THEN CAPGL3K=-3000; MPRINT(TAXSCF): ELSE CAPGL3K=CAPGLINC; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (TOTXINC=0 & TINCOME > 0 & AFDCINC=0 & NTAXINC=0 & TAXUNIT < 3 & Y1=YY1*10+1) THEN PUT "TOTXINC IS ZERO BUT TINCOME > 0 " YY1= Y1= TOTXINC= TINCOME= WSINCOME= WSINCSP= TBUSINC= INTINC= NTAXINC= DIVINC= RENTINC= UNEMPINC= AFDCINC= GSSINC= PENINC= OTHINC= CAPGLINC= RAGE= SPAGE= FILESTAT= TAXUNIT= X4100= X4700=/; MPRINT(TAXSCF): * Adding in payroll tax liability and mtr, assuming employee pays both employee and employer share, and 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 earning 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 tax year, 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 caculate the payroll liability and mtr. Computing the payroll atr in a similar fashion. NOTE: Need to adjust for different amounts used to compute the mtr, initially computing payroll mtr for adding $1 to earnings.; 488 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): * Need to adjust for 1988, 2% credit for SE, in 1991, limit on medicare tax; MPRINT(TAXSCF): ** earnings from wages and businesses for head and spouse/parnter; MPRINT(TAXSCF): REARN=R_LABORINC+R_BUSINC; MPRINT(TAXSCF): SPEARN=SP_LABORINC+SP_BUSINC; MPRINT(TAXSCF): HHEARN=REARN+SPEARN; MPRINT(TAXSCF): TWSINC=WSINCOME+WSINCSP; MPRINT(TAXSCF): PAYROLLIAB=0; MPRINT(TAXSCF): PAYROLLMTR=0; MPRINT(TAXSCF): PAYROLLATR=0; MPRINT(TAXSCF): IF TAXUNIT=0 THEN DO; MPRINT(TAXSCF): IF (X4106 IN(1 2 3 4 -7) & X4706=0) | (X4106=0 & X4706 IN(1 2 3 4 -7)) | (X4106=0 & X4706=0 & X102=0 & (TWSINC > 0 | TBUSINC > 0)) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(60600,(TWSINC+TBUSINC*(TBUSINC >0)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*.029)*(1995 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*.029)*(1995 EQ 1992); MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 60600)*(100*.124))+ (100*.029)*(1995 GE 1995)+ (100*.029)*(1995 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB >0) THEN PAYROLLATR=100*(PAYROLLIAB/(TWSINC+TBUSINC*(TBUSINC > 0))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X4106 IN(1 2 3 4 -7) & X4706 IN(1 2 3 4 -7)) THEN DO; MPRINT(TAXSCF): IF (X4115 >=1 & X4715 >=1 & HHEARN > 0) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(60600,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(REARN/HHEARN))*.029*(1995 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*(REARN/HHEARN))*.029*(1995 EQ 1992)+ MIN(60600,((TWSINC+TBUSINC*(TBUSINC >0))*(SPEARN/HHEARN)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(SPEARN/HHEARN))*.029*(1995 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*(SPEARN/HHEARN))*.029*(1995 EQ 1992); MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(REARN/HHEARN) <= 60600)*(100*.124))+(100*.029)*(1995 GE 1995)+ (100*.029)*(1995 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1)*(REARN/HHEARN) <= 125000); MPRINT(TAXSCF): IF ((MIN(60600,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(REARN/HHEARN))*.029) > 0) THEN PAYROLLATR=100*((MIN(60600,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*.124 + ((1995 GE 1995)*((TWSINC+TBUSINC*(TBUSINC >0))*(REARN/HHEARN))*.029)+ ((1995 EQ 1992)*(MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*(REARN/HHEARN))*.029))/ ((TWSINC+TBUSINC*(TBUSINC > 0))*(REARN/HHEARN))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X4115 =-1 & X4715=-1) | (X4115 >=1 & X4715=-1) | (X4115=-1 & X4715 >=1) | (HHEARN=0) THEN DO; MPRINT(TAXSCF): IF ((TWSINC+TBUSINC*(TBUSINC >0)) <= 60600) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=(TWSINC+TBUSINC*(TBUSINC >0))*.124+ (TWSINC+TBUSINC*(TBUSINC >0))*.029; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((TWSINC+TBUSINC*(TBUSINC >0)) > 60600) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(2*60600,((TWSINC+TBUSINC*(TBUSINC >0))))*.124+ (TWSINC+TBUSINC*(TBUSINC >0))*.029*(1995 GE 1995)+ MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*.029*(1995 EQ 1992); MPRINT(TAXSCF): END; MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(.5) <= 60600)*(100*.124))+(100*.029)*(1995 GE 1995)+ (100*.029)*(1995 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB*.5 > 0) THEN PAYROLLATR=100*((PAYROLLIAB*.5)/((TWSINC+TBUSINC*(TBUSINC >0))*(.5))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X4106=0 & X4706=0 & X102^=0 & (TWSINC > 0 | TBUSINC > 0)) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=2*(MIN(60600,((TWSINC+TBUSINC*(TBUSINC >0))*(.5)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(.5))*.029*(1995 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)*(.5)))*.029)*(1995 EQ 1992)); MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(.5) <= 60600)*(100*.124))+(100*.029)*(1995 GE 1995)+ (100*.029)*(1995 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB*.5 > 0) THEN PAYROLLATR=100*((PAYROLLIAB*.5)/((TWSINC+TBUSINC*(TBUSINC >0))*(.5))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TAXUNIT >= 1 THEN DO; MPRINT(TAXSCF): IF (WSINCOME > 0 | TBUSINC > 0) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(60600,(WSINCOME+TBUSINC*(TBUSINC >0)))*.124 + ((WSINCOME+TBUSINC*(TBUSINC >0))*.029)*(1995 GE 1995)+ (MIN(125000,(WSINCOME+TBUSINC*(TBUSINC >0)))*.029)*(1995 EQ 1992); 489 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): PAYROLLMTR=(((WSINCOME+TBUSINC*(TBUSINC > 0)+1)<=60600)*(100*.124))+ (100*.029)*(1995 GE 1995)+ (100*.029)*(1995 EQ 1992)*((WSINCOME+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB >0) THEN PAYROLLATR=100*(PAYROLLIAB/(WSINCOME+TBUSINC*(TBUSINC > 0))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF PAYROLLIAB=0 & PAYROLLMTR=0 & PAYROLLATR=0 & (TWSINC > 0 | TBUSINC > 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= TWSINC= TBUSINC= R_LABORINC= R_BUSINC= R_SOLEPROP= SP_LABORINC= SP_BUSINC= SP_SOLEPROP= REARN= SPEARN= HHEARN= TAXUNIT=/; MPRINT(TAXSCF): * Check for missing variables; MPRINT(TAXSCF): ARRAY CHVARS {*} YY1 Y1 CHARITYAMT X5823 TOTITEMDCT STDDCT AGI AGICL AGIGE50K DEDCTLIM X7372 X7018 X8023 X105 PERSEXP KIDS TOTEXPT FILESTAT TOTEXPTAMT EXPTLIM RAGE SPAGE TUAGE YEAR STATE TAXUNIT WSINCOME WSINCSP TBUSINC NTAXINC INTINC DIVINC CAPGLINC RENTINC UNEMPINC CHSPALINC AFDCINC PENINC OTHINC GSSINC OTHPINC NONTAX RENT UNADJTOTDEDCT CHCAREXP TINCOME TOTXINC STCAPINC LTCAPINC PAYROLLIAB PAYROLLMTR PAYROLLATR LWP KIDSU17 KIDSU18 KIDSU13; MPRINT(TAXSCF): DO I=1 TO DIM(CHVARS); MPRINT(TAXSCF): IF CHVARS{I}=. THEN PUT "MISSING VALUE FOR " Y1= CHVARS{I}=; MPRINT(TAXSCF): END; MPRINT(TAXSCF): RUN; NOTE: The file "null.txt" is: Filename=/disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code/null.txt, Owner Name=taxsim,Group Name=taxsim, Access Permission=-rw-r--r--, Last Modified=29Jan2021:13:35:57 NOTE: 917 records were written to the file "null.txt". The minimum record length was 0. The maximum record length was 370. NOTE: There were 25987 observations read from the data set WORK.SCF. NOTE: The data set WORK.SCF has 25987 observations and 5336 variables. NOTE: DATA statement used (Total process time): real time 0.75 seconds cpu time 0.76 seconds MPRINT(TAXSCF): * Create a dataset for full TAXSIM. Breaking out total itemized deductions into its parts - have applied the limits for the mortgage interest deduction and investment interest expense, but not for charitable contributions.; MPRINT(TAXSCF): PROC SORT DATA=SCF; MPRINT(TAXSCF): BY TAXUNITID; MPRINT(TAXSCF): RUN; NOTE: There were 25987 observations read from the data set WORK.SCF. NOTE: The data set WORK.SCF has 25987 observations and 5336 variables. NOTE: PROCEDURE SORT used (Total process time): real time 0.47 seconds cpu time 0.48 seconds MPRINT(TAXSCF): proc means; MPRINT(TAXSCF): var y1 yy1 year year; MPRINT(TAXSCF): run; NOTE: There were 25987 observations read from the data set WORK.SCF. NOTE: The PROCEDURE MEANS printed page 928. NOTE: PROCEDURE MEANS used (Total process time): real time 0.06 seconds cpu time 0.06 seconds 490 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): * Rename variables to TAXSIM names, use lowercase for TAXSIM file names; MPRINT(TAXSCF): libname swt "../swt/sas"; NOTE: Libref SWT was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/swt/sas MPRINT(TAXSCF): DATA swt.swt95; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): rep=mod(y1,10); MPRINT(TAXSCF): * IF FILESTAT > 0; MPRINT(TAXSCF): mstat=1*(FILESTAT IN(1 4))+2*(FILESTAT IN(2 5))+6*(FILESTAT IN(3)); MPRINT(TAXSCF): otherprop=RENTINC+TBUSINC; MPRINT(TAXSCF): nonprop=CHSPALINC+OTHINC; MPRINT(TAXSCF): otheritem=TOTINVEX+TOTPINEX; MPRINT(TAXSCF): mortgage=ADJDEDCT+X5823; MPRINT(TAXSCF): scorp=0; MPRINT(TAXSCF): pbusinc=0; MPRINT(TAXSCF): pprofinc=0; MPRINT(TAXSCF): sbusinc=0; MPRINT(TAXSCF): sprofinc=0; MPRINT(TAXSCF): tyear=YEAR; MPRINT(TAXSCF): tstate=STATE; MPRINT(TAXSCF): * set idtl=2 to get detailed output from TAXSIM; MPRINT(TAXSCF): idtl=2; MPRINT(TAXSCF): DROP STATE; MPRINT(TAXSCF): RENAME TAXUNITID=taxsimid TUAGE=page SPAGE=sage KIDS=depx KIDSU13=dep13 KIDSU17=dep17 KIDSU18=dep18 WSINCOME=pwages WSINCSP=swages DIVINC=dividends INTINC=intrec STCAPINC=stcg LTCAPINC=ltcg PENINC=pensions GSSINC=gssi UNEMPINC=ui AFDCINC=transfers RENT=rentpaid RESTAXM1=proptax CHCAREXP=childcare tyear=year; MPRINT(TAXSCF): RUN; WARNING: Variable tyear cannot be renamed to year because year already exists. NOTE: There were 25987 observations read from the data set WORK.SCF. NOTE: The data set SWT.SWT95 has 25987 observations and 5349 variables. NOTE: DATA statement used (Total process time): real time 6.45 seconds cpu time 0.84 seconds MPRINT(TAXSCF): proc means; MPRINT(TAXSCF): var y1 yy1 year; MPRINT(TAXSCF): run; NOTE: There were 25987 observations read from the data set SWT.SWT95. NOTE: The PROCEDURE MEANS printed page 929. NOTE: PROCEDURE MEANS used (Total process time): real time 5.50 seconds cpu time 0.39 seconds MPRINT(TAXSCF): libname taxsim "../txpydata/sas"; NOTE: Libref TAXSIM was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/txpydata/sas MPRINT(TAXSCF): proc contents data=swt.swt95; MPRINT(TAXSCF): run; NOTE: PROCEDURE CONTENTS used (Total process time): 491 The SAS System 13:32 Friday, January 29, 2021 real time 0.01 seconds cpu time 0.01 seconds NOTE: The PROCEDURE CONTENTS printed pages 930-1033. MPRINT(TAXSCF): DATA taxsim.txpydata95; MPRINT(TAXSCF): SET swt.swt95(KEEP=taxsimid year mstat page sage depx dep13 dep17 dep18 pwages swages dividends intrec stcg ltcg otherprop nonprop pensions gssi ui transfers rentpaid proptax otheritem childcare mortgage scorp pbusinc pprofinc sbusinc sprofinc Y1 YY1 taxunit rep); MPRINT(TAXSCF): y1=Y1; MPRINT(TAXSCF): yy1=YY1; MPRINT(TAXSCF): RUN; NOTE: There were 25987 observations read from the data set SWT.SWT95. NOTE: The data set TAXSIM.TXPYDATA95 has 25987 observations and 35 variables. NOTE: DATA statement used (Total process time): real time 0.20 seconds cpu time 0.07 seconds MPRINT(TAXSCF): proc contents data=taxsim.txpydata95; MPRINT(TAXSCF): run; NOTE: PROCEDURE CONTENTS used (Total process time): real time 0.01 seconds cpu time 0.01 seconds NOTE: The PROCEDURE CONTENTS printed pages 1034-1035. 3915 3916 %TAXSCF(SYEAR=1992,TYEAR=1991,WYEAR=1989,ITDLIM1=100000,ITDLIM2=50000,ITDL10=0,EXPAMT=2150, 3917 EXPAMT2=0,EXDL9=0,EXPAGIT1=122500,EXPAGIT2=61250,EXLIM1=100000,EXLIM2=150000, 3918 EXLIM3=75000,EXLIM4=125000,STDAMT1=3400,STDAMT2=4250,STDAMT3=5700,STDAMT4=6350, 3919 STDAMT5=7000,STDAMT6=5000,STDAMT7=5850,FILELIM1=5550,FILELIM2=6400,FILELIM3=10000,FILELIM4=10650, 3920 FILELIM5=11300,FILELIM6=2150,FILELIM7=7150,FILELIM8=8000,FILELIM9=7850,FILELIM10=8500,LCGAGI1=.86, 3921 LCLAGI1=.69,LCGAGI2=.85,LCLAGI2=.66,LCGAGI3=.85, MPRINT(TAXSCF): * define libraries for SCF public datasets; 3922 LCLAGI3=.62,PAYTAX=.124,MEDHI=.029,PTLIM=53400,HTAXFILE=HTAXFILE=&SYSPARM); MPRINT(TAXSCF): LIBNAME SCF92 "../orig/sas7bdat" ACCESS=READONLY; NOTE: Libref SCF92 refers to the same physical library as SCF95. NOTE: Libref SCF92 was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/orig/sas7bdat MPRINT(TAXSCF): * directory for datasets created by the program; MPRINT(TAXSCF): LIBNAME OUT "."; NOTE: Libref OUT was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code MPRINT(TAXSCF): * csv file for TAXSIM v32; MPRINT(TAXSCF): FILENAME SCFTAX "txpydata92.csv"; MPRINT(TAXSCF): * csv from TAXSIM v32; MPRINT(TAXSCF): FILENAME TAXSIM "results92.csv"; MPRINT(TAXSCF): * read in public SCF data, assumes dataset name is pXXiY.sas7bdat; MPRINT(TAXSCF): * NOTE: Any changes to the libname or data set name must also be made in this data step; MPRINT(TAXSCF): DATA MAIN; MPRINT(TAXSCF): SET SCF92.P92I6; NOTE: Data file SCF92.P92I6.DATA is in a format that is native to another host, or the file encoding does not match the session encoding. Cross Environment Data Access will be used, which might require additional CPU resources and 492 The SAS System 13:32 Friday, January 29, 2021 might reduce performance. MPRINT(TAXSCF): RUN; NOTE: There were 19530 observations read from the data set SCF92.P92I6. NOTE: The data set WORK.MAIN has 19530 observations and 4156 variables. NOTE: DATA statement used (Total process time): real time 4.59 seconds cpu time 4.58 seconds MPRINT(TAXSCF): PROC SORT DATA=MAIN; MPRINT(TAXSCF): BY Y1; MPRINT(TAXSCF): RUN; NOTE: There were 19530 observations read from the data set WORK.MAIN. NOTE: The data set WORK.MAIN has 19530 observations and 4156 variables. NOTE: PROCEDURE SORT used (Total process time): real time 0.24 seconds cpu time 0.26 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET MAIN; MPRINT(TAXSCF): file "null.txt"; MPRINT(TAXSCF): WGT=(X42001/5); MPRINT(TAXSCF): POP=1; MPRINT(TAXSCF): * setting STATE variable to zero, set to -1 if you want TAXSIM to compute state tax for all 51 states; MPRINT(TAXSCF): STATE=0; MPRINT(TAXSCF): * Small data fix for one case in 1992; MPRINT(TAXSCF): IF (YY1=2078 & X107=0) THEN DO; MPRINT(TAXSCF): X107=1; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Small data fix for one case in 1998; MPRINT(TAXSCF): * Small data fix for one case in 2007; MPRINT(TAXSCF): * Small data fix for one case in 2013; MPRINT(TAXSCF): * Payment frequency on other loans not asked in 1989, assumed to be monthly; MPRINT(TAXSCF): * Only one other income variable after 1992, set to zero for 1992 forward; MPRINT(TAXSCF): * Spouse/partner in PEU, need to create X7020 for 1989 to 1998; MPRINT(TAXSCF): IF X107 IN(0 2 5 12) THEN X7020=1; MPRINT(TAXSCF): ELSE IF X107=1 THEN X7020=2; MPRINT(TAXSCF): * A few other recodes to construct variables not asked in 1989 and 1992; MPRINT(TAXSCF): X7135=5*(X714=1); MPRINT(TAXSCF): X7133=0; MPRINT(TAXSCF): X7134=0; MPRINT(TAXSCF): X7367=0; MPRINT(TAXSCF): X7368=0; MPRINT(TAXSCF): X7369=0; MPRINT(TAXSCF): X7018=0; MPRINT(TAXSCF): X7372=5*(X8023=5); MPRINT(TAXSCF): X7001=(X113 IN(2 3 4 5))+(X119 IN(2 3 4 5))+(X125 IN(2 3 4 5))+(X131 IN(2 3 4 5))+(X137 IN(2 3 4 5)) +(X207 IN(2 3 4 5))+(X213 IN(2 3 4 5))+(X219 IN(2 3 4 5))+(X225 IN(2 3 4 5))+(X231 IN(2 3 4 5)); MPRINT(TAXSCF): X7377=((X5918=1)+2*(X5918=5))*(1992 EQ 1992); MPRINT(TAXSCF): X7392=(X6111=1)+2*(X6111=5); MPRINT(TAXSCF): * Number of years with spouse/partner; MPRINT(TAXSCF): IF 1992=X8005 THEN X7370=-1; MPRINT(TAXSCF): ELSE X7370=1992-X8005; MPRINT(TAXSCF): * Number of people in NPEU, need to compute for 1989 to 2004, variable exists for 2007 forward; MPRINT(TAXSCF): X7050=X101-X7001; 493 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): * Absent spouse/partner indicator; MPRINT(TAXSCF): IF (X100=5) | (X106=5 & X107 IN(2 5 12)) THEN ABSP_P=1; MPRINT(TAXSCF): ELSE ABSP_P=0; MPRINT(TAXSCF): PERSEXP=1+(X105 IN(1 2))*(ABSP_P=0); MPRINT(TAXSCF): * Including children living elsewhere that are under 18, max of one extra as there is uncertainty about dependent status; MPRINT(TAXSCF): 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) + (X226 IN(4 13))*(X228 < 19) + (X5912 > 0 | X5912=-2); MPRINT(TAXSCF): * For the child tax credit - must be under 17; MPRINT(TAXSCF): 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) + (X226 IN(4 13))*(X228 < 17); MPRINT(TAXSCF): KIDSU18=(X108 IN(4 13))*(X110 < 18) + (X114 IN(4 13))*(X116 < 18) + (X120 IN(4 13))*(X122 < 18) + (X126 IN(4 13))*(X128 < 18) + (X132 IN(4 13))*(X134 < 18) + (X202 IN(4 13))*(X204 < 18) + (X208 IN(4 13))*(X210 < 18) + (X214 IN(4 13))*(X216 < 18) + (X220 IN(4 13))*(X222 < 18) + (X226 IN(4 13))*(X228 < 18); MPRINT(TAXSCF): KIDSU13=(X108 IN(4 13))*(X110 < 13) + (X114 IN(4 13))*(X116 < 13) + (X120 IN(4 13))*(X122 < 13) + (X126 IN(4 13))*(X128 < 13) + (X132 IN(4 13))*(X134 < 13) + (X202 IN(4 13))*(X204 < 13) + (X208 IN(4 13))*(X210 < 13) + (X214 IN(4 13))*(X216 < 13) + (X220 IN(4 13))*(X222 < 13) + (X226 IN(4 13))*(X228 < 13); MPRINT(TAXSCF): * Indicator for R living with a partner; MPRINT(TAXSCF): LWP=(X8023=2); MPRINT(TAXSCF): RAGE=X14; MPRINT(TAXSCF): * Set spouse/parnter age to zero if absent spouse/partner; MPRINT(TAXSCF): SPAGE=X19*(X7020=2); MPRINT(TAXSCF): * Possible scenarios, not considering NPEU right now, will create those tax units last 1. Married filing jointly households = tax unit 2. Single person households = tax unit 3. Filing separately households = split into two tax units, need to determine if single or married filing separately filing status 4. LWP households = split into two tax units even if one person is a nonfiler For 3. and 4., one of the tax units may have head of household status depending on presence of children For each new tax unit, start with replicate of household data and parse out income, deductions, exemptions; MPRINT(TAXSCF): * Create new observations from married filing separately households or LWP households. 0. Tax unit = household 1. Created tax unit for household head 2. Created tax unit for spouse/parnter 3-8. Created tax unit for NPEU member Note: If R and Sp are legally married for more than one year, treat as married filing joint even if x5746=3,4. If R and Sp LWP and report filing jointly treat as two tax units. If R and Sp married and report filing separately, treat as filing jointly unless either R or Sp has a past marriage. Inspection of the data reveals that too many married couples report filing separately when compared to the IRS data. The past marriage condition put the number closer to the IRS data.; MPRINT(TAXSCF): MARRIED=(X8023=1 & X105=1 & X7370 >= 1 & X7020=2); MPRINT(TAXSCF): IF (X5744 IN(1 6) & X5746=1 & MARRIED=1) | (MARRIED=1 & ((X5744=5 | X5746 IN(3 4)) | (X5746=2 & X7377^=2 & X7392^=2))) | (X8023 > 0 & X105=0 & (X5744=5 | (X5744 IN(1 6) & X5746=0))) | (X8023 > 0 & X105 > 0 & X5744 IN(1 5 6) & X5746=0 & X7020=1) | (X8023=8 & X105=0 & X5744=1 & X5746=1) THEN TAXUNIT=0; MPRINT(TAXSCF): ELSE IF (X5744 IN(1 6) & X5746 IN(2 3 4)) | (X8023 > 0 & X105 > 0 & (X5744=5 | (X5744 IN(1 6) & X5746 IN(0 1)))) | (X8023=1 & X105=1 & X7370=-1 & X5744=1) THEN TAXUNIT=1; MPRINT(TAXSCF): ELSE PUT "MISSING TAXUNIT STATUS " YY1= X5744= X5746= X8023= X105= X7020= MARRIED= X7372= X7018= X7370=; MPRINT(TAXSCF): TUAGE=RAGE; MPRINT(TAXSCF): RUN; NOTE: Variable X5918 is uninitialized. NOTE: Variable X6111 is uninitialized. NOTE: The file "null.txt" is: Filename=/disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code/null.txt, Owner Name=taxsim,Group Name=taxsim, Access Permission=-rw-r--r--, Last Modified=29Jan2021:13:36:15 NOTE: 0 records were written to the file "null.txt". NOTE: There were 19530 observations read from the data set WORK.MAIN. 494 The SAS System 13:32 Friday, January 29, 2021 NOTE: The data set WORK.SCF has 19530 observations and 4187 variables. NOTE: DATA statement used (Total process time): real time 0.34 seconds cpu time 0.33 seconds MPRINT(TAXSCF): DATA NEWUNITS; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): IF TAXUNIT=1; MPRINT(TAXSCF): TAXUNIT=2; MPRINT(TAXSCF): TUAGE=SPAGE; MPRINT(TAXSCF): SPAGE=0; MPRINT(TAXSCF): RUN; NOTE: There were 19530 observations read from the data set WORK.SCF. NOTE: The data set WORK.NEWUNITS has 779 observations and 4187 variables. NOTE: DATA statement used (Total process time): real time 0.15 seconds cpu time 0.17 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF NEWUNITS; MPRINT(TAXSCF): RUN; NOTE: There were 19530 observations read from the data set WORK.SCF. NOTE: There were 779 observations read from the data set WORK.NEWUNITS. NOTE: The data set WORK.SCF has 20309 observations and 4187 variables. NOTE: DATA statement used (Total process time): real time 0.31 seconds cpu time 0.30 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): * Codes for filestat, assigning status even if did not file, will determine non-filer status later, filing status for split tax units done after splitting up income 1= Single 2= Married filing jointly 3= Married filing separately 4= Head of HH 5= Qualified widower; MPRINT(TAXSCF): FILESTAT=0; MPRINT(TAXSCF): IF TAXUNIT=0 THEN DO; MPRINT(TAXSCF): IF (MARRIED=1) THEN FILESTAT=2; MPRINT(TAXSCF): ELSE IF MARRIED=0 THEN DO; MPRINT(TAXSCF): IF PERSEXP=1 & KIDS=0 THEN FILESTAT=1; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS > 0 & X8023=5 & X7372=5 & X8007>=1989 THEN FILESTAT=5; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS > 0 THEN FILESTAT=4; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTEXPT=PERSEXP+KIDS; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * No AGI variables starting in 2010; MPRINT(TAXSCF): * Coding income variables with -1 and -2 to zero; MPRINT(TAXSCF): ARRAY NEG {*} X5704 X5714 X5724 X5726 X5729; MPRINT(TAXSCF): DO I=1 TO DIM(NEG); MPRINT(TAXSCF): IF NEG{I} IN(-2 -1) THEN NEG{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Income from wages and business; MPRINT(TAXSCF): R_LABORINC=MAX(0,X4112) MPRINT(ACONV): *((X4113=2)*52.18+(X4113=3)*26.09+(X4113=4)*12+(X4113=5)*4+(X4113=6)+(X4113=8)+ (X4113=11)*2+(X4113=12)*6+(X4113=31)*24+(X4113=14)+(X4113=22)) 495 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ; MPRINT(TAXSCF): SP_LABORINC=MAX(0,X4712) MPRINT(ACONV): *((X4713=2)*52.18+(X4713=3)*26.09+(X4713=4)*12+(X4713=5)*4+(X4713=6)+(X4713=8)+ (X4713=11)*2+(X4713=12)*6+(X4713=31)*24+(X4713=14)+(X4713=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): R_BUSINC=MAX(0,X4131) MPRINT(ACONV): *((X4132=2)*52.18+(X4132=3)*26.09+(X4132=4)*12+(X4132=5)*4+(X4132=6)+(X4132=8)+ (X4132=11)*2+(X4132=12)*6+(X4132=31)*24+(X4132=14)+(X4132=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): SP_BUSINC=MAX(0,X4731) MPRINT(ACONV): *((X4732=2)*52.18+(X4732=3)*26.09+(X4732=4)*12+(X4732=5)*4+(X4732=6)+(X4732=8)+ (X4732=11)*2+(X4732=12)*6+(X4732=31)*24+(X4732=14)+(X4732=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): * Income from pensions and tax-deferred account withdrawals. No withdrawal information for IRAs or future pensions prior to 2004. No withdrawal information for any tax-deferred accounts, aside from other income, prior to 2001; MPRINT(TAXSCF): R_REGPEN=MAX(0,(X5318 MPRINT(ACONV): *((X5319=2)*52.18+(X5319=3)*26.09+(X5319=4)*12+(X5319=5)*4+(X5319=6)+(X5319=8)+ (X5319=11)*2+(X5319=12)*6+(X5319=31)*24+(X5319=14)+(X5319=22)) MPRINT(TAXSCF): *(X5315=1)*(X5317>=1))) +MAX(0,(X5326 MPRINT(ACONV): *((X5327=2)*52.18+(X5327=3)*26.09+(X5327=4)*12+(X5327=5)*4+(X5327=6)+(X5327=8)+ (X5327=11)*2+(X5327=12)*6+(X5327=31)*24+(X5327=14)+(X5327=22)) MPRINT(TAXSCF): *(X5323=1)*(X5325>=1))) +MAX(0,(X5334 MPRINT(ACONV): *((X5335=2)*52.18+(X5335=3)*26.09+(X5335=4)*12+(X5335=5)*4+(X5335=6)+(X5335=8)+ (X5335=11)*2+(X5335=12)*6+(X5335=31)*24+(X5335=14)+(X5335=22)) MPRINT(TAXSCF): *(X5331=1)*(X5333>=1))) +MAX(0,(X5418 MPRINT(ACONV): *((X5419=2)*52.18+(X5419=3)*26.09+(X5419=4)*12+(X5419=5)*4+(X5419=6)+(X5419=8)+ (X5419=11)*2+(X5419=12)*6+(X5419=31)*24+(X5419=14)+(X5419=22)) MPRINT(TAXSCF): *(X5415=1)*(X5417>=1))) +MAX(0,(X5426 MPRINT(ACONV): *((X5427=2)*52.18+(X5427=3)*26.09+(X5427=4)*12+(X5427=5)*4+(X5427=6)+(X5427=8)+ (X5427=11)*2+(X5427=12)*6+(X5427=31)*24+(X5427=14)+(X5427=22)) MPRINT(TAXSCF): *(X5423=1)*(X5425>=1))) +MAX(0,(X5434 MPRINT(ACONV): *((X5435=2)*52.18+(X5435=3)*26.09+(X5435=4)*12+(X5435=5)*4+(X5435=6)+(X5435=8)+ (X5435=11)*2+(X5435=12)*6+(X5435=31)*24+(X5435=14)+(X5435=22)) MPRINT(TAXSCF): *(X5431=1)*(X5433>=1))); MPRINT(TAXSCF): R_WITHDRAW=(X5724)*(X5725=11)*.5+(X5726)*(X5727=11)*.5; MPRINT(TAXSCF): SP_REGPEN=MAX(0,(X5318 MPRINT(ACONV): *((X5319=2)*52.18+(X5319=3)*26.09+(X5319=4)*12+(X5319=5)*4+(X5319=6)+(X5319=8)+ (X5319=11)*2+(X5319=12)*6+(X5319=31)*24+(X5319=14)+(X5319=22)) MPRINT(TAXSCF): *(X5315=2)*(X5317>=1))) +MAX(0,(X5326 MPRINT(ACONV): *((X5327=2)*52.18+(X5327=3)*26.09+(X5327=4)*12+(X5327=5)*4+(X5327=6)+(X5327=8)+ (X5327=11)*2+(X5327=12)*6+(X5327=31)*24+(X5327=14)+(X5327=22)) MPRINT(TAXSCF): *(X5323=2)*(X5325>=1))) +MAX(0,(X5334 MPRINT(ACONV): *((X5335=2)*52.18+(X5335=3)*26.09+(X5335=4)*12+(X5335=5)*4+(X5335=6)+(X5335=8)+ (X5335=11)*2+(X5335=12)*6+(X5335=31)*24+(X5335=14)+(X5335=22)) MPRINT(TAXSCF): *(X5331=2)*(X5333>=1))) +MAX(0,(X5418 MPRINT(ACONV): *((X5419=2)*52.18+(X5419=3)*26.09+(X5419=4)*12+(X5419=5)*4+(X5419=6)+(X5419=8)+ (X5419=11)*2+(X5419=12)*6+(X5419=31)*24+(X5419=14)+(X5419=22)) MPRINT(TAXSCF): *(X5415=2)*(X5417>=1))) +MAX(0,(X5426 MPRINT(ACONV): *((X5427=2)*52.18+(X5427=3)*26.09+(X5427=4)*12+(X5427=5)*4+(X5427=6)+(X5427=8)+ (X5427=11)*2+(X5427=12)*6+(X5427=31)*24+(X5427=14)+(X5427=22)) MPRINT(TAXSCF): *(X5423=2)*(X5425>=1))) +MAX(0,(X5434 MPRINT(ACONV): *((X5435=2)*52.18+(X5435=3)*26.09+(X5435=4)*12+(X5435=5)*4+(X5435=6)+(X5435=8)+ (X5435=11)*2+(X5435=12)*6+(X5435=31)*24+(X5435=14)+(X5435=22)) MPRINT(TAXSCF): *(X5431=2)*(X5433>=1))); MPRINT(TAXSCF): SP_WITHDRAW=(X5724)*(X5725=11)*.5+(X5726)*(X5727=11)*.5; MPRINT(TAXSCF): * For new tax units need to split up income and determine which new tax unit is assigned which deductions and exemptions. Also need to zero out any variables not relevant to the new tax unit (ex. spouses wages); 496 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): IF TAXUNIT IN(1 2) THEN DO; MPRINT(TAXSCF): * age; MPRINT(TAXSCF): IF (TAXUNIT=1) THEN SPAGE=0; MPRINT(TAXSCF): * wages; MPRINT(TAXSCF): IF (TAXUNIT=1 & (R_LABORINC+SP_LABORINC>0)) THEN WSINCOME=MAX(0,X5702)*(R_LABORINC/(R_LABORINC+SP_LABORINC))*(R_LABORINC>0); MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & (R_LABORINC+SP_LABORINC>0)) THEN WSINCOME=MAX(0,X5702)*(SP_LABORINC/(R_LABORINC+SP_LABORINC))*(SP_LABORINC>0); MPRINT(TAXSCF): ELSE WSINCOME=MAX(0,X5702)*.5; MPRINT(TAXSCF): WSINCSP=0; MPRINT(TAXSCF): * business income; MPRINT(TAXSCF): R_SOLEPROP=(X4106 IN(2 3 4) | (X3113=1 & X3119=2) | (X3213=1 & X3219=2) | (X3313=1 & X3319=2)); MPRINT(TAXSCF): SP_SOLEPROP=(X4706 IN(2 3 4) | (X3114=1 & X3119=2) | (X3214=1 & X3219=2) | (X3313=1 & X3319=2)); MPRINT(TAXSCF): IF (TAXUNIT=1 & (R_BUSINC+SP_BUSINC>0) & (R_SOLEPROP=1 | SP_SOLEPROP=1)) THEN DO; MPRINT(TAXSCF): IF (R_SOLEPROP=1 & SP_SOLEPROP=1) THEN TBUSINC=X5704*(R_BUSINC/(R_BUSINC+SP_BUSINC))*(R_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=1 & SP_SOLEPROP=0) THEN TBUSINC=X5704; MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=0 & SP_SOLEPROP=1) THEN TBUSINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & (R_BUSINC+SP_BUSINC>0) & (R_SOLEPROP=1 | SP_SOLEPROP=1)) THEN DO; MPRINT(TAXSCF): IF (R_SOLEPROP=1 & SP_SOLEPROP=1) THEN TBUSINC=X5704*(SP_BUSINC/(R_BUSINC+SP_BUSINC))*(SP_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=0 & SP_SOLEPROP=1) THEN TBUSINC=X5704; MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=1 & SP_SOLEPROP=0) THEN TBUSINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE TBUSINC=X5704*.5; MPRINT(TAXSCF): * interest, dividends, and capital gains - just split 50-50; MPRINT(TAXSCF): NTAXINC= MAX(0,X5706)*.5; MPRINT(TAXSCF): INTINC= MAX(0,X5708)*.5; MPRINT(TAXSCF): DIVINC= MAX(0,X5710)*.5; MPRINT(TAXSCF): IF X5712=-1 THEN CAPGLINC=0; MPRINT(TAXSCF): ELSE CAPGLINC=X5712*.5; MPRINT(TAXSCF): * rent, royalties, partnership and scorp income; MPRINT(TAXSCF): R_PARTNER_SCORP=(X4106 IN(2 3 4) | (X3113=1 & X3119 IN(1 3 6 11 12 15)) | (X3213=1 & X3219 IN(1 3 6 11 12 15))); MPRINT(TAXSCF): SP_PARTNER_SCORP=(X4106 IN(2 3 4) | (X3114=1 & X3119 IN(1 3 6 11 12 15)) | (X3214=1 & X3219 IN(1 3 6 11 12 15))); MPRINT(TAXSCF): IF (TAXUNIT=1 & (R_BUSINC+SP_BUSINC>0) & (R_PARTNER_SCORP=1 | SP_PARTNER_SCORP=1)) THEN DO; MPRINT(TAXSCF): IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=1) THEN RENTINC=X5714*(R_BUSINC/(R_BUSINC+SP_BUSINC))*(R_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=0) THEN RENTINC=X5714; MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=0 & SP_PARTNER_SCORP=1) THEN RENTINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & (R_BUSINC+SP_BUSINC>0) & (R_PARTNER_SCORP=1 | SP_PARTNER_SCORP=1)) THEN DO; MPRINT(TAXSCF): IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=1) THEN RENTINC=X5714*(SP_BUSINC/(R_BUSINC+SP_BUSINC))*(SP_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=0 & SP_PARTNER_SCORP=1) THEN RENTINC=X5714; MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=0) THEN RENTINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE RENTINC=X5714*.5; MPRINT(TAXSCF): * unemployment income, no questions about unemployed in past 12 months prior to 1998; MPRINT(TAXSCF): IF (TAXUNIT=1) THEN DO; MPRINT(TAXSCF): UNEMPINC=MAX(0,X5716)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2) THEN DO; MPRINT(TAXSCF): UNEMPINC=MAX(0,X5716)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * child support and alimony income; MPRINT(TAXSCF): IF (TAXUNIT=1 & X7377=2) THEN DO; MPRINT(TAXSCF): CHSPALINC=MAX(0,X5718)*(X7392^=2)+MAX(0,X5718)*(X7392=2)*.5; 497 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & X7392=2) THEN DO; MPRINT(TAXSCF): CHSPALINC=MAX(0,X5718)*(X7377^=2)+MAX(0,X5718)*(X7377=2)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE CHSPALINC=MAX(0,X5718)*.5; MPRINT(TAXSCF): * government transfers, split 50/50; MPRINT(TAXSCF): AFDCINC=MAX(0,X5720)*.5; MPRINT(TAXSCF): * other income, split 50/50 - remove other income that is non-taxable, such as scholarships/grants, inheritances/gifts/, support from family or others, also remove IRA/Keogh income; MPRINT(TAXSCF): * special fix for 1992, removing other income coded 14, repayment of debts, it appears the total amount of the debt was reported, not just the interest on the debt; MPRINT(TAXSCF): IF X5725=14 THEN DO; MPRINT(TAXSCF): X5724=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF X5727=14 THEN DO; MPRINT(TAXSCF): X5726=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): OTHINC= (X5724)*(X5725 NOT IN(3 11 12 13 28))*.5+(X5726)*(X5727 NOT IN(3 11 12 13 28))*.5; MPRINT(TAXSCF): * social security and pension income, adding in withdrawals from IRA/Keogh/401ks; MPRINT(TAXSCF): R_GSSINC=MAX(0,(X5306 MPRINT(ACONV): *((X5307=2)*52.18+(X5307=3)*26.09+(X5307=4)*12+(X5307=5)*4+(X5307=6)+(X5307=8)+ (X5307=11)*2+(X5307=12)*6+(X5307=31)*24+(X5307=14)+(X5307=22)) MPRINT(TAXSCF): *(X5305>=1))); MPRINT(TAXSCF): SP_GSSINC=MAX(0,(X5311 MPRINT(ACONV): *((X5312=2)*52.18+(X5312=3)*26.09+(X5312=4)*12+(X5312=5)*4+(X5312=6)+(X5312=8)+ (X5312=11)*2+(X5312=12)*6+(X5312=31)*24+(X5312=14)+(X5312=22)) MPRINT(TAXSCF): *(X5310>=1))); MPRINT(TAXSCF): T_GSSINC=MAX(0,((X5306 MPRINT(ACONV): *((X5307=2)*52.18+(X5307=3)*26.09+(X5307=4)*12+(X5307=5)*4+(X5307=6)+(X5307=8)+ (X5307=11)*2+(X5307=12)*6+(X5307=31)*24+(X5307=14)+(X5307=22)) MPRINT(TAXSCF): *(X5305>=1))+(X5311 MPRINT(ACONV): *((X5312=2)*52.18+(X5312=3)*26.09+(X5312=4)*12+(X5312=5)*4+(X5312=6)+(X5312=8)+ (X5312=11)*2+(X5312=12)*6+(X5312=31)*24+(X5312=14)+(X5312=22)) MPRINT(TAXSCF): *(X5310>=1)))); MPRINT(TAXSCF): NOSS_X5722=MAX(0,(X5722-T_GSSINC)); MPRINT(TAXSCF): IF (TAXUNIT=1) THEN DO; MPRINT(TAXSCF): IF (R_REGPEN > 0) THEN PENINC=NOSS_X5722*(R_REGPEN/(R_REGPEN+SP_REGPEN))+R_WITHDRAW; MPRINT(TAXSCF): ELSE IF (R_REGPEN=0 & R_WITHDRAW > 0) THEN PENINC=R_WITHDRAW; MPRINT(TAXSCF): ELSE IF (R_REGPEN=0 & R_WITHDRAW=0 & SP_REGPEN > 0) THEN PENINC=0; MPRINT(TAXSCF): ELSE IF (R_REGPEN=0 & R_WITHDRAW=0 & SP_REGPEN=0) THEN PENINC=NOSS_X5722*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2) THEN DO; MPRINT(TAXSCF): IF (SP_REGPEN > 0) THEN PENINC=NOSS_X5722*(SP_REGPEN/(R_REGPEN+SP_REGPEN))+SP_WITHDRAW; MPRINT(TAXSCF): ELSE IF (SP_REGPEN=0 & SP_WITHDRAW > 0) THEN PENINC=SP_WITHDRAW; MPRINT(TAXSCF): ELSE IF (SP_REGPEN=0 & SP_WITHDRAW=0 & R_REGPEN > 0) THEN PENINC=0; MPRINT(TAXSCF): ELSE IF (SP_REGPEN=0 & SP_WITHDRAW=0 & R_REGPEN=0) THEN PENINC=NOSS_X5722*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): GSSINC=MAX(0,R_GSSINC)*(TAXUNIT=1)+MAX(0,SP_GSSINC)*(TAXUNIT=2); MPRINT(TAXSCF): OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; MPRINT(TAXSCF): NONTAX=NTAXINC+AFDCINC; MPRINT(TAXSCF): RENT=MAX(0,(X602 MPRINT(ACONV): *((X603=2)*52.18+(X603=3)*26.09+(X603=4)*12+(X603=5)*4+(X603=6)+(X603=8)+ (X603=11)*2+(X603=12)*6+(X603=31)*24+(X603=14)+(X603=22)) MPRINT(TAXSCF): ),(X612 MPRINT(ACONV): *((X613=2)*52.18+(X613=3)*26.09+(X613=4)*12+(X613=5)*4+(X613=6)+(X613=8)+ (X613=11)*2+(X613=12)*6+(X613=31)*24+(X613=14)+(X613=22)) MPRINT(TAXSCF): ),(X619 MPRINT(ACONV): *((X620=2)*52.18+(X620=3)*26.09+(X620=4)*12+(X620=5)*4+(X620=6)+(X620=8)+ 498 The SAS System 13:32 Friday, January 29, 2021 (X620=11)*2+(X620=12)*6+(X620=31)*24+(X620=14)+(X620=22)) MPRINT(TAXSCF): ), (X708 MPRINT(ACONV): *((X709=2)*52.18+(X709=3)*26.09+(X709=4)*12+(X709=5)*4+(X709=6)+(X709=8)+ (X709=11)*2+(X709=12)*6+(X709=31)*24+(X709=14)+(X709=22)) MPRINT(TAXSCF): ))*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TAXUNIT=0 THEN DO; MPRINT(TAXSCF): R_SOLEPROP=(X4106 IN(2 3 4) | (X3113=1 & X3119=2) | (X3213=1 & X3219=2) | (X3313=1 & X3319=2)); MPRINT(TAXSCF): SP_SOLEPROP=(X4706 IN(2 3 4) | (X3114=1 & X3119=2) | (X3214=1 & X3219=2) | (X3313=1 & X3319=2)); MPRINT(TAXSCF): * Split wages across primary and secondary earner for married filing jointly households; MPRINT(TAXSCF): IF FILESTAT^=2 THEN DO; MPRINT(TAXSCF): WSINCOME=MAX(0,X5702); MPRINT(TAXSCF): WSINCSP=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF FILESTAT=2 THEN DO; MPRINT(TAXSCF): IF ((R_LABORINC > 0 & SP_LABORINC=0) | (R_LABORINC=0 & SP_LABORINC > 0) | (R_LABORINC=0 & SP_LABORINC=0)) THEN DO; MPRINT(TAXSCF): WSINCOME=MAX(0,X5702); MPRINT(TAXSCF): WSINCSP=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (R_LABORINC > 0 & SP_LABORINC > 0) THEN DO; MPRINT(TAXSCF): WSINCOME=MAX(0,X5702)*(R_LABORINC/(R_LABORINC+SP_LABORINC)); MPRINT(TAXSCF): WSINCSP=MAX(0,X5702)*(SP_LABORINC/(R_LABORINC+SP_LABORINC)); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TBUSINC = X5704; MPRINT(TAXSCF): NTAXINC= MAX(0,X5706); MPRINT(TAXSCF): INTINC= MAX(0,X5708); MPRINT(TAXSCF): DIVINC= MAX(0,X5710); MPRINT(TAXSCF): IF X5712=-1 THEN CAPGLINC=0; MPRINT(TAXSCF): ELSE CAPGLINC=X5712; MPRINT(TAXSCF): RENTINC= X5714; MPRINT(TAXSCF): UNEMPINC = MAX(0,X5716); MPRINT(TAXSCF): CHSPALINC=MAX(0,X5718); MPRINT(TAXSCF): AFDCINC = MAX(0,X5720); MPRINT(TAXSCF): * Starting in 2004, IRA/Keogh/401K type income is not reported in other income, instead withdrawals are reported separately during the questions about the assets, so need to add the withdrawals to pension income. There may be a few withdrawals still reported as other income if the asset account was closed or emptied out during the year prior to the survey.; MPRINT(TAXSCF): * also remove other income that is non-taxable, such as scholarships/grants, inheritances/gifts/, support from family or others; MPRINT(TAXSCF): * special fix for 1992, removing other income coded 14, repayment of debts, it appears the total amount of the debt was report, not just the interest on the debt; MPRINT(TAXSCF): IF X5725=14 THEN DO; MPRINT(TAXSCF): X5724=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF X5727=14 THEN DO; MPRINT(TAXSCF): X5726=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): OTHINC= (X5724)*(X5725 NOT IN(3 11 12 13 28))+(X5726)*(X5727 NOT IN(3 11 12 13 28)); MPRINT(TAXSCF): GSSINC=MAX(0,((X5306 MPRINT(ACONV): *((X5307=2)*52.18+(X5307=3)*26.09+(X5307=4)*12+(X5307=5)*4+(X5307=6)+(X5307=8)+ (X5307=11)*2+(X5307=12)*6+(X5307=31)*24+(X5307=14)+(X5307=22)) MPRINT(TAXSCF): *(X5305>=1))+(X5311 MPRINT(ACONV): *((X5312=2)*52.18+(X5312=3)*26.09+(X5312=4)*12+(X5312=5)*4+(X5312=6)+(X5312=8)+ (X5312=11)*2+(X5312=12)*6+(X5312=31)*24+(X5312=14)+(X5312=22)) MPRINT(TAXSCF): *(X5310>=1)))); MPRINT(TAXSCF): IF GSSINC=0 THEN PENINC= MAX(0,X5722)+R_WITHDRAW+SP_WITHDRAW; 499 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE IF (GSSINC > 0) THEN PENINC=MAX(0,(X5722-GSSINC)) +R_WITHDRAW+SP_WITHDRAW; MPRINT(TAXSCF): OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; MPRINT(TAXSCF): NONTAX=NTAXINC+AFDCINC; MPRINT(TAXSCF): RENT=MAX(0,(X602 MPRINT(ACONV): *((X603=2)*52.18+(X603=3)*26.09+(X603=4)*12+(X603=5)*4+(X603=6)+(X603=8)+ (X603=11)*2+(X603=12)*6+(X603=31)*24+(X603=14)+(X603=22)) MPRINT(TAXSCF): ),(X612 MPRINT(ACONV): *((X613=2)*52.18+(X613=3)*26.09+(X613=4)*12+(X613=5)*4+(X613=6)+(X613=8)+ (X613=11)*2+(X613=12)*6+(X613=31)*24+(X613=14)+(X613=22)) MPRINT(TAXSCF): ),(X619 MPRINT(ACONV): *((X620=2)*52.18+(X620=3)*26.09+(X620=4)*12+(X620=5)*4+(X620=6)+(X620=8)+ (X620=11)*2+(X620=12)*6+(X620=31)*24+(X620=14)+(X620=22)) MPRINT(TAXSCF): ), (X708 MPRINT(ACONV): *((X709=2)*52.18+(X709=3)*26.09+(X709=4)*12+(X709=5)*4+(X709=6)+(X709=8)+ (X709=11)*2+(X709=12)*6+(X709=31)*24+(X709=14)+(X709=22)) MPRINT(TAXSCF): )); MPRINT(TAXSCF): END; MPRINT(TAXSCF): * AGI - note that starting in 2010, AGI questions no longer asked, so using total income minus non-taxable income plus IRA/401k withdrawals as a proxy. No information on adjustments to AGI; MPRINT(TAXSCF): AGI=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC+UNEMPINC+CHSPALINC+OTHINC+PENINC+GSSINC; MPRINT(TAXSCF): IF AGI=-1 THEN AGI=0; MPRINT(TAXSCF): AGIGE50K=(AGI>=50000); MPRINT(TAXSCF): AGICL=1*(AGI < 50000)+2*(50000 <= AGI < 100000)+3*(AGI >= 100000); MPRINT(TAXSCF): * For allocating itemized deductions - mortgage interest, investment interest expense, property taxes, and charitable contributions - between new tax units, assume tax unit with higher income assigned all itemized deductions. Creating a flag here for use in computing deductions later in the program. Using wages, business, and pension income as income measure (all other income components are split 50/50 between the new tax units).; MPRINT(TAXSCF): IF (TAXUNIT IN(1 2)) THEN DO; MPRINT(TAXSCF): R_TINCOME=R_LABORINC+R_BUSINC+R_REGPEN+R_WITHDRAW; MPRINT(TAXSCF): SP_TINCOME=SP_LABORINC+SP_BUSINC+SP_REGPEN+SP_WITHDRAW; MPRINT(TAXSCF): ITEMDEDCT_FLAG=(TAXUNIT=1 & R_TINCOME >= SP_TINCOME) +(TAXUNIT=2 & SP_TINCOME > R_TINCOME); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TAXUNIT=0 THEN ITEMDEDCT_FLAG=1; MPRINT(TAXSCF): * Set personal exemption to one for split households, divide kids among split households, if one, give to both tax units, if even number, split evenly between tax units, if odd number, give more to higher income tax unit; MPRINT(TAXSCF): IF TAXUNIT IN(1 2) THEN DO; MPRINT(TAXSCF): PERSEXP=1; MPRINT(TAXSCF): IF KIDS>1 THEN DO; MPRINT(TAXSCF): IF (KIDSU13>0 & MOD(KIDSU13,2)=0) THEN KIDSU13=KIDSU13/2; MPRINT(TAXSCF): ELSE IF (KIDSU13>0 & MOD(KIDSU13,2)^=0) THEN DO; MPRINT(TAXSCF): KIDSU13=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU13/2,1))+ (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU13/2)-.5); MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (KIDSU17>0 & MOD(KIDSU17,2)=0) THEN KIDSU17=KIDSU17/2; MPRINT(TAXSCF): ELSE IF (KIDSU17>0 & MOD(KIDSU17,2)^=0) THEN DO; MPRINT(TAXSCF): KIDSU17=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU17/2,1))+ (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU17/2)-.5); MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (KIDSU18>0 & MOD(KIDSU18,2)=0) THEN KIDSU18=KIDSU18/2; MPRINT(TAXSCF): ELSE IF (KIDSU18>0 & MOD(KIDSU18,2)^=0) THEN DO; MPRINT(TAXSCF): KIDSU18=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU18/2,1))+ (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU18/2)-.5); MPRINT(TAXSCF): END; MPRINT(TAXSCF): KIDS=KIDSU13+KIDSU17+KIDSU18; 500 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF PERSEXP=1 & MARRIED=1 THEN FILESTAT=3; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS=0 & MARRIED=0 THEN FILESTAT=1; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS>0 & MARRIED=0 THEN FILESTAT=4; MPRINT(TAXSCF): TOTEXPT=PERSEXP+KIDS; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF FILESTAT=0 THEN PUT "MISSING FILING STATUS " Y1= X5744= X5746= TAXUNIT= MARRIED= KIDS= PERSEXP=; MPRINT(TAXSCF): RUN; NOTE: There were 20309 observations read from the data set WORK.SCF. NOTE: The data set WORK.SCF has 20309 observations and 4229 variables. NOTE: DATA statement used (Total process time): real time 0.37 seconds cpu time 0.37 seconds MPRINT(TAXSCF): * Create tax units based on NPEU members. If there are multiple NPEU members, need to allocate income, assets, and debt across the members; MPRINT(TAXSCF): DATA TEMP NPEU; MPRINT(TAXSCF): SET SCF(WHERE=(TAXUNIT IN(0 1) & X7050 >=1)); MPRINT(TAXSCF): file "null.txt"; MPRINT(TAXSCF): TAXUNIT=2; MPRINT(TAXSCF): ARRAY NPEUAGE {*} X110 X116 X122 X128 X134 X204 X210 X216 X222 X228; MPRINT(TAXSCF): ARRAY LIVEWITH {*} X112 X118 X124 X130 X136 X206 X212 X218 X224 X230; MPRINT(TAXSCF): ARRAY FINDEP {*} X113 X119 X125 X131 X137 X207 X213 X219 X225 X231; MPRINT(TAXSCF): DO I=1 TO DIM(LIVEWITH); MPRINT(TAXSCF): IF LIVEWITH{I} IN(1 2 3 4) & FINDEP{I} IN(2 3 4 5) THEN DO; MPRINT(TAXSCF): TAXUNIT=TAXUNIT+1; MPRINT(TAXSCF): TUAGE=NPEUAGE{I}; MPRINT(TAXSCF): SPAGE=0; MPRINT(TAXSCF): OUTPUT NPEU; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): RUN; NOTE: The file "null.txt" is: Filename=/disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code/null.txt, Owner Name=taxsim,Group Name=taxsim, Access Permission=-rw-r--r--, Last Modified=29Jan2021:13:36:16 NOTE: 0 records were written to the file "null.txt". NOTE: There were 19530 observations read from the data set WORK.SCF. WHERE TAXUNIT in (0, 1) and (X7050>=1); NOTE: The data set WORK.TEMP has 0 observations and 4229 variables. NOTE: The data set WORK.NPEU has 2825 observations and 4229 variables. NOTE: DATA statement used (Total process time): real time 0.17 seconds cpu time 0.18 seconds MPRINT(TAXSCF): DATA NPEU; MPRINT(TAXSCF): SET NPEU; MPRINT(TAXSCF): ARRAY INCTYPES {*} WSINCOME WSINCSP TBUSINC INTINC NTAXINC DIVINC RENTINC UNEMPINC AFDCINC GSSINC PENINC OTHINC CAPGLINC; MPRINT(TAXSCF): DO I=1 TO DIM(INCTYPES); MPRINT(TAXSCF): INCTYPES{I}=0; MPRINT(TAXSCF): END; 501 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): * Allocate NPEU wage income across all NPEU members less than 70 years old. If only other type of income is Social Security, allocate amount across NPEU members age 62 or more. Otherwise, allocate total amount of nonwage income divided by the number of other types of income to each type of income equally to each NPEU member; MPRINT(TAXSCF): NUMU70=(0=62 & X113=5)+(X116>=62 & X119=5)+(X122>=62 & X125=5) +(X128>=62 & X131=5)+(X134>=62 & X137=5)+(X204>=62 & X207=5) +(X210>=62 & X213=5)+(X216>=62 & X219=5)+(X222>=62 & X225=5); MPRINT(TAXSCF): NUMINCTYPES=(X6406=1)+(X6407=1)+(X6408=1)+(X6409=1)+(X6410=1)+(X6411=1) +(X6412=1)+(X6413=1)+(X6414 > 5); MPRINT(TAXSCF): IF (NUMU70 > 0) THEN WSINCOME=(MAX(0,X6403)/NUMU70)*(TUAGE < 70); MPRINT(TAXSCF): ELSE WSINCOME=(MAX(0,X6403)/X7050); MPRINT(TAXSCF): IF (X6415 > 0 & NUMINCTYPES > 0) THEN DO; MPRINT(TAXSCF): IF (NUMGE62 > 0) THEN GSSINC=(X6406=1)*((MAX(0,X6415)/(NUMINCTYPES))/NUMGE62)*(TUAGE>=62); MPRINT(TAXSCF): ELSE GSSINC=(X6406=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): TBUSINC=(X6412=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): INTINC=(X6410=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): DIVINC=(X6411=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): RENTINC=(X6413=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): PENINC=(X6407=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050) +(X6408=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): AFDCINC=(X6409=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): CAPGLINC=(X6414 IN(13))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): UNEMPINC=(X6414 IN(10))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): OTHINC=(X6414 IN(11 12 15))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): END; MPRINT(TAXSCF): OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; MPRINT(TAXSCF): NONTAX=NTAXINC+AFDCINC; MPRINT(TAXSCF): * All NPEU tax units take the standard deduction, have one personal exemption, and have filing status of single; MPRINT(TAXSCF): ITEMDEDCT_FLAG=0; MPRINT(TAXSCF): PERSEXP=1; MPRINT(TAXSCF): TOTEXPT=1; MPRINT(TAXSCF): KIDS=0; MPRINT(TAXSCF): KIDSU13=0; MPRINT(TAXSCF): KIDSU17=0; MPRINT(TAXSCF): KIDSU18=0; MPRINT(TAXSCF): FILESTAT=1; MPRINT(TAXSCF): AGI=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC+UNEMPINC+CHSPALINC+OTHINC+PENINC+GSSINC; MPRINT(TAXSCF): IF AGI=-1 THEN AGI=0; MPRINT(TAXSCF): AGIGE50K=(AGI>=50000); MPRINT(TAXSCF): AGICL=1*(AGI < 50000)+2*(50000 <= AGI < 100000)+3*(AGI >= 100000); MPRINT(TAXSCF): RUN; NOTE: There were 2825 observations read from the data set WORK.NPEU. NOTE: The data set WORK.NPEU has 2825 observations and 4232 variables. NOTE: DATA statement used (Total process time): real time 0.06 seconds cpu time 0.06 seconds MPRINT(TAXSCF): * Add NPEU tax units; MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF NPEU; MPRINT(TAXSCF): RUN; NOTE: There were 20309 observations read from the data set WORK.SCF. NOTE: There were 2825 observations read from the data set WORK.NPEU. NOTE: The data set WORK.SCF has 23134 observations and 4232 variables. NOTE: DATA statement used (Total process time): 502 The SAS System 13:32 Friday, January 29, 2021 real time 0.36 seconds cpu time 0.35 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): ************Itemized deductions; MPRINT(TAXSCF): IF ITEMDEDCT_FLAG=1 THEN DO; MPRINT(TAXSCF): ************Mortgage interest deduction; MPRINT(TAXSCF): * Convert real estate taxes on primary residence into a yearly amount; MPRINT(TAXSCF): RESTAXM1=0; MPRINT(TAXSCF): IF (X721 > 0) THEN DO; MPRINT(TAXSCF): RESTAXM1=X721 MPRINT(ACONV): *((X722=2)*52.18+(X722=3)*26.09+(X722=4)*12+(X722=5)*4+(X722=6)+(X722=8)+ (X722=11)*2+(X722=12)*6+(X722=31)*24+(X722=14)+(X722=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Create arrays for various mortgage loan components; MPRINT(TAXSCF): ARRAY TLMTH {*} TLMTHM1 TLMTHM2 TLMTHM3; MPRINT(TAXSCF): ARRAY CMOPAY {*} CMOPAYM1 CMOPAYM2 CMOPAYM3; MPRINT(TAXSCF): ARRAY PAYLFT {*} PAYLFTM1 PAYLFTM2 PAYLFTM3; MPRINT(TAXSCF): ARRAY AMTOWE {*} AMTOWEM1 AMTOWEM2 AMTOWEM3; MPRINT(TAXSCF): ARRAY AMTOWE_1 {*} AMTOWE_1M1 AMTOWE_1M2 AMTOWE_1M3; MPRINT(TAXSCF): ARRAY AINTDCT {*} AINTDCTM1 AINTDCTM2 AINTDCTM3; MPRINT(TAXSCF): ARRAY LNAGE {*} LNAGEM1 LNAGEM2 LNAGEM3; MPRINT(TAXSCF): ARRAY CURBAL {*} CURBALM1 CURBALM2 CURBALM3; MPRINT(TAXSCF): ARRAY CURBAL_1 {*} CURBAL_1M1 CURBAL_1M2 CURBAL_1M3; MPRINT(TAXSCF): ARRAY CINTDCT {*} CINTDCTM1 CINTDCTM2 CINTDCTM3; MPRINT(TAXSCF): ARRAY DCTDIFF {*} DCTDIFFM1 DCTDIFFM2 DCTDIFFM3; MPRINT(TAXSCF): ARRAY SINTDCT {*} SINTDCTM1 SINTDCTM2 SINTDCTM3; MPRINT(TAXSCF): ARRAY AVINTDCT {*} AVINTDCTM1 AVINTDCTM2 AVINTDCTM3; MPRINT(TAXSCF): ARRAY NMPMT {*} X807 X907 X1007; MPRINT(TAXSCF): ARRAY NMYR {*} X806 X906 X1006; MPRINT(TAXSCF): ARRAY REGPAYF {*} X809 X909 X1009; MPRINT(TAXSCF): ARRAY REGPAY {*} X808 X908 X1008; MPRINT(TAXSCF): ARRAY TYPAYF {*} X814 X914 X1014; MPRINT(TAXSCF): ARRAY TYPAY {*} X813 X913 X1013; MPRINT(TAXSCF): ARRAY LNSTMN {*} X801 X901 X1001; MPRINT(TAXSCF): ARRAY LNSTYR {*} X802 X902 X1002; MPRINT(TAXSCF): ARRAY HBALLN {*} X811 X911 X1011; MPRINT(TAXSCF): ARRAY BALLN {*} X812 X912 X1012; MPRINT(TAXSCF): ARRAY HAVELN {*} X723 X830 X931; MPRINT(TAXSCF): ARRAY AMTBORR {*} X804 X904 X1004; MPRINT(TAXSCF): ARRAY JAMTBORR {*} J804 J904 J1004; MPRINT(TAXSCF): ARRAY AMTOUT {*} X805 X905 X1005; MPRINT(TAXSCF): ARRAY JAMTOUT {*} J805 J905 J1005; MPRINT(TAXSCF): ARRAY INTRATE {*} X816 X916 X1016; MPRINT(TAXSCF): ARRAY ONSCHED {*} X7571 X7570 X7569; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTH); MPRINT(TAXSCF): TLMTH{I}=0; MPRINT(TAXSCF): CMOPAY{I}=0; MPRINT(TAXSCF): PAYLFT{I}=0; MPRINT(TAXSCF): AMTOWE{I}=0; MPRINT(TAXSCF): AMTOWE_1{I}=0; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): LNAGE{I}=0; MPRINT(TAXSCF): CURBAL{I}=0; 503 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): CURBAL_1{I}=0; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): DCTDIFF{I}=0; MPRINT(TAXSCF): SINTDCT{I}=0; MPRINT(TAXSCF): AVINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): NUMORT=(X723=1)+(X830=1)+(X931=1); MPRINT(TAXSCF): TOTAMTOUTM=0; MPRINT(TAXSCF): TOTDEDCTM=0; MPRINT(TAXSCF): GRFAMTOUTM=0; MPRINT(TAXSCF): A17AMTOUTM=0; MPRINT(TAXSCF): HAAMTOUTM=0; MPRINT(TAXSCF): DO I=1 TO DIM(NMPMT); MPRINT(TERMCON): IF (NMYR{I}=0 & NMPMT{I}=0) THEN DO; MPRINT(TERMCON): TLMTH{I}=0; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYR{I}^=0|NMPMT{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYR{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYR{I}=-1) THEN DO; MPRINT(TERMCON): TLMTH{I}=NMYR{I}; MPRINT(TERMCON): IF (NMPMT{I}=0) THEN DO; MPRINT(TERMCON): NMPMT{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYR{I}>0) THEN DO; MPRINT(TERMCON): TLMTH{I}=NMYR{I}*12; MPRINT(TERMCON): IF (NMPMT{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYF{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMT{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYF{I}=-7) THEN DO; MPRINT(TERMCON): NMPMT{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYF{I}=8) THEN DO; MPRINT(TERMCON): NMPMT{I}=1; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYF{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYF{I}=1) THEN NMPMT{I}=TLMTH{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=2) THEN NMPMT{I}=TLMTH{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=3) THEN NMPMT{I}=TLMTH{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=4) THEN NMPMT{I}=TLMTH{I}; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=5) THEN NMPMT{I}=TLMTH{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=6) THEN NMPMT{I}=TLMTH{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=20) THEN NMPMT{I}=TLMTH{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=21) THEN NMPMT{I}=TLMTH{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=11) THEN NMPMT{I}=TLMTH{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=12) THEN NMPMT{I}=TLMTH{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=23) THEN NMPMT{I}=TLMTH{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=24) THEN NMPMT{I}=TLMTH{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=25) THEN NMPMT{I}=TLMTH{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=31) THEN NMPMT{I}=TLMTH{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=18) THEN NMPMT{I}=TLMTH{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=0) THEN NMPMT{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYF{I}>.Z & REGPAYF{I}^=-1 & REGPAYF{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMT{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTH{I}= REGPAYF{I}= NMPMT{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTH{I}>.Z & TLMTH{I}<-2) THEN DO; 504 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): NMPMT{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTH{I}= REGPAYF{I}= NMPMT{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTH{I}<=.Z) THEN NMPMT{I}=TLMTH{I}; MPRINT(MOCONV): ELSE IF (TLMTH{I}^=-1 & TLMTH{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYF{I}= TLMTH{I}= "SETTING AMT=."; MPRINT(MOCONV): NMPMT{I}=.; MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMT{I}=-1) THEN DO; MPRINT(TERMCON): TLMTH{I}=-1; MPRINT(TERMCON): IF (NMYR{I}=0) THEN DO; MPRINT(TERMCON): NMYR{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMT{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYF{I}; MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYF{I}>0) THEN PFREQ=TYPAYF{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTH{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; MPRINT(TERMCON): TLMTH{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): IF (NMPMT{I}>0) THEN DO; MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTH{I}=NMPMT{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}))); MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12))); MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTH{I}=NMPMT{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTH{I}=NMPMT{I}*2/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTH{I}=NMPMT{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTH{I}=NMPMT{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTH{I}=NMPMT{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTH{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): TLMTH{I}=NMPMT{I}; MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMT{I}= PFREQ= TLMTH{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMT{I}>.Z & NMPMT{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTH{I}=NMPMT{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMT{I}= PFREQ= TLMTH{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMT{I}=0) THEN TLMTH{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMT{I}<=.Z) THEN TLMTH{I}=NMPMT{I}; MPRINT(IMOCONV): ELSE IF (NMPMT{I}^=-1 & NMPMT{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMT{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTH{I}=.; 505 The SAS System 13:32 Friday, January 29, 2021 MPRINT(IMOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTH{I}>0) THEN DO; MPRINT(TERMCON): NMYR{I}=MAX(1,INT(.5+(TLMTH{I}/12))); MPRINT(TERMCON): TLMTH{I}=MAX(1,ROUND(TLMTH{I})); MPRINT(TERMCON): END; MPRINT(TERMCON): IF (NMYR{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMT{I}= NMYR{I}= TLMTH{I}= REGPAYF{I}= REGPAY{I}= TYPAYF{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAY{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYF{I}=1) THEN CMOPAY{I}=REGPAY{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=2) THEN CMOPAY{I}=REGPAY{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=3) THEN CMOPAY{I}=REGPAY{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=4) THEN CMOPAY{I}=REGPAY{I}; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=5) THEN CMOPAY{I}=REGPAY{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=6) THEN CMOPAY{I}=REGPAY{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=20) THEN CMOPAY{I}=REGPAY{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=21) THEN CMOPAY{I}=REGPAY{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=8) THEN CMOPAY{I}=REGPAY{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=11) THEN CMOPAY{I}=REGPAY{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=12) THEN CMOPAY{I}=REGPAY{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=23) THEN CMOPAY{I}=REGPAY{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=24) THEN CMOPAY{I}=REGPAY{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=25) THEN CMOPAY{I}=REGPAY{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=31) THEN CMOPAY{I}=REGPAY{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=18) THEN CMOPAY{I}=REGPAY{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=0) THEN CMOPAY{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYF{I}>.Z & REGPAYF{I}^=-1 & REGPAYF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAY{I}= REGPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAY{I}>.Z & REGPAY{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAY{I}= REGPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAY{I}<=.Z) THEN CMOPAY{I}=REGPAY{I}; MPRINT(MOCONV): ELSE IF (REGPAY{I}^=-1 & REGPAY{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYF{I}= REGPAY{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(MOCONV): IF (TYPAYF{I}=1) THEN CMOPAY{I}=TYPAY{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=2) THEN CMOPAY{I}=TYPAY{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=3) THEN CMOPAY{I}=TYPAY{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=4) THEN CMOPAY{I}=TYPAY{I}; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=5) THEN CMOPAY{I}=TYPAY{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=6) THEN CMOPAY{I}=TYPAY{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=20) THEN CMOPAY{I}=TYPAY{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=21) THEN CMOPAY{I}=TYPAY{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=8) THEN CMOPAY{I}=TYPAY{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=11) THEN CMOPAY{I}=TYPAY{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=12) THEN CMOPAY{I}=TYPAY{I}*(52/52)/2; 506 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (TYPAYF{I}=23) THEN CMOPAY{I}=TYPAY{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=24) THEN CMOPAY{I}=TYPAY{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=25) THEN CMOPAY{I}=TYPAY{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=31) THEN CMOPAY{I}=TYPAY{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=18) THEN CMOPAY{I}=TYPAY{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=0) THEN CMOPAY{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYF{I}>.Z & TYPAYF{I}^=-1 & TYPAYF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAY{I}= TYPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAY{I}>.Z & TYPAY{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAY{I}= TYPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAY{I}<=.Z) THEN CMOPAY{I}=TYPAY{I}; MPRINT(MOCONV): ELSE IF (TYPAY{I}^=-1 & TYPAY{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYF{I}= TYPAY{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF NMYR{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFT{I}=(TLMTH{I}-((1992-LNSTYR{I})*12)); MPRINT(TAXSCF): LNAGE{I}=TLMTH{I}-PAYLFT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFT{I}=0; MPRINT(TAXSCF): LNAGE{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): file "null.txt"; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((X723=1) & (X810 IN(1 2 3)) & TLMTHM1 > 0 & X816 > 0) THEN DO; MPRINT(TAXSCF): IF (X811=1) THEN DO; MPRINT(MORTPAY): AMOPAYM1=ROUND((MORT((X804),.,((X816/10000)/12),(TLMTHM1))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (CMOPAYM1 > AMOPAYM1) THEN CMOPAYM1=AMOPAYM1; MPRINT(TAXSCF): 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= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X811=2) THEN DO; MPRINT(TAXSCF): IF (X804 > X812) THEN ADJBORR=X804-X812; MPRINT(TAXSCF): ELSE IF (X804 < X812) THEN ADJBORR=X804; MPRINT(TAXSCF): IF ADJBORR > 0 THEN MPRINT(MORTPAY): AMOPAYM1=ROUND((MORT((ADJBORR),.,((X816/10000)/12),(TLMTHM1))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (X804=X812) THEN AMOPAYM1=((X804)*(X816/10000))/12; MPRINT(TAXSCF): IF (CMOPAYM1 > AMOPAYM1) THEN CMOPAYM1=AMOPAYM1; MPRINT(TAXSCF): 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= /; 507 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * 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); MPRINT(TAXSCF): * NOT INCLUDING LAND CONTRACTS; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELN); MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTDCT{I}=CMOPAY{I}*12; MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELN{I}=1 & HBALLN{I} IN(1 2) & NMYR{I} NOT IN(0 -1 -7) & INTRATE{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & PAYLFT{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAY{I} < AMTBORR{I}*.005) THEN CMOPAY{I}=MAX(REGPAY{I},TYPAY{I}); MPRINT(TAXSCF): 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})); MPRINT(TAXSCF): 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))); MPRINT(TAXSCF): IF LNSTYR{I}^=1992 THEN AINTDCT{I}=(CMOPAY{I}*12)-(AMTOWE_1{I}-AMTOWE{I}); MPRINT(TAXSCF): ELSE IF LNSTYR{I}=1992 THEN AINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTH{I} < 0 | CMOPAY{I} < 0 | PAYLFT{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWE{I}=0; MPRINT(TAXSCF): AMTOWE_1{I}=0; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & AMTBORR{I} > 0 & LNAGE{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTDCT{I}=(CMOPAY{I}*12)-(CURBAL_1{I}-CURBAL{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTH{I} < 0 | AMTBORR{I} < 0 | LNAGE{I} < 0) THEN DO; MPRINT(TAXSCF): CURBAL{I}=0; MPRINT(TAXSCF): CURBAL_1{I}=0; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUT{I} > 0 & INTRATE{I} > 0) THEN SINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): ELSE SINTDCT{I}=0; MPRINT(TAXSCF): * 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 the home was not purchased in the survey year. If the home was purchased in the survey year, set deduction to zero.; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & PAYLFT{I}=0) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=CURBAL_1{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): AINTDCT{I}=CINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & LNSTYR{I}=1992 & X720=1992) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): AINTDCT{I}=0; 508 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): SINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & LNSTYR{I}=1992) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTDCT{I} < 0 | CINTDCT{I} < 0) & CURBAL{I} > 0 & CURBAL_1{I} > 0) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=CURBAL_1{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): AINTDCT{I}=CINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTDCT{I} < 0 | CINTDCT{I} < 0) & (CURBAL{I} <= 0 & CURBAL_1{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCT{I} > 0 & CINTDCT{I} > 0) THEN DCTDIFF{I}=CINTDCT{I}-SINTDCT{I}; MPRINT(TAXSCF): ELSE DCTDIFF{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELN{I}=1 & (NMYR{I} IN(-1 -7) | NMPMT{I} IN(-1 -7)) & AMTOUT{I} > 0 & INTRATE{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELN{I}=1 & (INTRATE{I}=-1)) THEN DO; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): SINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest deduction; MPRINT(TAXSCF): IF ((CINTDCT{I} + AINTDCT{I} + SINTDCT{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTDCT{I}=(CINTDCT{I}+AINTDCT{I}+SINTDCT{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTDCT{I}=0; MPRINT(TAXSCF): * Constraining interest deduction amount to be no more than the reported year 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.; MPRINT(TAXSCF): IF (HAVELN{I}=1 & AVINTDCT{I} > 0 & CMOPAY{I} > 0 & (AVINTDCT{I} > CMOPAY{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTDCT{I}=CMOPAY{I}*12; MPRINT(TAXSCF): CINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): SINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELN{I}=1 & AVINTDCT{I} > 0 & AMTOUT{I} > 0 & (AVINTDCT{I} > .25*AMTOUT{I})) THEN DO; MPRINT(TAXSCF): AVINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): CINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELN{I}=1 & Y1=YY1*10+1 & AVINTDCT{I}=0 & NMYR{I}^=1992) 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}= /; MPRINT(TAXSCF): * 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; MPRINT(TAXSCF): IF (X702=1 & X714=1 & X7135=5) THEN DO; 509 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): TOTDEDCTM=TOTDEDCTM+(AVINTDCT{I}/X715)*(HAVELN{I}=1); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE TOTDEDCTM=TOTDEDCTM+AVINTDCT{I}; MPRINT(TAXSCF): * Total amount outstanding on loans; MPRINT(TAXSCF): TOTAMTOUTM=TOTAMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): * Need to divide mortgages up by date, pre 10/13/87 mortgages are considered grandfathered debt by IRS, and different limits apply to mortgages taken out after 12/15/2017; MPRINT(TAXSCF): IF ((LNSTYR{I}=1987 & LNSTMN{I} < 10) | (LNSTYR{I} < 1987)) THEN DO; MPRINT(TAXSCF): GRFAMTOUTM=GRFAMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((LNSTYR{I}=2017 & LNSTMN{I}=12) | (LNSTYR{I} > 2017)) THEN DO; MPRINT(TAXSCF): A17AMTOUTM=A17AMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((LNSTYR{I}=1987 & LNSTMN {I} >= 10) | (1987 < LNSTYR{I} < 2017) | (LNSTYR{I}=2017 & LNSTMN{I}<=11)) THEN DO; MPRINT(TAXSCF): HAAMTOUTM=HAAMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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, 3, or 4 as home acquisition debt (same as a mortgage, counts toward mortgage balance limit), while HELOCs with other use codes counted as home equity debt. Ignoring the mopup as we dont know if that LOC is secured by a home; MPRINT(TAXSCF): ARRAY CMOPAYL {*} CMOPAYL1 CMOPAYL2 CMOPAYL3; MPRINT(TAXSCF): ARRAY SINTDCTL {*} SINTDCTL1 SINTDCTL2 SINTDCTL3; MPRINT(TAXSCF): ARRAY AQDBT {*} AQDBTL1 AQDBTL2 AQDBTL3; MPRINT(TAXSCF): ARRAY AQINT {*} AQINTL1 AQINTL2 AQINTL3; MPRINT(TAXSCF): ARRAY EQDBT {*} EQDBTL1 EQDBTL2 EQDBTL3; MPRINT(TAXSCF): ARRAY SBYHOME {*} X1103 X1114 X1125; MPRINT(TAXSCF): ARRAY DOOWE {*} X1105 X1116 X1127; MPRINT(TAXSCF): ARRAY LNPURP {*} X1106 X1117 X1128; MPRINT(TAXSCF): ARRAY AMTOUTL {*} X1108 X1119 X1130; MPRINT(TAXSCF): ARRAY TYPAYL {*} X1109 X1120 X1131; MPRINT(TAXSCF): ARRAY TYPAYLF {*} X1110 X1121 X1132; MPRINT(TAXSCF): ARRAY INTRATEL {*} X1111 X1122 X1133; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): TOTAQDBTL=0; MPRINT(TAXSCF): TOTEQDBTL=0; MPRINT(TAXSCF): TOTDEDCTL=0; MPRINT(TAXSCF): TOTAQDEDCTL=0; MPRINT(TAXSCF): TOTLOCINVEX=0; MPRINT(TAXSCF): DO I=1 TO DIM(CMOPAYL); MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): AQDBT{I}=0; MPRINT(TAXSCF): AQINT{I}=0; MPRINT(TAXSCF): EQDBT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (X1101=1) THEN DO; MPRINT(TAXSCF): DO I=1 TO DIM(SBYHOME); MPRINT(TAXSCF): IF (SBYHOME{I}=1 & DOOWE{I}=1) THEN DO; MPRINT(TAXSCF): IF (TYPAYL{I} > 0) THEN DO; MPRINT(MOCONV): IF (TYPAYLF{I}=1) THEN CMOPAYL{I}=TYPAYL{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=2) THEN CMOPAYL{I}=TYPAYL{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=3) THEN CMOPAYL{I}=TYPAYL{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=4) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=5) THEN CMOPAYL{I}=TYPAYL{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=6) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=20) THEN CMOPAYL{I}=TYPAYL{I}*10/12; 510 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=21) THEN CMOPAYL{I}=TYPAYL{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=8) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=11) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=12) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=23) THEN CMOPAYL{I}=TYPAYL{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=24) THEN CMOPAYL{I}=TYPAYL{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=25) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=31) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=18) THEN CMOPAYL{I}=TYPAYL{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=0) THEN CMOPAYL{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}>.Z & TYPAYLF{I}^=-1 & TYPAYLF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}>.Z & TYPAYL{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}<=.Z) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYL{I}^=-1 & TYPAYL{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYLF{I}= TYPAYL{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TYPAYL{I} IN(0 -1 -2)) THEN DO; MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (INTRATEL{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=((INTRATEL{I}/10000)*AMTOUTL{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEL{I} IN(0 -1)) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTL{I} > 0 & CMOPAYL{I} > 0 & SINTDCTL{I} > CMOPAYL{I}*12) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=CMOPAYL{I}*12; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (LNPURP{I} IN(1 3 4)) THEN DO; MPRINT(TAXSCF): AQDBT{I}=AMTOUTL{I}; MPRINT(TAXSCF): AQINT{I}=SINTDCTL{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (LNPURP{I} NOT IN(1 3 4)) THEN DO; MPRINT(TAXSCF): EQDBT{I}=AMTOUTL{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTDEDCTL=TOTDEDCTL+SINTDCTL{I}; MPRINT(TAXSCF): TOTAQDEDCTL=TOTAQDEDCTL+AQINT{I}; MPRINT(TAXSCF): TOTAQDBTL=TOTAQDBTL+AQDBT{I}; MPRINT(TAXSCF): TOTEQDBTL=TOTEQDBTL+EQDBT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * Dropped third column of grid for 2010 forward; MPRINT(TAXSCF): * Create arrays for various other property loan components; MPRINT(TAXSCF): ARRAY TLMTHO {*} TLMTHO1 TLMTHO2 TLMTHO3; MPRINT(TAXSCF): ARRAY CMOPAYO {*} CMOPAYO1 CMOPAYO2 CMOPAYO3; MPRINT(TAXSCF): ARRAY AMOPAYO {*} AMOPAYO1 AMOPAYO2 AMOPAYO3; 511 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ARRAY PAYLFTO {*} PAYLFTO1 PAYLFTO2 PAYLFTO3; MPRINT(TAXSCF): ARRAY AMTOWEO {*} AMTOWEO1 AMTOWEO2 AMTOWEO3; MPRINT(TAXSCF): ARRAY AMTOWE_1O {*} AMTOWE_1O1 AMTOWE_1O2 AMTOWE_1O3; MPRINT(TAXSCF): ARRAY AINTDCTO {*} AINTDCTO1 AINTDCTO2 AINTDCTO3; MPRINT(TAXSCF): ARRAY LNAGEO {*} LNAGEO1 LNAGEO2 LNAGEO3; MPRINT(TAXSCF): ARRAY CURBALO {*} CURBALO1 CURBALO2 CURBALO3; MPRINT(TAXSCF): ARRAY CURBAL_1O {*} CURBAL_1O1 CURBAL_1O2 CURBAL_1O3; MPRINT(TAXSCF): ARRAY CINTDCTO {*} CINTDCTO1 CINTDCTO2 CINTDCTO3; MPRINT(TAXSCF): ARRAY DCTDIFFO {*} DCTDIFFO1 DCTDIFFO2 DCTDIFFO3; MPRINT(TAXSCF): ARRAY SINTDCTO {*} SINTDCTO1 SINTDCTO2 SINTDCTO3; MPRINT(TAXSCF): ARRAY AVINTDCTO {*} AVINTDCTO1 AVINTDCTO2 AVINTDCTO3; MPRINT(TAXSCF): ARRAY QUALPROP {*} QPROP1 QPROP2 QPROP3; MPRINT(TAXSCF): ARRAY QUALPINV {*} QPINV1 QPINV2 QPINV3; MPRINT(TAXSCF): ARRAY ADJBORRO {*} ADJBORRO1 ADJBORRO2 ADJBORRO3; MPRINT(TAXSCF): ARRAY NMPMTO {*} X1717 X1817 X1917; MPRINT(TAXSCF): ARRAY NMYRO {*} X1716 X1816 X1916; MPRINT(TAXSCF): ARRAY REGPAYFO {*} X1719 X1819 X1919; MPRINT(TAXSCF): ARRAY REGPAYO {*} X1718 X1818 X1918; MPRINT(TAXSCF): ARRAY TYPAYFO {*} X1724 X1824 X1924; MPRINT(TAXSCF): ARRAY TYPAYO {*} X1723 X1823 X1923; MPRINT(TAXSCF): ARRAY LNSTMNO {*} X1712 X1812 X1912; MPRINT(TAXSCF): ARRAY LNSTYRO {*} X1713 X1813 X1913; MPRINT(TAXSCF): ARRAY HBALLNO {*} X1721 X1821 X1921; MPRINT(TAXSCF): ARRAY BALLNO {*} X1722 X1822 X1922; MPRINT(TAXSCF): ARRAY AMTBORRO {*} X1714 X1814 X1914; MPRINT(TAXSCF): ARRAY JAMTBORRO {*} J1714 J1814 J1914; MPRINT(TAXSCF): ARRAY AMTOUTO {*} X1715 X1815 X1915; MPRINT(TAXSCF): ARRAY JAMTOUTO {*} J1715 J1815 J1915; MPRINT(TAXSCF): ARRAY HAVELNO {*} X1711 X1811 X1911; MPRINT(TAXSCF): ARRAY INTRATEO {*} X1726 X1826 X1926; MPRINT(TAXSCF): ARRAY ONSCHEDO {*} X7554 X7553 X7552; MPRINT(TAXSCF): ARRAY HINCOMEO {*} X1729 X1829 X1929; MPRINT(TAXSCF): ARRAY INCOMEO {*} X1730 X1830 X1930; MPRINT(TAXSCF): ARRAY PROPTYPE {*} X1703 X1803 X1903; MPRINT(TAXSCF): ARRAY PERPROP {*} X1705 X1805 X1905; MPRINT(TAXSCF): ARRAY PROPVAL {*} X1706 X1806 X1906; MPRINT(TAXSCF): ARRAY TAXINS {*} X1720 X1820 X1920; MPRINT(TAXSCF): ARRAY PURCHYRO {*} X1708 X1808 X1908; MPRINT(TAXSCF): ARRAY LIMFLAG {*} LIMFL1 LIMFL2 LIMFL3; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTHO); MPRINT(TAXSCF): TLMTHO{I}=0; MPRINT(TAXSCF): CMOPAYO{I}=0; MPRINT(TAXSCF): PAYLFTO{I}=0; MPRINT(TAXSCF): AMTOWEO{I}=0; MPRINT(TAXSCF): AMTOWE_1O{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): LNAGEO{I}=0; MPRINT(TAXSCF): CURBALO{I}=0; MPRINT(TAXSCF): CURBAL_1O{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): DCTDIFFO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): AVINTDCTO{I}=0; MPRINT(TAXSCF): QUALPROP{I}=0; MPRINT(TAXSCF): QUALPINV{I}=0; MPRINT(TAXSCF): ADJBORRO{I}=0; MPRINT(TAXSCF): LIMFLAG{I}=0; 512 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTAMTOUTO=0; MPRINT(TAXSCF): TOTDEDCTO=0; MPRINT(TAXSCF): QUALOTHPROP=0; MPRINT(TAXSCF): QUALINVPROP=0; MPRINT(TAXSCF): TOTINVPDCT=0; MPRINT(TAXSCF): FMVOP=0; MPRINT(TAXSCF): DO I=1 TO DIM(NMPMTO); MPRINT(TERMCON): IF (NMYRO{I}=0 & NMPMTO{I}=0) THEN DO; MPRINT(TERMCON): TLMTHO{I}=0; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRO{I}^=0|NMPMTO{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRO{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRO{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHO{I}=NMYRO{I}; MPRINT(TERMCON): IF (NMPMTO{I}=0) THEN DO; MPRINT(TERMCON): NMPMTO{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRO{I}>0) THEN DO; MPRINT(TERMCON): TLMTHO{I}=NMYRO{I}*12; MPRINT(TERMCON): IF (NMPMTO{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYFO{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMTO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFO{I}=-7) THEN DO; MPRINT(TERMCON): NMPMTO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFO{I}=8) THEN DO; MPRINT(TERMCON): NMPMTO{I}=1; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFO{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYFO{I}=1) THEN NMPMTO{I}=TLMTHO{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=2) THEN NMPMTO{I}=TLMTHO{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=3) THEN NMPMTO{I}=TLMTHO{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=4) THEN NMPMTO{I}=TLMTHO{I}; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=5) THEN NMPMTO{I}=TLMTHO{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=6) THEN NMPMTO{I}=TLMTHO{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=20) THEN NMPMTO{I}=TLMTHO{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=21) THEN NMPMTO{I}=TLMTHO{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=11) THEN NMPMTO{I}=TLMTHO{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=12) THEN NMPMTO{I}=TLMTHO{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=23) THEN NMPMTO{I}=TLMTHO{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=24) THEN NMPMTO{I}=TLMTHO{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=25) THEN NMPMTO{I}=TLMTHO{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=31) THEN NMPMTO{I}=TLMTHO{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=18) THEN NMPMTO{I}=TLMTHO{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=0) THEN NMPMTO{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}>.Z & REGPAYFO{I}^=-1 & REGPAYFO{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMTO{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTHO{I}= REGPAYFO{I}= NMPMTO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHO{I}>.Z & TLMTHO{I}<-2) THEN DO; MPRINT(MOCONV): NMPMTO{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTHO{I}= REGPAYFO{I}= NMPMTO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHO{I}<=.Z) THEN NMPMTO{I}=TLMTHO{I}; MPRINT(MOCONV): ELSE IF (TLMTHO{I}^=-1 & TLMTHO{I}^=-2) THEN DO; 513 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFO{I}= TLMTHO{I}= "SETTING AMT=."; MPRINT(MOCONV): NMPMTO{I}=.; MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTO{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHO{I}=-1; MPRINT(TERMCON): IF (NMYRO{I}=0) THEN DO; MPRINT(TERMCON): NMYRO{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTO{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYFO{I}; MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYFO{I}>0) THEN PFREQ=TYPAYFO{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTHO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; MPRINT(TERMCON): TLMTHO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): IF (NMPMTO{I}>0) THEN DO; MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTHO{I}=NMPMTO{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}))); MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12))); MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTHO{I}=NMPMTO{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTHO{I}=NMPMTO{I}*2/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTHO{I}=NMPMTO{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTHO{I}=NMPMTO{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTHO{I}=NMPMTO{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTHO{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): TLMTHO{I}=NMPMTO{I}; MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMTO{I}= PFREQ= TLMTHO{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}>.Z & NMPMTO{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTHO{I}=NMPMTO{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMTO{I}= PFREQ= TLMTHO{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}=0) THEN TLMTHO{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}<=.Z) THEN TLMTHO{I}=NMPMTO{I}; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}^=-1 & NMPMTO{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMTO{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTHO{I}=.; MPRINT(IMOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTHO{I}>0) THEN DO; MPRINT(TERMCON): NMYRO{I}=MAX(1,INT(.5+(TLMTHO{I}/12))); 514 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TERMCON): TLMTHO{I}=MAX(1,ROUND(TLMTHO{I})); MPRINT(TERMCON): END; MPRINT(TERMCON): IF (NMYRO{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMTO{I}= NMYRO{I}= TLMTHO{I}= REGPAYFO{I}= REGPAYO{I}= TYPAYFO{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAYO{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYFO{I}=1) THEN CMOPAYO{I}=REGPAYO{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=2) THEN CMOPAYO{I}=REGPAYO{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=3) THEN CMOPAYO{I}=REGPAYO{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=4) THEN CMOPAYO{I}=REGPAYO{I}; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=5) THEN CMOPAYO{I}=REGPAYO{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=6) THEN CMOPAYO{I}=REGPAYO{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=20) THEN CMOPAYO{I}=REGPAYO{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=21) THEN CMOPAYO{I}=REGPAYO{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=8) THEN CMOPAYO{I}=REGPAYO{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=11) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=12) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=23) THEN CMOPAYO{I}=REGPAYO{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=24) THEN CMOPAYO{I}=REGPAYO{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=25) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=31) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=18) THEN CMOPAYO{I}=REGPAYO{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=0) THEN CMOPAYO{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}>.Z & REGPAYFO{I}^=-1 & REGPAYFO{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAYO{I}= REGPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYO{I}>.Z & REGPAYO{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAYO{I}= REGPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYO{I}<=.Z) THEN CMOPAYO{I}=REGPAYO{I}; MPRINT(MOCONV): ELSE IF (REGPAYO{I}^=-1 & REGPAYO{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFO{I}= REGPAYO{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(MOCONV): IF (TYPAYFO{I}=1) THEN CMOPAYO{I}=TYPAYO{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=2) THEN CMOPAYO{I}=TYPAYO{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=3) THEN CMOPAYO{I}=TYPAYO{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=4) THEN CMOPAYO{I}=TYPAYO{I}; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=5) THEN CMOPAYO{I}=TYPAYO{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=6) THEN CMOPAYO{I}=TYPAYO{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=20) THEN CMOPAYO{I}=TYPAYO{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=21) THEN CMOPAYO{I}=TYPAYO{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=8) THEN CMOPAYO{I}=TYPAYO{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=11) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=12) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=23) THEN CMOPAYO{I}=TYPAYO{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=24) THEN CMOPAYO{I}=TYPAYO{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=25) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=31) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)*2; 515 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=18) THEN CMOPAYO{I}=TYPAYO{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=0) THEN CMOPAYO{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}>.Z & TYPAYFO{I}^=-1 & TYPAYFO{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYO{I}= TYPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYO{I}>.Z & TYPAYO{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYO{I}= TYPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYO{I}<=.Z) THEN CMOPAYO{I}=TYPAYO{I}; MPRINT(MOCONV): ELSE IF (TYPAYO{I}^=-1 & TYPAYO{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYFO{I}= TYPAYO{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF NMYRO{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFTO{I}=(TLMTHO{I}-((1992-LNSTYRO{I})*12)); MPRINT(TAXSCF): LNAGEO{I}=TLMTHO{I}-PAYLFTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFTO{I}=0; MPRINT(TAXSCF): LNAGEO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNO); MPRINT(TAXSCF): IF ((HAVELNO{I}=1) & (TAXINS{I} IN(1 2 3)) & TLMTHO{I} > 0 & INTRATEO{I} > 0) THEN DO; MPRINT(TAXSCF): IF (HBALLNO{I}=1) THEN DO; MPRINT(MORTPAY): AMOPAYO{I}=ROUND((MORT((AMTBORRO{I}),.,((INTRATEO{I}/10000)/12),(TLMTHO{I}))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (CMOPAYO{I} > AMOPAYO{I}) THEN CMOPAYO{I}=AMOPAYO{I}; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HBALLNO{I}=5) THEN DO; MPRINT(TAXSCF): IF (AMTBORRO{I} > BALLNO{I}) THEN ADJBORRO{I}=(AMTBORRO{I}-BALLNO{I}); MPRINT(TAXSCF): ELSE IF (AMTBORRO{I} < BALLNO{I}) THEN ADJBORRO{I}=AMTBORRO{I}; MPRINT(TAXSCF): IF ADJBORRO{I} > 0 THEN MPRINT(MORTPAY): AMOPAYO{I}=ROUND((MORT((ADJBORRO{I}),.,((INTRATEO{I}/10000)/12),(TLMTHO{I}))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (AMTBORRO{I}=BALLNO{I}) THEN AMOPAYO{I}=((AMTBORRO{I})*(INTRATEO{I}/10000))/12; MPRINT(TAXSCF): IF (CMOPAYO{I} > AMOPAYO{I}) THEN CMOPAYO{I}=AMOPAYO{I}; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; 516 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * 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); MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNO); MPRINT(TAXSCF): IF (PROPTYPE{I} IN(12 13 14 21 22 25 40 49 999) & (HINCOMEO{I}=5 | INCOMEO{I}=-1)) | (PROPTYPE{I} IN(12 13 14 21 22 25 40 49 999) & HINCOMEO{I}=1 & INCOMEO{I} < (CMOPAYO{I}*12)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified properties; MPRINT(TAXSCF): QUALPROP{I}=(HAVELNO{I}=1); MPRINT(TAXSCF): QUALOTHPROP=QUALOTHPROP+QUALPROP{I}; MPRINT(TAXSCF): FMVOP=FMVOP+PROPVAL{I}*(HAVELNO{I}=1); MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & HBALLNO{I} IN(1 5) & NMYRO{I} NOT IN(0 -1 -7) & INTRATEO{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAYO{I} < AMTBORRO{I}*.005) THEN CMOPAYO{I}=MAX(REGPAYO{I},TYPAYO{I}); MPRINT(TAXSCF): 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})); MPRINT(TAXSCF): 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))); MPRINT(TAXSCF): IF LNSTYRO{I}^=1992 THEN AINTDCTO{I}=(CMOPAYO{I}*12)-(AMTOWE_1O{I}-AMTOWEO{I}); MPRINT(TAXSCF): ELSE IF LNSTYRO{I}=1992 THEN AINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | CMOPAYO{I} < 0 | PAYLFTO{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEO{I}=0; MPRINT(TAXSCF): AMTOWE_1O{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & AMTBORRO{I} > 0 & LNAGEO{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTDCTO{I}=(CMOPAYO{I}*12)-(CURBAL_1O{I}-CURBALO{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | AMTBORRO{I} < 0 | LNAGEO{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALO{I}=0; MPRINT(TAXSCF): CURBAL_1O{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): ELSE SINTDCTO{I}=0; MPRINT(TAXSCF): * 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 the home was not purchased in the survey year. If the home was purchased in the survey year, set deduction to zero.; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I}=0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; 517 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=1992 & PURCHYRO{I}=1992) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=1992) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & CURBALO{I} > 0 & CURBAL_1O{I} > 0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & (CURBALO{I} <= 0 & CURBAL_1O{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTO{I} > 0 & CINTDCTO{I} > 0) THEN DCTDIFFO{I}=CINTDCTO{I}-SINTDCTO{I}; MPRINT(TAXSCF): ELSE DCTDIFFO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (NMYRO{I} IN(-1 -7) & NMPMTO{I} IN(-1 -7)) & AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (INTRATEO{I}=-1)) THEN DO; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest deduction; MPRINT(TAXSCF): IF ((CINTDCTO{I} + AINTDCTO{I} + SINTDCTO{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=(CINTDCTO{I}+AINTDCTO{I}+SINTDCTO{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTDCTO{I}=0; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & CMOPAYO{I} > 0 & (AVINTDCTO{I} > CMOPAYO{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): SINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & AMTOUTO{I} > 0 & (AVINTDCTO{I} > .25*AMTOUTO{I})) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): 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}= /; 518 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): * Compute total deduction and total amount outstanding; MPRINT(TAXSCF): TOTDEDCTO=TOTDEDCTO+((AVINTDCTO{I})*PERPROP{I}/10000)*(HAVELNO{I}=1); MPRINT(TAXSCF): TOTAMTOUTO=TOTAMTOUTO+AMTOUTO{I}; MPRINT(TAXSCF): * Create flag for loans after 12/15/17, used in computing limits on mortgage interest deduction for home acquistion debt; MPRINT(TAXSCF): LIMFLAG{I}=(LNSTYRO{I}> 2017 | (LNSTYRO{I}=2017 & LNSTMNO{I}=12)); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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 hhs are rational and report the home/properties with the biggest deductions.; MPRINT(TAXSCF): ADJDEDCTO=0; MPRINT(TAXSCF): ADJAMTOUTO=0; MPRINT(TAXSCF): ADJ17AMTOUTO=0; MPRINT(TAXSCF): FMVOTHPROP=0; MPRINT(TAXSCF): IF (QUALOTHPROP > 0) THEN DO; MPRINT(TAXSCF): IF (QUALOTHPROP=1 & QPROP1=1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=1 & QPROP2=1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=1 & QPROP3=1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO3; MPRINT(TAXSCF): ADJ17AMTOUTO=X1915*(LIMFL3=1); MPRINT(TAXSCF): ADJAMTOUTO=X1915*(LIMFL3=0); MPRINT(TAXSCF): FMVOTHPROP=X1906*(X1905/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=2) THEN DO; MPRINT(TAXSCF): IF (QPROP1=1 & QPROP2=1) THEN DO; MPRINT(TAXSCF): IF (AVINTDCTO1 >= AVINTDCTO2) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO2 >= AVINTDCTO1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QPROP1=1 & QPROP3=1) THEN DO; MPRINT(TAXSCF): IF (AVINTDCTO1 >= AVINTDCTO3) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO3 >= AVINTDCTO1) THEN DO; 519 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO3; MPRINT(TAXSCF): ADJ17AMTOUTO=X1915*(LIMFL3=1); MPRINT(TAXSCF): ADJAMTOUTO=X1915*(LIMFL3=0); MPRINT(TAXSCF): FMVOTHPROP=X1906*(X1905/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QPROP2=1 & QPROP3=1) THEN DO; MPRINT(TAXSCF): IF (AVINTDCTO2 >= AVINTDCTO3) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO3 >= AVINTDCTO2) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO3; MPRINT(TAXSCF): ADJ17AMTOUTO=X1915*(LIMFL3=1); MPRINT(TAXSCF): ADJAMTOUTO=X1915*(LIMFL3=0); MPRINT(TAXSCF): FMVOTHPROP=X1906*(X1905/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=3) THEN DO; MPRINT(TAXSCF): IF (AVINTDCTO1 >= AVINTDCTO2 & AVINTDCTO1 >= AVINTDCTO3) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO2 >= AVINTDCTO1 & AVINTDCTO2 >= AVINTDCTO3) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO3 >= AVINTDCTO1 & AVINTDCTO3 >= AVINTDCTO2) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO3; MPRINT(TAXSCF): ADJ17AMTOUTO=X1915*(LIMFL3=1); MPRINT(TAXSCF): ADJAMTOUTO=X1915*(LIMFL3=0); MPRINT(TAXSCF): FMVOTHPROP=X1906*(X1905/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (X701=-7 & X7133=1) THEN DO; MPRINT(TAXSCF): HOUSE=(X7134/10000)*X716; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE HOUSE=SUM(0,X604,X614,X623,X716,(X513+X526)); MPRINT(TAXSCF): IF (TOTEQDBTL > 0 & GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL+TOTEQDBTL > (HOUSE)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) > 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=MIN((HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL)),TOTEQDBTL,100000); MPRINT(TAXSCF): ADJDEDCTL=TOTDEDCTL*(ADJEQDBTL/TOTEQDBTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) <= 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=0; 520 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ADJDEDCTL=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((FILESTAT=3) & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) > 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=MIN((HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL)),TOTEQDBTL,50000); MPRINT(TAXSCF): ADJDEDCTL=TOTDEDCTL*(ADJEQDBTL/TOTEQDBTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((FILESTAT=3) & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) <= 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=0; MPRINT(TAXSCF): ADJDEDCTL=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TOTEQDBTL ^=. & TOTDEDCTL ^=.) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=TOTEQDBTL; MPRINT(TAXSCF): ADJDEDCTL=TOTDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TOTEQDBTL > 0 & GRFAMTOUTM+A17AMTOUTM+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= /; MPRINT(TAXSCF): * 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), worksheet changed in 2018; MPRINT(TAXSCF): ADJDEDCT=0; MPRINT(TAXSCF): * case 1 - grandfathered debt, no home acquisition debt, maybe home equity; MPRINT(TAXSCF): IF (GRFAMTOUTM > 0 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & ADJEQDBTL <= 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & ADJEQDBTL > 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+100000)/(GRFAMTOUTM+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & ADJEQDBTL <= 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & ADJEQDBTL > 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+50000)/(GRFAMTOUTM+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * case 2 - some grandfathered debt, some home acquisition debt, maybe home equity; MPRINT(TAXSCF): ELSE IF (GRFAMTOUTM > 0 & (HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & (ADJEQDBTL=0 | ADJEQDBTL <= 100000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & ADJEQDBTL > 100000 & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+100000) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (ADJEQDBTL <= 100000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+ADJEQDBTL),(1000000+ADJEQDBTL))) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); 521 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (ADJEQDBTL > 100000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+100000),1100000))/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (ADJEQDBTL=0 | ADJEQDBTL <= 50000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & ADJEQDBTL > 50000 & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+50000) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (ADJEQDBTL=0 | ADJEQDBTL <= 50000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+ADJEQDBTL),(500000+ADJEQDBTL))) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (ADJEQDBTL=0 | ADJEQDBTL > 50000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+50000),550000))/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * case 3 - no grandfathered debt, maybe home acquisition, maybe home equity; MPRINT(TAXSCF): ELSE IF (GRFAMTOUTM=0 & (HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | ADJEQDBTL > 0)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 0 & ADJEQDBTL <= 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((100000)/ADJEQDBTL)*ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL <= 1000000) & ADJEQDBTL <= 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL <= 1000000) & ADJEQDBTL > 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+100000)/ (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL > 1000000) & (ADJEQDBTL <= 100000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((1000000+ADJEQDBTL)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL > 1000000) & (ADJEQDBTL > 100000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; 522 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ADJDEDCT=((1100000)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 0 & ADJEQDBTL <= 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((50000)/ADJEQDBTL)*ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000) & ADJEQDBTL <= 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000) & ADJEQDBTL > 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+50000)/ (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000) & (ADJEQDBTL <= 50000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((500000+ADJEQDBTL)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000) & (ADJEQDBTL > 50000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((550000)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * a few obs will come out here, but they either have -1 as the interest rate or are land contracts; MPRINT(TAXSCF): IF ((GRFAMTOUTM > 0 | HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | (ADJEQDBTL*(1992 LE 2016)) > 0 | A17AMTOUTM > 0 & ADJ17AMTOUTO > 0) & ADJDEDCT=0 & X5744 IN(1 5 6) & Y1=YY1*10+1 & X720^=1992) THEN PUT "MORTGAGE DEDUCTION SHOULD NOT BE ZERO " Y1= X5744= X5746= GRFAMTOUTM= HAAMTOUTM= ADJAMTOUTO= TOTAQDBTL= ADJEQDBTL= A17AMTOUTM= ADJ17AMTOUTO= TOTDEDCTM= ADJDEDCTO= ADJDEDCTL= OVERLIM= QUALOTHPROP= CINTDCTM1= CINTDCTM2= CINTDCTM3= CINTDCTO1= CINTDCTO2= X702= X714= X7135= X723=/; MPRINT(TAXSCF): IF ((GRFAMTOUTM > 0 | HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | ADJEQDBTL > 0 | A17AMTOUTM > 0 & ADJ17AMTOUTO > 0) & OVERLIM=. & Y1=YY1*10+1) THEN PUT "OVER LIMIT INDICATOR MISSING " Y1= X5744= X5746= GRFAMTOUTM= HAAMTOUTM= ADJAMTOUTO= TOTAQDBTL= ADJEQDBTL= A17AMTOUTM= ADJ17AMTOUTO= TOTDEDCTM= ADJDEDCTO= ADJDEDCTL= OVERLIM= ADJDEDCT=/; MPRINT(TAXSCF): IF ADJDEDCT >= 100000 & Y1=YY1*10+1 THEN PUT "HUGE MORTGAGE INTEREST DEDUCTION " Y1= TOTDEDCTM= GRFAMTOUTM= HAAMTOUTM= TOTAQDBTL= ADJDEDCTL= ADJEQDBTL= ADJDEDCTO= ADJAMTOUTO= A17AMTOUTM= ADJ17AMTOUTO= HOUSE= QUALOTHPROP= FMVOTHPROP= X5744= X5746= ADJDEDCT= /; MPRINT(TAXSCF): ************Real estate taxes; MPRINT(TAXSCF): * TAXSIM doesnt want local property taxes in amount of itemized deductions, listed as a separate variable; MPRINT(TAXSCF): * 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; MPRINT(TAXSCF): PROPTXRATE=0; MPRINT(TAXSCF): IF (HOUSE > 0 & RESTAXM1 > 0) THEN PROPTXRATE=(RESTAXM1/HOUSE)*100; MPRINT(TAXSCF): IF (PROPTXRATE > 10 & Y1=YY1*10+1) THEN PUT "HIGH PROPERTY TAX RATE " Y1= HOUSE= RESTAXM1= X721= J721= X722= J722= X501= X601= X701= PROPTXRATE=/; MPRINT(TAXSCF): IF (PROPTXRATE > 10 & X722=4) THEN RESTAXM1=X721; MPRINT(TAXSCF): ************Investment interest expense; MPRINT(TAXSCF): * 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 need to add up dividend/interest income. Capital gains 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.; 523 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * LOCs - only counting loans not secured by the residence and with asset or real estate investment as loan purpose.; MPRINT(TAXSCF): IF (X1101=1) THEN DO; MPRINT(TAXSCF): DO I=1 TO DIM(SBYHOME); MPRINT(TAXSCF): IF (SBYHOME{I}=5 & DOOWE{I}=1 & LNPURP{I} IN(76 78 79)) THEN DO; MPRINT(TAXSCF): IF (TYPAYL{I} > 0) THEN DO; MPRINT(MOCONV): IF (TYPAYLF{I}=1) THEN CMOPAYL{I}=TYPAYL{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=2) THEN CMOPAYL{I}=TYPAYL{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=3) THEN CMOPAYL{I}=TYPAYL{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=4) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=5) THEN CMOPAYL{I}=TYPAYL{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=6) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=20) THEN CMOPAYL{I}=TYPAYL{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=21) THEN CMOPAYL{I}=TYPAYL{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=8) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=11) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=12) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=23) THEN CMOPAYL{I}=TYPAYL{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=24) THEN CMOPAYL{I}=TYPAYL{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=25) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=31) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=18) THEN CMOPAYL{I}=TYPAYL{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=0) THEN CMOPAYL{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}>.Z & TYPAYLF{I}^=-1 & TYPAYLF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}>.Z & TYPAYL{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}<=.Z) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYL{I}^=-1 & TYPAYL{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYLF{I}= TYPAYL{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TYPAYL{I} IN(0 -1 -2)) THEN DO; MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (INTRATEL{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=((INTRATEL{I}/10000)*AMTOUTL{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEL{I} IN(0 -1)) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTL{I} > 0 & CMOPAYL{I} > 0 & SINTDCTL{I} > CMOPAYL{I}*12) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=CMOPAYL{I}*12; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTLOCINVEX=TOTLOCINVEX+SINTDCTL{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Other properties - only counting properties held for investment purposes, and hh must receive 524 The SAS System 13:32 Friday, January 29, 2021 income from the property.; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNO); MPRINT(TAXSCF): IF (PROPTYPE{I} IN(41 42 43 44 45 46 47 48) & (INCOMEO{I} > 0)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified properties; MPRINT(TAXSCF): QUALPINV{I}=(HAVELNO{I}=1); MPRINT(TAXSCF): QUALINVPROP=QUALINVPROP+QUALPINV{I}; MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & HBALLNO{I} IN(1 5) & NMYRO{I} NOT IN(0 -1 -7) & INTRATEO{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAYO{I} < AMTBORRO{I}*.005) THEN CMOPAYO{I}=MAX(REGPAYO{I},TYPAYO{I}); MPRINT(TAXSCF): 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})); MPRINT(TAXSCF): 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))); MPRINT(TAXSCF): IF LNSTYRO{I}^=1992 THEN AINTDCTO{I}=(CMOPAYO{I}*12)-(AMTOWE_1O{I}-AMTOWEO{I}); MPRINT(TAXSCF): ELSE IF LNSTYRO{I}=1992 THEN AINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | CMOPAYO{I} < 0 | PAYLFTO{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEO{I}=0; MPRINT(TAXSCF): AMTOWE_1O{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & AMTBORRO{I} > 0 & LNAGEO{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTDCTO{I}=(CMOPAYO{I}*12)-(CURBAL_1O{I}-CURBALO{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | AMTBORRO{I} < 0 | LNAGEO{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALO{I}=0; MPRINT(TAXSCF): CURBAL_1O{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): ELSE SINTDCTO{I}=0; MPRINT(TAXSCF): * 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 the home was not purchased in the survey year. If the home was purchased in the survey year, set deduction to zero.; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I}=0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=1992 & PURCHYRO{I}=1992) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=1992) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; 525 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & CURBALO{I} > 0 & CURBAL_1O{I} > 0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & (CURBALO{I} <= 0 & CURBAL_1O{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTO{I} > 0 & CINTDCTO{I} > 0) THEN DCTDIFFO{I}=CINTDCTO{I}-SINTDCTO{I}; MPRINT(TAXSCF): ELSE DCTDIFFO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (NMYRO{I} IN(-1 -7) & NMPMTO{I} IN(-1 -7)) & AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (INTRATEO{I}=-1)) THEN DO; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest deduction; MPRINT(TAXSCF): IF ((CINTDCTO{I} + AINTDCTO{I} + SINTDCTO{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=(CINTDCTO{I}+AINTDCTO{I}+SINTDCTO{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTDCTO{I}=0; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & CMOPAYO{I} > 0 & (AVINTDCTO{I} > CMOPAYO{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): SINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & AMTOUTO{I} > 0 & (AVINTDCTO{I} > .25*AMTOUTO{I})) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): * Compute total investment interest expense; MPRINT(TAXSCF): TOTINVPDCT=TOTINVPDCT+((AVINTDCTO{I})*PERPROP{I}/10000)*(HAVELNO{I}=1); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Other loans - only counting loans for (non-business) investment purposes; MPRINT(TAXSCF): ARRAY TLMTHI {*} TLMTHI1 TLMTHI2 TLMTHI3 TLMTHI4 TLMTHI5 TLMTHI6; MPRINT(TAXSCF): ARRAY CMOPAYI {*} CMOPAYI1 CMOPAYI2 CMOPAYI3 CMOPAYI4 CMOPAYI5 CMOPAYI6; MPRINT(TAXSCF): ARRAY PAYLFTI {*} PAYLFTI1 PAYLFTI2 PAYLFTI3 PAYLFTI4 PAYLFTI5 PAYLFTI6; 526 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ARRAY AMTOWEI {*} AMTOWEI1 AMTOWEI2 AMTOWEI3 AMTOWEI4 AMTOWEI5 AMTOWEI6; MPRINT(TAXSCF): ARRAY AMTOWE_1I {*} AMTOWE_1I1 AMTOWE_1I2 AMTOWE_1I3 AMTOWE_1I4 AMTOWE_1I5 AMTOWE_1I6; MPRINT(TAXSCF): ARRAY AINTEXPI {*} AINTEXPI1 AINTEXPI2 AINTEXPI3 AINTEXPI4 AINTEXPI5 AINTEXPI6; MPRINT(TAXSCF): ARRAY LNAGEI {*} LNAGEI1 LNAGEI2 LNAGEI3 LNAGEI4 LNAGEI5 LNAGEI6; MPRINT(TAXSCF): ARRAY CURBALI {*} CURBALI1 CURBALI2 CURBALI3 URBALI4 CURBALI5 CURBALI6; MPRINT(TAXSCF): ARRAY CURBAL_1I {*} CURBAL_1I1 CURBAL_1I2 CURBAL_1I3 CURBAL_1I4 CURBAL_1I5 CURBAL_1I6; MPRINT(TAXSCF): ARRAY CINTEXPI {*} CINTEXPI1 CINTEXPI2 CINTEXPI3 CINTEXPI4 CINTEXPI5 CINTEXPI6; MPRINT(TAXSCF): ARRAY DCTDIFFI {*} DCTDIFFI1 DCTDIFFI2 DCTDIFFI3 DCTDIFFI4 DCTDIFFI5 DCTDIFFI6; MPRINT(TAXSCF): ARRAY SINTEXPI {*} SINTEXPI1 SINTEXPI2 SINTEXPI3 SINTEXPI4 SINTEXPI5 SINTEXPI6; MPRINT(TAXSCF): ARRAY AVINTEXPI {*} AVINTEXPI1 AVINTEXPI2 AVINTEXPI3 AVINTEXPI4 AVINTEXPI5 AVINTEXPI6; MPRINT(TAXSCF): ARRAY QUALN {*} QLN1 QLN2 QLN3 QLN4 QLN5 QLN6; MPRINT(TAXSCF): ARRAY NMPMTI {*} X2716 X2733 X2816 X2833 X2916 X2933; MPRINT(TAXSCF): ARRAY NMYRI {*} X2717 X2734 X2817 X2834 X2917 X2934; MPRINT(TAXSCF): ARRAY REGPAYFI {*} X7527 X7526 X7525 X7524 X7523 X7522; MPRINT(TAXSCF): ARRAY REGPAYI {*} X2718 X2735 X2818 X2835 X2918 X2935; MPRINT(TAXSCF): ARRAY TYPAYFI {*} X2720 X2737 X2820 X2837 X2920 X2937; MPRINT(TAXSCF): ARRAY TYPAYI {*} X2719 X2736 X2819 X2836 X2919 X2936; MPRINT(TAXSCF): ARRAY LNSTYRI {*} X2713 X2730 X2813 X2830 X2913 X2930; MPRINT(TAXSCF): ARRAY AMTBORRI {*} X2714 X2731 X2814 X2831 X2914 X2931; MPRINT(TAXSCF): ARRAY JAMTBORRI {*} J2714 J2731 J2814 J2831 J2914 J2931; MPRINT(TAXSCF): ARRAY AMTOUTI {*} X2723 X2740 X2823 X2840 X2923 X2940; MPRINT(TAXSCF): ARRAY JAMTOUTI {*} J2723 J2740 J2823 J2840 J2923 J2940; MPRINT(TAXSCF): ARRAY INTRATEI {*} X2724 X2741 X2824 X2841 X2924 X2941; MPRINT(TAXSCF): ARRAY ONSCHEDI {*} X7521 X7520 X7519 X7518 X7517 X7516; MPRINT(TAXSCF): ; MPRINT(TAXSCF): ARRAY LNTYPE {*} X2710 X2727 X2810 X2827 X2910 X2927; MPRINT(TAXSCF): ARRAY BUSLN {*} X6842 X6843 X6844 X6845 X6846 X6847; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTHI); MPRINT(TAXSCF): TLMTHI{I}=0; MPRINT(TAXSCF): CMOPAYI{I}=0; MPRINT(TAXSCF): PAYLFTI{I}=0; MPRINT(TAXSCF): AMTOWEI{I}=0; MPRINT(TAXSCF): AMTOWE_1I{I}=0; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): LNAGEI{I}=0; MPRINT(TAXSCF): CURBALI{I}=0; MPRINT(TAXSCF): CURBAL_1I{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): DCTDIFFI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; MPRINT(TAXSCF): AVINTEXPI{I}=0; MPRINT(TAXSCF): QUALN{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTLNINVEX=0; MPRINT(TAXSCF): QUALOANINV=0; MPRINT(TAXSCF): DO I=1 TO DIM(NMPMTI); MPRINT(TERMCON): IF (NMYRI{I}=0 & NMPMTI{I}=0) THEN DO; MPRINT(TERMCON): TLMTHI{I}=0; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRI{I}^=0|NMPMTI{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRI{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRI{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHI{I}=NMYRI{I}; MPRINT(TERMCON): IF (NMPMTI{I}=0) THEN DO; MPRINT(TERMCON): NMPMTI{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; 527 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TERMCON): ELSE IF (NMYRI{I}>0) THEN DO; MPRINT(TERMCON): TLMTHI{I}=NMYRI{I}*12; MPRINT(TERMCON): IF (NMPMTI{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYFI{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMTI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFI{I}=-7) THEN DO; MPRINT(TERMCON): NMPMTI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFI{I}=8) THEN DO; MPRINT(TERMCON): NMPMTI{I}=1; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFI{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYFI{I}=1) THEN NMPMTI{I}=TLMTHI{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=2) THEN NMPMTI{I}=TLMTHI{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=3) THEN NMPMTI{I}=TLMTHI{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=4) THEN NMPMTI{I}=TLMTHI{I}; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=5) THEN NMPMTI{I}=TLMTHI{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=6) THEN NMPMTI{I}=TLMTHI{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=20) THEN NMPMTI{I}=TLMTHI{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=21) THEN NMPMTI{I}=TLMTHI{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=11) THEN NMPMTI{I}=TLMTHI{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=12) THEN NMPMTI{I}=TLMTHI{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=23) THEN NMPMTI{I}=TLMTHI{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=24) THEN NMPMTI{I}=TLMTHI{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=25) THEN NMPMTI{I}=TLMTHI{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=31) THEN NMPMTI{I}=TLMTHI{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=18) THEN NMPMTI{I}=TLMTHI{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=0) THEN NMPMTI{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}>.Z & REGPAYFI{I}^=-1 & REGPAYFI{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMTI{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTHI{I}= REGPAYFI{I}= NMPMTI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHI{I}>.Z & TLMTHI{I}<-2) THEN DO; MPRINT(MOCONV): NMPMTI{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTHI{I}= REGPAYFI{I}= NMPMTI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHI{I}<=.Z) THEN NMPMTI{I}=TLMTHI{I}; MPRINT(MOCONV): ELSE IF (TLMTHI{I}^=-1 & TLMTHI{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFI{I}= TLMTHI{I}= "SETTING AMT=."; MPRINT(MOCONV): NMPMTI{I}=.; MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTI{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHI{I}=-1; MPRINT(TERMCON): IF (NMYRI{I}=0) THEN DO; MPRINT(TERMCON): NMYRI{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTI{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYFI{I}; MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYFI{I}>0) THEN PFREQ=TYPAYFI{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTHI{I}=-7; 528 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; MPRINT(TERMCON): TLMTHI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): IF (NMPMTI{I}>0) THEN DO; MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTHI{I}=NMPMTI{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}))); MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12))); MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTHI{I}=NMPMTI{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTHI{I}=NMPMTI{I}*2/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTHI{I}=NMPMTI{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTHI{I}=NMPMTI{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTHI{I}=NMPMTI{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTHI{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): TLMTHI{I}=NMPMTI{I}; MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMTI{I}= PFREQ= TLMTHI{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}>.Z & NMPMTI{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTHI{I}=NMPMTI{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMTI{I}= PFREQ= TLMTHI{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}=0) THEN TLMTHI{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}<=.Z) THEN TLMTHI{I}=NMPMTI{I}; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}^=-1 & NMPMTI{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMTI{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTHI{I}=.; MPRINT(IMOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTHI{I}>0) THEN DO; MPRINT(TERMCON): NMYRI{I}=MAX(1,INT(.5+(TLMTHI{I}/12))); MPRINT(TERMCON): TLMTHI{I}=MAX(1,ROUND(TLMTHI{I})); MPRINT(TERMCON): END; MPRINT(TERMCON): IF (NMYRI{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMTI{I}= NMYRI{I}= TLMTHI{I}= REGPAYFI{I}= REGPAYI{I}= TYPAYFI{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAYI{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYFI{I}=1) THEN CMOPAYI{I}=REGPAYI{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=2) THEN CMOPAYI{I}=REGPAYI{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=3) THEN CMOPAYI{I}=REGPAYI{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=4) THEN CMOPAYI{I}=REGPAYI{I}; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=5) THEN CMOPAYI{I}=REGPAYI{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=6) THEN CMOPAYI{I}=REGPAYI{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=20) THEN CMOPAYI{I}=REGPAYI{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=21) THEN CMOPAYI{I}=REGPAYI{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=8) THEN CMOPAYI{I}=REGPAYI{I}/12; 529 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=11) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=12) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=23) THEN CMOPAYI{I}=REGPAYI{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=24) THEN CMOPAYI{I}=REGPAYI{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=25) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=31) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=18) THEN CMOPAYI{I}=REGPAYI{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=0) THEN CMOPAYI{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}>.Z & REGPAYFI{I}^=-1 & REGPAYFI{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAYI{I}= REGPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYI{I}>.Z & REGPAYI{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAYI{I}= REGPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYI{I}<=.Z) THEN CMOPAYI{I}=REGPAYI{I}; MPRINT(MOCONV): ELSE IF (REGPAYI{I}^=-1 & REGPAYI{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFI{I}= REGPAYI{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(MOCONV): IF (TYPAYFI{I}=1) THEN CMOPAYI{I}=TYPAYI{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=2) THEN CMOPAYI{I}=TYPAYI{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=3) THEN CMOPAYI{I}=TYPAYI{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=4) THEN CMOPAYI{I}=TYPAYI{I}; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=5) THEN CMOPAYI{I}=TYPAYI{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=6) THEN CMOPAYI{I}=TYPAYI{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=20) THEN CMOPAYI{I}=TYPAYI{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=21) THEN CMOPAYI{I}=TYPAYI{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=8) THEN CMOPAYI{I}=TYPAYI{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=11) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=12) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=23) THEN CMOPAYI{I}=TYPAYI{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=24) THEN CMOPAYI{I}=TYPAYI{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=25) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=31) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=18) THEN CMOPAYI{I}=TYPAYI{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=0) THEN CMOPAYI{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}>.Z & TYPAYFI{I}^=-1 & TYPAYFI{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYI{I}= TYPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYI{I}>.Z & TYPAYI{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYI{I}= TYPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYI{I}<=.Z) THEN CMOPAYI{I}=TYPAYI{I}; MPRINT(MOCONV): ELSE IF (TYPAYI{I}^=-1 & TYPAYI{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYFI{I}= TYPAYI{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF NMYRI{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFTI{I}=(TLMTHI{I}-((1992-LNSTYRI{I})*12)); 530 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): LNAGEI{I}=TLMTHI{I}-PAYLFTI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFTI{I}=0; MPRINT(TAXSCF): LNAGEI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): DO I=1 TO MIN(6,X2709); MPRINT(TAXSCF): IF (LNTYPE{I} IN(76 78 79) & BUSLN{I} IN(0 5 8)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified loans; MPRINT(TAXSCF): QUALN{I}=1; MPRINT(TAXSCF): QUALOANINV=QUALOANINV+QUALN{I}; MPRINT(TAXSCF): IF (NMYRI{I} NOT IN(0 -1 -7) & INTRATEI{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & PAYLFTI{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAYI{I} < AMTBORRI{I}*.005) THEN CMOPAYI{I}=MAX(REGPAYI{I},TYPAYI{I}); MPRINT(TAXSCF): AMTOWEI{I}=CMOPAYI{I}*((1-1/(1+(INTRATEI{I}/10000)/12)**PAYLFTI{I})/ ((INTRATEI{I}/10000)/12)); MPRINT(TAXSCF): AMTOWE_1I{I}=CMOPAYI{I}*((1-1/(1+(INTRATEI{I}/10000)/12)**(PAYLFTI{I}+12))/ ((INTRATEI{I}/10000)/12)); MPRINT(TAXSCF): IF LNSTYRI{I}^=1992 THEN AINTEXPI{I}=(CMOPAYI{I}*12)-(AMTOWE_1I{I}-AMTOWEI{I}); MPRINT(TAXSCF): ELSE IF LNSTYRI{I}=1992 THEN AINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHI{I} < 0 | CMOPAYI{I} < 0 | PAYLFTI{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEI{I}=0; MPRINT(TAXSCF): AMTOWE_1I{I}=0; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & AMTBORRI{I} > 0 & LNAGEI{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTEXPI{I}=(CMOPAYI{I}*12)-(CURBAL_1I{I}-CURBALI{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHI{I} < 0 | AMTBORRI{I} < 0 | LNAGEI{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALI{I}=0; MPRINT(TAXSCF): CURBAL_1I{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUTI{I} > 0 & INTRATEI{I} > 0) THEN SINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): ELSE SINTEXPI{I}=0; MPRINT(TAXSCF): * 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, set the interest expense to zero.; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & PAYLFTI{I}=0) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=CURBAL_1I{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=CINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & LNSTYRI{I}=1992) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTEXPI{I} < 0 | CINTEXPI{I} < 0) & CURBALI{I} > 0 & CURBAL_1I{I} > 0) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=CURBAL_1I{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=CINTEXPI{I}; 531 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTEXPI{I} < 0 | CINTEXPI{I} < 0) & (CURBALI{I} <= 0 & CURBAL_1I{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTEXPI{I} > 0 & CINTEXPI{I} > 0) THEN DCTDIFFI{I}=CINTEXPI{I}-SINTEXPI{I}; MPRINT(TAXSCF): ELSE DCTDIFFI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): CINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEI{I}=-1) THEN DO; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest expense; MPRINT(TAXSCF): IF ((CINTEXPI{I} + AINTEXPI{I} + SINTEXPI{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=(CINTEXPI{I}+AINTEXPI{I}+SINTEXPI{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTEXPI{I}=0; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (AVINTEXPI{I} > 0 & CMOPAYI{I} > 0 & (AVINTEXPI{I} > CMOPAYI{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=CMOPAYI{I}*12; MPRINT(TAXSCF): CINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): SINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AVINTEXPI{I} > 0 & AMTOUTI{I} > 0 & (AVINTEXPI{I} > .25*AMTOUTI{I})) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): CINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): * Compute loan investment interest expense; MPRINT(TAXSCF): TOTLNINVEX=TOTLNINVEX+AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Total investment interest expense, if investment interest expense is greater than interest/dividend income, then expense is limited to income amount; MPRINT(TAXSCF): TOTINTINC=X5708+X5710; MPRINT(TAXSCF): TOTINVEX=0; MPRINT(TAXSCF): TOTINVEX=TOTLOCINVEX+TOTINVPDCT+TOTLNINVEX; MPRINT(TAXSCF): IF TOTINVEX > 0 THEN HINVEX=1; MPRINT(TAXSCF): ELSE HINVEX=0; MPRINT(TAXSCF): IF TOTINVEX > TOTINTINC & Y1=YY1*10+1 THEN PUT "TOO MUCH INVESTMENT INTEREST EXPENSES " Y1= TOTINVEX= TOTLOCINVEX= TOTINVPDCT= TOTLNINVEX= TOTINTINC=/; 532 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): IF (TOTINVEX > TOTINTINC) THEN TOTINVEX=TOTINTINC; MPRINT(TAXSCF): * In 1988, 40% of personal interest is deductible, this includes credit cards, car/other vehicle loans, other consumer loans, loans against life insurance policies, home improvement loans, and non-HELOC LOCs.; MPRINT(TAXSCF): TOTPINEX=0; MPRINT(TAXSCF): **************Charitable Contributions; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): GCHARITY=(X5822=1); MPRINT(TAXSCF): CHARITYAMT=0; MPRINT(TAXSCF): IF (X5822=1 & X5823 > 0) THEN DO; MPRINT(TAXSCF): IF (X5823 > .5*AGI) & (AGI>0) THEN CHARITYAMT=.5*AGI; MPRINT(TAXSCF): ELSE CHARITYAMT=X5823; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF X5822=1 & X5823 > 0 & AGI < 0 & Y1=YY1*10+1 THEN PUT "NEGATIVE AGI BUT CHARITYAMT > 0 " Y1= X5823= CHARITYAMT= X5744= X5746= AGI=; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ITEMDEDCT_FLAG=0 THEN DO; MPRINT(TAXSCF): ADJDEDCT=0; MPRINT(TAXSCF): RESTAXM1=0; MPRINT(TAXSCF): TOTINVEX=0; MPRINT(TAXSCF): CHARITYAMT=0; MPRINT(TAXSCF): TOTPINEX=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): **********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.; MPRINT(TAXSCF): TOTITEMDCT=0; MPRINT(TAXSCF): * no limits on itemized deductions in 1988, 2012 and 2018; MPRINT(TAXSCF): * starting in 2015, itemized deduction phaseout limit for AGI are the same as for personal exemptions, so using EXLIM1-4 in this code; MPRINT(TAXSCF): TEMPITEMDCT=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); MPRINT(TAXSCF): IF TEMPITEMDCT > 0 & ((AGI <= 100000 & FILESTAT^=3) | (AGI <= 50000 & FILESTAT=3)) THEN DO; MPRINT(TAXSCF): TOTITEMDCT=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); MPRINT(TAXSCF): DEDCTLIM=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TEMPITEMDCT > 0 & DEDCTLIM^=0 THEN DO; MPRINT(TAXSCF): ITDLIM=100000*(FILESTAT^=3)+50000*(FILESTAT=3); MPRINT(TAXSCF): DEDCTLIM=1; MPRINT(TAXSCF): IWLINE1=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); MPRINT(TAXSCF): IF (IWLINE1-TOTINVEX <= 0) THEN TOTITEMDCT=IWLINE1; MPRINT(TAXSCF): ELSE IF (IWLINE1-TOTINVEX > 0) THEN DO; MPRINT(TAXSCF): IWLINE4=(IWLINE1-TOTINVEX)*.80; MPRINT(TAXSCF): IWLINE7=AGI-ITDLIM; MPRINT(TAXSCF): IWLINE8=IWLINE7*.03; MPRINT(TAXSCF): IWLINE9=MIN(IWLINE4,IWLINE8); MPRINT(TAXSCF): TOTITEMDCT=IWLINE1-IWLINE9; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TEMPITEMDCT=0 THEN DEDCTLIM=0; MPRINT(TAXSCF): * NOTE: Change in worksheet for 2006; MPRINT(TAXSCF): * no limits on exemptions in 1988 and 2012, no exemptions in 2018; MPRINT(TAXSCF): TOTEXPTAMT=0; MPRINT(TAXSCF): EXPTLIM=0; MPRINT(TAXSCF): EXLIM=100000*(FILESTAT=1)+150000*(FILESTAT IN(2 5)) +75000*(FILESTAT=3)+125000*(FILESTAT=4); MPRINT(TAXSCF): EXPAGIT=122500*(FILESTAT^=3)+61250*(FILESTAT=3); MPRINT(TAXSCF): DLINE6=2500*(FILESTAT^=3)+1250*(FILESTAT=3); 533 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): IF (AGI <= EXLIM) THEN TOTEXPTAMT=TOTEXPT*2150; MPRINT(TAXSCF): ELSE IF (AGI > EXLIM) THEN DO; MPRINT(TAXSCF): EXPTLIM=1; MPRINT(TAXSCF): EWLINE2=TOTEXPT*2150; MPRINT(TAXSCF): EWLINE5=AGI-EXLIM; MPRINT(TAXSCF): IF EWLINE5 > EXPAGIT THEN TOTEXPTAMT=TOTEXPT*0; MPRINT(TAXSCF): ELSE IF EWLINE5 <= EXPAGIT THEN DO; MPRINT(TAXSCF): EWLINE6=ROUND((EWLINE5/DLINE6),1); MPRINT(TAXSCF): EWLINE7=EWLINE6*.02; MPRINT(TAXSCF): EWLINE8=EWLINE7*EWLINE2; MPRINT(TAXSCF): TOTEXPTAMT=EWLINE2-EWLINE8; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Standard deduction by filing status, including addition deduction amount for over 65, dont have any info on blindness. Also compute number of age exemptions and flag nonfilers based on IRS filing thresholds and a few other assumptions. Nonfilers also cannot have negative AGI, losses from business or capital gains or more than 1/3 of the lowest filing threshold, which is married, filing separately; MPRINT(TAXSCF): BUSRENTCAPLOSS=(TBUSINC < 0 | RENTINC < 0 | CAPGLINC < 0); MPRINT(TAXSCF): HWSINCSE=(WSINCOME >= (.33*2150) | WSINCSP >= (.33*2150) | TBUSINC >= (.33*2150)); MPRINT(TAXSCF): STDDCT=0; MPRINT(TAXSCF): IF (FILESTAT=1 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=3400; MPRINT(TAXSCF): NONFILER=(0 < AGI < 5550)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=1 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=4250; MPRINT(TAXSCF): NONFILER=(0 < AGI < 6400)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=2 & TUAGE < 65 & SPAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=5700; MPRINT(TAXSCF): NONFILER=(0 < AGI < 10000)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=2 & TUAGE >= 65 & SPAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=7000; MPRINT(TAXSCF): NONFILER=(0 < AGI < 11300)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=2 & (TUAGE >= 65 | SPAGE >= 65)) THEN DO; MPRINT(TAXSCF): STDDCT=6350; MPRINT(TAXSCF): NONFILER=(0 < AGI < 10650)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=5700/2; MPRINT(TAXSCF): NONFILER=(AGI < 2150)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=7000/2; MPRINT(TAXSCF): NONFILER=(AGI < 2150)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=4 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=5000; MPRINT(TAXSCF): NONFILER=(0 < AGI < 7150)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=4 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=5850; MPRINT(TAXSCF): NONFILER=(0 < AGI < 8000)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=5 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=5700; 534 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): NONFILER=(AGI < 7850)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=5 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=6350; MPRINT(TAXSCF): NONFILER=(0 < AGI < 8500)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): AGEXMP=(TUAGE > 65) + (SPAGE > 65)*(FILESTAT=2); MPRINT(TAXSCF): * Did the hh itemize; MPRINT(TAXSCF): * No itemization question in 1989 or 1992, so itemize will be zero; MPRINT(TAXSCF): ITEMIZE=(TAXUNIT=0)*(X7367=1 | X7368=1 | X7369=1)+(TAXUNIT=1)*(X7368=1)+(TAXUNIT=2)*(X7369=1); MPRINT(TAXSCF): CITEMIZE=(TOTITEMDCT => STDDCT); MPRINT(TAXSCF): * Construct other variables needed for TAXSIM; MPRINT(TAXSCF): TAXUNITID=Y1*100+TAXUNIT; MPRINT(TAXSCF): YEAR=1991; MPRINT(TAXSCF): AGECL=1*(TUAGE < 26)+2*(26<=TUAGE<35)+3*(35<=TUAGE<45) +4*(45<=TUAGE<55)+5*(55<=TUAGE<65)+6*(TUAGE>=65); MPRINT(TAXSCF): * 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).; MPRINT(TAXSCF): STCAPINC=0; MPRINT(TAXSCF): LTCAPINC=0; MPRINT(TAXSCF): IF (AGICL IN(1)) THEN DO; MPRINT(TAXSCF): IF (CAPGLINC > 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.86; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.86); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (CAPGLINC < 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.69; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.69); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AGICL IN(2)) THEN DO; MPRINT(TAXSCF): IF (CAPGLINC > 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.85; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.85); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (CAPGLINC < 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.66; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.66); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AGICL IN(3)) THEN DO; MPRINT(TAXSCF): IF (CAPGLINC > 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.85; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.85); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (CAPGLINC < 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.62; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.62); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ARRAY NEG_1 {*} TBUSINC OTHINC RENTINC OTHPINC; MPRINT(TAXSCF): DO I=1 TO DIM(NEG_1); MPRINT(TAXSCF): IF NEG_1{I}=-1 THEN NEG_1{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): UNADJTOTDEDCT=MAX(0,(ADJDEDCT+TOTINVEX+CHARITYAMT)); MPRINT(TAXSCF): CHCAREXP=0; 535 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): TINCOME=WSINCOME+WSINCSP+TBUSINC+INTINC+NTAXINC+DIVINC+CAPGLINC+RENTINC +UNEMPINC+GSSINC+PENINC+AFDCINC+OTHINC; MPRINT(TAXSCF): TOTXINC=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC +UNEMPINC+GSSINC+PENINC+OTHINC; MPRINT(TAXSCF): *set 3000 max loss for capital gains for comparison with IRS estimates; MPRINT(TAXSCF): IF CAPGLINC < -3000 THEN CAPGL3K=-3000; MPRINT(TAXSCF): ELSE CAPGL3K=CAPGLINC; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (TOTXINC=0 & TINCOME > 0 & AFDCINC=0 & NTAXINC=0 & TAXUNIT < 3 & Y1=YY1*10+1) THEN PUT "TOTXINC IS ZERO BUT TINCOME > 0 " YY1= Y1= TOTXINC= TINCOME= WSINCOME= WSINCSP= TBUSINC= INTINC= NTAXINC= DIVINC= RENTINC= UNEMPINC= AFDCINC= GSSINC= PENINC= OTHINC= CAPGLINC= RAGE= SPAGE= FILESTAT= TAXUNIT= X4100= X4700=/; MPRINT(TAXSCF): * Adding in payroll tax liability and mtr, assuming employee pays both employee and employer share, and 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 earning 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 tax year, 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 caculate the payroll liability and mtr. Computing the payroll atr in a similar fashion. NOTE: Need to adjust for different amounts used to compute the mtr, initially computing payroll mtr for adding $1 to earnings.; MPRINT(TAXSCF): * Need to adjust for 1988, 2% credit for SE, in 1991, limit on medicare tax; MPRINT(TAXSCF): ** earnings from wages and businesses for head and spouse/parnter; MPRINT(TAXSCF): REARN=R_LABORINC+R_BUSINC; MPRINT(TAXSCF): SPEARN=SP_LABORINC+SP_BUSINC; MPRINT(TAXSCF): HHEARN=REARN+SPEARN; MPRINT(TAXSCF): TWSINC=WSINCOME+WSINCSP; MPRINT(TAXSCF): PAYROLLIAB=0; MPRINT(TAXSCF): PAYROLLMTR=0; MPRINT(TAXSCF): PAYROLLATR=0; MPRINT(TAXSCF): IF TAXUNIT=0 THEN DO; MPRINT(TAXSCF): IF (X4106 IN(1 2 3 4 -7) & X4706=0) | (X4106=0 & X4706 IN(1 2 3 4 -7)) | (X4106=0 & X4706=0 & X102=0 & (TWSINC > 0 | TBUSINC > 0)) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(53400,(TWSINC+TBUSINC*(TBUSINC >0)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*.029)*(1992 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*.029)*(1992 EQ 1992); MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 53400)*(100*.124))+ (100*.029)*(1992 GE 1995)+ (100*.029)*(1992 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB >0) THEN PAYROLLATR=100*(PAYROLLIAB/(TWSINC+TBUSINC*(TBUSINC > 0))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X4106 IN(1 2 3 4 -7) & X4706 IN(1 2 3 4 -7)) THEN DO; MPRINT(TAXSCF): IF (X4115 >=1 & X4715 >=1 & HHEARN > 0) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(53400,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(REARN/HHEARN))*.029*(1992 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*(REARN/HHEARN))*.029*(1992 EQ 1992)+ MIN(53400,((TWSINC+TBUSINC*(TBUSINC >0))*(SPEARN/HHEARN)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(SPEARN/HHEARN))*.029*(1992 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*(SPEARN/HHEARN))*.029*(1992 EQ 1992); MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(REARN/HHEARN) <= 53400)*(100*.124))+(100*.029)*(1992 GE 1995)+ (100*.029)*(1992 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1)*(REARN/HHEARN) <= 125000); MPRINT(TAXSCF): IF ((MIN(53400,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(REARN/HHEARN))*.029) > 0) THEN PAYROLLATR=100*((MIN(53400,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*.124 + ((1992 GE 1995)*((TWSINC+TBUSINC*(TBUSINC >0))*(REARN/HHEARN))*.029)+ ((1992 EQ 1992)*(MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*(REARN/HHEARN))*.029))/ ((TWSINC+TBUSINC*(TBUSINC > 0))*(REARN/HHEARN))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X4115 =-1 & X4715=-1) | (X4115 >=1 & X4715=-1) | (X4115=-1 & X4715 >=1) | (HHEARN=0) THEN DO; 536 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): IF ((TWSINC+TBUSINC*(TBUSINC >0)) <= 53400) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=(TWSINC+TBUSINC*(TBUSINC >0))*.124+ (TWSINC+TBUSINC*(TBUSINC >0))*.029; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((TWSINC+TBUSINC*(TBUSINC >0)) > 53400) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(2*53400,((TWSINC+TBUSINC*(TBUSINC >0))))*.124+ (TWSINC+TBUSINC*(TBUSINC >0))*.029*(1992 GE 1995)+ MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)))*.029*(1992 EQ 1992); MPRINT(TAXSCF): END; MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(.5) <= 53400)*(100*.124))+(100*.029)*(1992 GE 1995)+ (100*.029)*(1992 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB*.5 > 0) THEN PAYROLLATR=100*((PAYROLLIAB*.5)/((TWSINC+TBUSINC*(TBUSINC >0))*(.5))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X4106=0 & X4706=0 & X102^=0 & (TWSINC > 0 | TBUSINC > 0)) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=2*(MIN(53400,((TWSINC+TBUSINC*(TBUSINC >0))*(.5)))*.124 + ((TWSINC+TBUSINC*(TBUSINC >0))*(.5))*.029*(1992 GE 1995)+ (MIN(125000,(TWSINC+TBUSINC*(TBUSINC >0)*(.5)))*.029)*(1992 EQ 1992)); MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(.5) <= 53400)*(100*.124))+(100*.029)*(1992 GE 1995)+ (100*.029)*(1992 EQ 1992)*((TWSINC+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB*.5 > 0) THEN PAYROLLATR=100*((PAYROLLIAB*.5)/((TWSINC+TBUSINC*(TBUSINC >0))*(.5))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TAXUNIT >= 1 THEN DO; MPRINT(TAXSCF): IF (WSINCOME > 0 | TBUSINC > 0) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(53400,(WSINCOME+TBUSINC*(TBUSINC >0)))*.124 + ((WSINCOME+TBUSINC*(TBUSINC >0))*.029)*(1992 GE 1995)+ (MIN(125000,(WSINCOME+TBUSINC*(TBUSINC >0)))*.029)*(1992 EQ 1992); MPRINT(TAXSCF): PAYROLLMTR=(((WSINCOME+TBUSINC*(TBUSINC > 0)+1)<=53400)*(100*.124))+ (100*.029)*(1992 GE 1995)+ (100*.029)*(1992 EQ 1992)*((WSINCOME+TBUSINC*(TBUSINC > 0)+1) <= 125000); MPRINT(TAXSCF): IF (PAYROLLIAB >0) THEN PAYROLLATR=100*(PAYROLLIAB/(WSINCOME+TBUSINC*(TBUSINC > 0))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF PAYROLLIAB=0 & PAYROLLMTR=0 & PAYROLLATR=0 & (TWSINC > 0 | TBUSINC > 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= TWSINC= TBUSINC= R_LABORINC= R_BUSINC= R_SOLEPROP= SP_LABORINC= SP_BUSINC= SP_SOLEPROP= REARN= SPEARN= HHEARN= TAXUNIT=/; MPRINT(TAXSCF): * Check for missing variables; MPRINT(TAXSCF): ARRAY CHVARS {*} YY1 Y1 CHARITYAMT X5823 TOTITEMDCT STDDCT AGI AGICL AGIGE50K DEDCTLIM X7372 X7018 X8023 X105 PERSEXP KIDS TOTEXPT FILESTAT TOTEXPTAMT EXPTLIM RAGE SPAGE TUAGE YEAR STATE TAXUNIT WSINCOME WSINCSP TBUSINC NTAXINC INTINC DIVINC CAPGLINC RENTINC UNEMPINC CHSPALINC AFDCINC PENINC OTHINC GSSINC OTHPINC NONTAX RENT UNADJTOTDEDCT CHCAREXP TINCOME TOTXINC STCAPINC LTCAPINC PAYROLLIAB PAYROLLMTR PAYROLLATR LWP KIDSU17 KIDSU18 KIDSU13; MPRINT(TAXSCF): DO I=1 TO DIM(CHVARS); MPRINT(TAXSCF): IF CHVARS{I}=. THEN PUT "MISSING VALUE FOR " Y1= CHVARS{I}=; MPRINT(TAXSCF): END; MPRINT(TAXSCF): RUN; NOTE: The file "null.txt" is: Filename=/disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code/null.txt, Owner Name=taxsim,Group Name=taxsim, Access Permission=-rw-r--r--, Last Modified=29Jan2021:13:36:17 NOTE: 803 records were written to the file "null.txt". The minimum record length was 0. The maximum record length was 367. NOTE: There were 23134 observations read from the data set WORK.SCF. NOTE: The data set WORK.SCF has 23134 observations and 4518 variables. NOTE: DATA statement used (Total process time): real time 0.56 seconds cpu time 0.57 seconds 537 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): * Create a dataset for full TAXSIM. Breaking out total itemized deductions into its parts - have applied the limits for the mortgage interest deduction and investment interest expense, but not for charitable contributions.; MPRINT(TAXSCF): PROC SORT DATA=SCF; MPRINT(TAXSCF): BY TAXUNITID; MPRINT(TAXSCF): RUN; NOTE: There were 23134 observations read from the data set WORK.SCF. NOTE: The data set WORK.SCF has 23134 observations and 4518 variables. NOTE: PROCEDURE SORT used (Total process time): real time 0.34 seconds cpu time 0.34 seconds MPRINT(TAXSCF): proc means; MPRINT(TAXSCF): var y1 yy1 year year; MPRINT(TAXSCF): run; NOTE: There were 23134 observations read from the data set WORK.SCF. NOTE: The PROCEDURE MEANS printed page 1036. NOTE: PROCEDURE MEANS used (Total process time): real time 0.05 seconds cpu time 0.05 seconds MPRINT(TAXSCF): * Rename variables to TAXSIM names, use lowercase for TAXSIM file names; MPRINT(TAXSCF): libname swt "../swt/sas"; NOTE: Libref SWT was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/swt/sas MPRINT(TAXSCF): DATA swt.swt92; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): rep=mod(y1,10); MPRINT(TAXSCF): * IF FILESTAT > 0; MPRINT(TAXSCF): mstat=1*(FILESTAT IN(1 4))+2*(FILESTAT IN(2 5))+6*(FILESTAT IN(3)); MPRINT(TAXSCF): otherprop=RENTINC+TBUSINC; MPRINT(TAXSCF): nonprop=CHSPALINC+OTHINC; MPRINT(TAXSCF): otheritem=TOTINVEX+TOTPINEX; MPRINT(TAXSCF): mortgage=ADJDEDCT+X5823; MPRINT(TAXSCF): scorp=0; MPRINT(TAXSCF): pbusinc=0; MPRINT(TAXSCF): pprofinc=0; MPRINT(TAXSCF): sbusinc=0; MPRINT(TAXSCF): sprofinc=0; MPRINT(TAXSCF): tyear=YEAR; MPRINT(TAXSCF): tstate=STATE; MPRINT(TAXSCF): * set idtl=2 to get detailed output from TAXSIM; MPRINT(TAXSCF): idtl=2; MPRINT(TAXSCF): DROP STATE; MPRINT(TAXSCF): RENAME TAXUNITID=taxsimid TUAGE=page SPAGE=sage KIDS=depx KIDSU13=dep13 KIDSU17=dep17 KIDSU18=dep18 WSINCOME=pwages WSINCSP=swages DIVINC=dividends INTINC=intrec STCAPINC=stcg LTCAPINC=ltcg PENINC=pensions GSSINC=gssi UNEMPINC=ui AFDCINC=transfers RENT=rentpaid RESTAXM1=proptax CHCAREXP=childcare tyear=year; MPRINT(TAXSCF): RUN; WARNING: Variable tyear cannot be renamed to year because year already exists. NOTE: There were 23134 observations read from the data set WORK.SCF. NOTE: The data set SWT.SWT92 has 23134 observations and 4531 variables. 538 The SAS System 13:32 Friday, January 29, 2021 NOTE: DATA statement used (Total process time): real time 4.67 seconds cpu time 0.60 seconds MPRINT(TAXSCF): proc means; MPRINT(TAXSCF): var y1 yy1 year; MPRINT(TAXSCF): run; NOTE: There were 23134 observations read from the data set SWT.SWT92. NOTE: The PROCEDURE MEANS printed page 1037. NOTE: PROCEDURE MEANS used (Total process time): real time 3.84 seconds cpu time 0.29 seconds MPRINT(TAXSCF): libname taxsim "../txpydata/sas"; NOTE: Libref TAXSIM was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/txpydata/sas MPRINT(TAXSCF): proc contents data=swt.swt92; MPRINT(TAXSCF): run; NOTE: PROCEDURE CONTENTS used (Total process time): real time 0.00 seconds cpu time 0.01 seconds NOTE: The PROCEDURE CONTENTS printed pages 1038-1125. MPRINT(TAXSCF): DATA taxsim.txpydata92; MPRINT(TAXSCF): SET swt.swt92(KEEP=taxsimid year mstat page sage depx dep13 dep17 dep18 pwages swages dividends intrec stcg ltcg otherprop nonprop pensions gssi ui transfers rentpaid proptax otheritem childcare mortgage scorp pbusinc pprofinc sbusinc sprofinc Y1 YY1 taxunit rep); MPRINT(TAXSCF): y1=Y1; MPRINT(TAXSCF): yy1=YY1; MPRINT(TAXSCF): RUN; NOTE: There were 23134 observations read from the data set SWT.SWT92. NOTE: The data set TAXSIM.TXPYDATA92 has 23134 observations and 35 variables. NOTE: DATA statement used (Total process time): real time 0.15 seconds cpu time 0.06 seconds MPRINT(TAXSCF): proc contents data=taxsim.txpydata92; MPRINT(TAXSCF): run; NOTE: PROCEDURE CONTENTS used (Total process time): real time 0.01 seconds cpu time 0.02 seconds NOTE: The PROCEDURE CONTENTS printed pages 1126-1127. 3923 3924 %TAXSCF(SYEAR=1989,TYEAR=1988,WYEAR=1986,ITDLIM1=0,ITDLIM2=0,ITDL10=0,EXPAMT=1950, 3925 EXPAMT2=0,EXDL9=0,EXPAGIT1=0,EXPAGIT2=0,EXLIM1=0,EXLIM2=0, 3926 EXLIM3=0,EXLIM4=0,STDAMT1=3000,STDAMT2=3750,STDAMT3=5000,STDAMT4=5600, 3927 STDAMT5=6200,STDAMT6=4400,STDAMT7=5150,FILELIM1=4950,FILELIM2=5700,FILELIM3=8900,FILELIM4=9500, 539 The SAS System 13:32 Friday, January 29, 2021 3928 FILELIM5=10100,FILELIM6=1950,FILELIM7=6350,FILELIM8=7100,FILELIM9=7850,FILELIM10=8500,LCGAGI1=.91, 3929 LCLAGI1=.68,LCGAGI2=.92,LCLAGI2=.63,LCGAGI3=.93,LCLAGI3=.58, MPRINT(TAXSCF): * define libraries for SCF public datasets; 3930 PAYTAX=.1502,MEDHI=0,PTLIM=45000,HTAXFILE=HTAXFILE=&SYSPARM); MPRINT(TAXSCF): LIBNAME SCF89 "../orig/sas7bdat" ACCESS=READONLY; NOTE: Libref SCF89 refers to the same physical library as SCF92. NOTE: Libref SCF89 was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/orig/sas7bdat MPRINT(TAXSCF): * directory for datasets created by the program; MPRINT(TAXSCF): LIBNAME OUT "."; NOTE: Libref OUT was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code MPRINT(TAXSCF): * csv file for TAXSIM v32; MPRINT(TAXSCF): FILENAME SCFTAX "txpydata89.csv"; MPRINT(TAXSCF): * csv from TAXSIM v32; MPRINT(TAXSCF): FILENAME TAXSIM "results89.csv"; MPRINT(TAXSCF): * read in public SCF data, assumes dataset name is pXXiY.sas7bdat; MPRINT(TAXSCF): * NOTE: Any changes to the libname or data set name must also be made in this data step; MPRINT(TAXSCF): DATA MAIN; MPRINT(TAXSCF): SET SCF89.P89I6; NOTE: Data file SCF89.P89I6.DATA is in a format that is native to another host, or the file encoding does not match the session encoding. Cross Environment Data Access will be used, which might require additional CPU resources and might reduce performance. MPRINT(TAXSCF): YY1=XX1; MPRINT(TAXSCF): Y1=X1; MPRINT(TAXSCF): RUN; NOTE: There were 15715 observations read from the data set SCF89.P89I6. NOTE: The data set WORK.MAIN has 15715 observations and 3502 variables. NOTE: DATA statement used (Total process time): real time 2.31 seconds cpu time 2.31 seconds MPRINT(TAXSCF): PROC SORT DATA=MAIN; MPRINT(TAXSCF): BY Y1; MPRINT(TAXSCF): RUN; NOTE: There were 15715 observations read from the data set WORK.MAIN. NOTE: The data set WORK.MAIN has 15715 observations and 3502 variables. NOTE: PROCEDURE SORT used (Total process time): real time 0.14 seconds cpu time 0.14 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET MAIN; MPRINT(TAXSCF): file "null.txt"; MPRINT(TAXSCF): WGT=(X42001/5); MPRINT(TAXSCF): POP=1; MPRINT(TAXSCF): * setting STATE variable to zero, set to -1 if you want TAXSIM to compute state tax for all 51 states; MPRINT(TAXSCF): STATE=0; MPRINT(TAXSCF): * Small data fix for one case in 1992; MPRINT(TAXSCF): * Small data fix for one case in 1998; MPRINT(TAXSCF): * Small data fix for one case in 2007; MPRINT(TAXSCF): * Small data fix for one case in 2013; 540 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): * Payment frequency on other loans not asked in 1989, assumed to be monthly; MPRINT(TAXSCF): X7527=4*(X2718>0)+X2718*(X2718<=0); MPRINT(TAXSCF): X7526=4*(X2735>0)+X2735*(X2735<=0); MPRINT(TAXSCF): X7525=4*(X2818>0)+X2818*(X2818<=0); MPRINT(TAXSCF): X7524=4*(X2835>0)+X2835*(X2835<=0); MPRINT(TAXSCF): X7523=4*(X2918>0)+X2918*(X2918<=0); MPRINT(TAXSCF): X7522=4*(X2935>0)+X2935*(X2935<=0); MPRINT(TAXSCF): * Only one other income variable after 1992, set to zero for 1992 forward; MPRINT(TAXSCF): * Spouse/partner in PEU, need to create X7020 for 1989 to 1998; MPRINT(TAXSCF): IF X107 IN(0 2 5 12) THEN X7020=1; MPRINT(TAXSCF): ELSE IF X107=1 THEN X7020=2; MPRINT(TAXSCF): * A few other recodes to construct variables not asked in 1989 and 1992; MPRINT(TAXSCF): X7135=5*(X714=1); MPRINT(TAXSCF): X7133=0; MPRINT(TAXSCF): X7134=0; MPRINT(TAXSCF): X7367=0; MPRINT(TAXSCF): X7368=0; MPRINT(TAXSCF): X7369=0; MPRINT(TAXSCF): X7018=0; MPRINT(TAXSCF): X7372=5*(X8023=5); MPRINT(TAXSCF): X7001=(X113 IN(2 3 4 5))+(X119 IN(2 3 4 5))+(X125 IN(2 3 4 5))+(X131 IN(2 3 4 5))+(X137 IN(2 3 4 5)) +(X207 IN(2 3 4 5))+(X213 IN(2 3 4 5))+(X219 IN(2 3 4 5))+(X225 IN(2 3 4 5))+(X231 IN(2 3 4 5)); MPRINT(TAXSCF): X7377=((X5918=1)+2*(X5918=5))*(1989 EQ 1992); MPRINT(TAXSCF): X7392=(X6111=1)+2*(X6111=5); MPRINT(TAXSCF): * Number of years with spouse/partner; MPRINT(TAXSCF): IF 1989=X8005 THEN X7370=-1; MPRINT(TAXSCF): ELSE X7370=1989-X8005; MPRINT(TAXSCF): * Number of people in NPEU, need to compute for 1989 to 2004, variable exists for 2007 forward; MPRINT(TAXSCF): X7050=X101-X7001; MPRINT(TAXSCF): * Absent spouse/partner indicator; MPRINT(TAXSCF): IF (X100=5) | (X106=5 & X107 IN(2 5 12)) THEN ABSP_P=1; MPRINT(TAXSCF): ELSE ABSP_P=0; MPRINT(TAXSCF): PERSEXP=1+(X105 IN(1 2))*(ABSP_P=0); MPRINT(TAXSCF): * Including children living elsewhere that are under 18, max of one extra as there is uncertainty about dependent status; MPRINT(TAXSCF): 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) + (X226 IN(4 13))*(X228 < 19) + (X5912 > 0 | X5912=-2); MPRINT(TAXSCF): * For the child tax credit - must be under 17; MPRINT(TAXSCF): 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) + (X226 IN(4 13))*(X228 < 17); MPRINT(TAXSCF): KIDSU18=(X108 IN(4 13))*(X110 < 18) + (X114 IN(4 13))*(X116 < 18) + (X120 IN(4 13))*(X122 < 18) + (X126 IN(4 13))*(X128 < 18) + (X132 IN(4 13))*(X134 < 18) + (X202 IN(4 13))*(X204 < 18) + (X208 IN(4 13))*(X210 < 18) + (X214 IN(4 13))*(X216 < 18) + (X220 IN(4 13))*(X222 < 18) + (X226 IN(4 13))*(X228 < 18); MPRINT(TAXSCF): KIDSU13=(X108 IN(4 13))*(X110 < 13) + (X114 IN(4 13))*(X116 < 13) + (X120 IN(4 13))*(X122 < 13) + (X126 IN(4 13))*(X128 < 13) + (X132 IN(4 13))*(X134 < 13) + (X202 IN(4 13))*(X204 < 13) + (X208 IN(4 13))*(X210 < 13) + (X214 IN(4 13))*(X216 < 13) + (X220 IN(4 13))*(X222 < 13) + (X226 IN(4 13))*(X228 < 13); MPRINT(TAXSCF): * Indicator for R living with a partner; MPRINT(TAXSCF): LWP=(X8023=2); MPRINT(TAXSCF): RAGE=X14; MPRINT(TAXSCF): * Set spouse/parnter age to zero if absent spouse/partner; MPRINT(TAXSCF): SPAGE=X19*(X7020=2); MPRINT(TAXSCF): * Possible scenarios, not considering NPEU right now, will create those tax units last 1. Married filing jointly households = tax unit 2. Single person households = tax unit 3. Filing separately households = split into two tax units, need to determine if single or married filing separately filing status 4. LWP households = split into two tax units even if one person is a nonfiler For 3. and 4., one of the tax units may have head of household status depending on presence of children For each new tax unit, start with replicate of household data and parse out 541 The SAS System 13:32 Friday, January 29, 2021 income, deductions, exemptions; MPRINT(TAXSCF): * Create new observations from married filing separately households or LWP households. 0. Tax unit = household 1. Created tax unit for household head 2. Created tax unit for spouse/parnter 3-8. Created tax unit for NPEU member Note: If R and Sp are legally married for more than one year, treat as married filing joint even if x5746=3,4. If R and Sp LWP and report filing jointly treat as two tax units. If R and Sp married and report filing separately, treat as filing jointly unless either R or Sp has a past marriage. Inspection of the data reveals that too many married couples report filing separately when compared to the IRS data. The past marriage condition put the number closer to the IRS data.; MPRINT(TAXSCF): MARRIED=(X8023=1 & X105=1 & X7370 >= 1 & X7020=2); MPRINT(TAXSCF): IF (X5744 IN(1 6) & X5746=1 & MARRIED=1) | (MARRIED=1 & ((X5744=5 | X5746 IN(3 4)) | (X5746=2 & X7377^=2 & X7392^=2))) | (X8023 > 0 & X105=0 & (X5744=5 | (X5744 IN(1 6) & X5746=0))) | (X8023 > 0 & X105 > 0 & X5744 IN(1 5 6) & X5746=0 & X7020=1) | (X8023=8 & X105=0 & X5744=1 & X5746=1) THEN TAXUNIT=0; MPRINT(TAXSCF): ELSE IF (X5744 IN(1 6) & X5746 IN(2 3 4)) | (X8023 > 0 & X105 > 0 & (X5744=5 | (X5744 IN(1 6) & X5746 IN(0 1)))) | (X8023=1 & X105=1 & X7370=-1 & X5744=1) THEN TAXUNIT=1; MPRINT(TAXSCF): ELSE PUT "MISSING TAXUNIT STATUS " YY1= X5744= X5746= X8023= X105= X7020= MARRIED= X7372= X7018= X7370=; MPRINT(TAXSCF): TUAGE=RAGE; MPRINT(TAXSCF): RUN; NOTE: Variable X5918 is uninitialized. NOTE: Variable X6111 is uninitialized. NOTE: The file "null.txt" is: Filename=/disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code/null.txt, Owner Name=taxsim,Group Name=taxsim, Access Permission=-rw-r--r--, Last Modified=29Jan2021:13:36:29 NOTE: 0 records were written to the file "null.txt". NOTE: There were 15715 observations read from the data set WORK.MAIN. NOTE: The data set WORK.SCF has 15715 observations and 3539 variables. NOTE: DATA statement used (Total process time): real time 0.25 seconds cpu time 0.26 seconds MPRINT(TAXSCF): DATA NEWUNITS; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): IF TAXUNIT=1; MPRINT(TAXSCF): TAXUNIT=2; MPRINT(TAXSCF): TUAGE=SPAGE; MPRINT(TAXSCF): SPAGE=0; MPRINT(TAXSCF): RUN; NOTE: There were 15715 observations read from the data set WORK.SCF. NOTE: The data set WORK.NEWUNITS has 470 observations and 3539 variables. NOTE: DATA statement used (Total process time): real time 0.10 seconds cpu time 0.10 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF NEWUNITS; MPRINT(TAXSCF): RUN; NOTE: There were 15715 observations read from the data set WORK.SCF. NOTE: There were 470 observations read from the data set WORK.NEWUNITS. NOTE: The data set WORK.SCF has 16185 observations and 3539 variables. NOTE: DATA statement used (Total process time): 542 The SAS System 13:32 Friday, January 29, 2021 real time 0.22 seconds cpu time 0.22 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): * Codes for filestat, assigning status even if did not file, will determine non-filer status later, filing status for split tax units done after splitting up income 1= Single 2= Married filing jointly 3= Married filing separately 4= Head of HH 5= Qualified widower; MPRINT(TAXSCF): FILESTAT=0; MPRINT(TAXSCF): IF TAXUNIT=0 THEN DO; MPRINT(TAXSCF): IF (MARRIED=1) THEN FILESTAT=2; MPRINT(TAXSCF): ELSE IF MARRIED=0 THEN DO; MPRINT(TAXSCF): IF PERSEXP=1 & KIDS=0 THEN FILESTAT=1; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS > 0 & X8023=5 & X7372=5 & X8007>=1986 THEN FILESTAT=5; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS > 0 THEN FILESTAT=4; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTEXPT=PERSEXP+KIDS; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * No AGI variables starting in 2010; MPRINT(TAXSCF): * Coding income variables with -1 and -2 to zero; MPRINT(TAXSCF): ARRAY NEG {*} X5704 X5714 X5724 X5726 X5729; MPRINT(TAXSCF): DO I=1 TO DIM(NEG); MPRINT(TAXSCF): IF NEG{I} IN(-2 -1) THEN NEG{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Income from wages and business; MPRINT(TAXSCF): R_LABORINC=MAX(0,X4112) MPRINT(ACONV): *((X4113=2)*52.18+(X4113=3)*26.09+(X4113=4)*12+(X4113=5)*4+(X4113=6)+(X4113=8)+ (X4113=11)*2+(X4113=12)*6+(X4113=31)*24+(X4113=14)+(X4113=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): SP_LABORINC=MAX(0,X4712) MPRINT(ACONV): *((X4713=2)*52.18+(X4713=3)*26.09+(X4713=4)*12+(X4713=5)*4+(X4713=6)+(X4713=8)+ (X4713=11)*2+(X4713=12)*6+(X4713=31)*24+(X4713=14)+(X4713=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): R_BUSINC=MAX(0,X4131) MPRINT(ACONV): *((X4132=2)*52.18+(X4132=3)*26.09+(X4132=4)*12+(X4132=5)*4+(X4132=6)+(X4132=8)+ (X4132=11)*2+(X4132=12)*6+(X4132=31)*24+(X4132=14)+(X4132=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): SP_BUSINC=MAX(0,X4731) MPRINT(ACONV): *((X4732=2)*52.18+(X4732=3)*26.09+(X4732=4)*12+(X4732=5)*4+(X4732=6)+(X4732=8)+ (X4732=11)*2+(X4732=12)*6+(X4732=31)*24+(X4732=14)+(X4732=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): * Income from pensions and tax-deferred account withdrawals. No withdrawal information for IRAs or future pensions prior to 2004. No withdrawal information for any tax-deferred accounts, aside from other income, prior to 2001; MPRINT(TAXSCF): R_REGPEN=MAX(0,(X5318 MPRINT(ACONV): *((X5319=2)*52.18+(X5319=3)*26.09+(X5319=4)*12+(X5319=5)*4+(X5319=6)+(X5319=8)+ (X5319=11)*2+(X5319=12)*6+(X5319=31)*24+(X5319=14)+(X5319=22)) MPRINT(TAXSCF): *(X5315=1)*(X5317>=1))) +MAX(0,(X5326 MPRINT(ACONV): *((X5327=2)*52.18+(X5327=3)*26.09+(X5327=4)*12+(X5327=5)*4+(X5327=6)+(X5327=8)+ (X5327=11)*2+(X5327=12)*6+(X5327=31)*24+(X5327=14)+(X5327=22)) MPRINT(TAXSCF): *(X5323=1)*(X5325>=1))) +MAX(0,(X5334 MPRINT(ACONV): *((X5335=2)*52.18+(X5335=3)*26.09+(X5335=4)*12+(X5335=5)*4+(X5335=6)+(X5335=8)+ (X5335=11)*2+(X5335=12)*6+(X5335=31)*24+(X5335=14)+(X5335=22)) MPRINT(TAXSCF): *(X5331=1)*(X5333>=1))) +MAX(0,(X5418 MPRINT(ACONV): *((X5419=2)*52.18+(X5419=3)*26.09+(X5419=4)*12+(X5419=5)*4+(X5419=6)+(X5419=8)+ (X5419=11)*2+(X5419=12)*6+(X5419=31)*24+(X5419=14)+(X5419=22)) MPRINT(TAXSCF): *(X5415=1)*(X5417>=1))) +MAX(0,(X5426 543 The SAS System 13:32 Friday, January 29, 2021 MPRINT(ACONV): *((X5427=2)*52.18+(X5427=3)*26.09+(X5427=4)*12+(X5427=5)*4+(X5427=6)+(X5427=8)+ (X5427=11)*2+(X5427=12)*6+(X5427=31)*24+(X5427=14)+(X5427=22)) MPRINT(TAXSCF): *(X5423=1)*(X5425>=1))) +MAX(0,(X5434 MPRINT(ACONV): *((X5435=2)*52.18+(X5435=3)*26.09+(X5435=4)*12+(X5435=5)*4+(X5435=6)+(X5435=8)+ (X5435=11)*2+(X5435=12)*6+(X5435=31)*24+(X5435=14)+(X5435=22)) MPRINT(TAXSCF): *(X5431=1)*(X5433>=1))); MPRINT(TAXSCF): R_WITHDRAW=(X5724)*(X5725=11)*.5+(X5726)*(X5727=11)*.5; MPRINT(TAXSCF): SP_REGPEN=MAX(0,(X5318 MPRINT(ACONV): *((X5319=2)*52.18+(X5319=3)*26.09+(X5319=4)*12+(X5319=5)*4+(X5319=6)+(X5319=8)+ (X5319=11)*2+(X5319=12)*6+(X5319=31)*24+(X5319=14)+(X5319=22)) MPRINT(TAXSCF): *(X5315=2)*(X5317>=1))) +MAX(0,(X5326 MPRINT(ACONV): *((X5327=2)*52.18+(X5327=3)*26.09+(X5327=4)*12+(X5327=5)*4+(X5327=6)+(X5327=8)+ (X5327=11)*2+(X5327=12)*6+(X5327=31)*24+(X5327=14)+(X5327=22)) MPRINT(TAXSCF): *(X5323=2)*(X5325>=1))) +MAX(0,(X5334 MPRINT(ACONV): *((X5335=2)*52.18+(X5335=3)*26.09+(X5335=4)*12+(X5335=5)*4+(X5335=6)+(X5335=8)+ (X5335=11)*2+(X5335=12)*6+(X5335=31)*24+(X5335=14)+(X5335=22)) MPRINT(TAXSCF): *(X5331=2)*(X5333>=1))) +MAX(0,(X5418 MPRINT(ACONV): *((X5419=2)*52.18+(X5419=3)*26.09+(X5419=4)*12+(X5419=5)*4+(X5419=6)+(X5419=8)+ (X5419=11)*2+(X5419=12)*6+(X5419=31)*24+(X5419=14)+(X5419=22)) MPRINT(TAXSCF): *(X5415=2)*(X5417>=1))) +MAX(0,(X5426 MPRINT(ACONV): *((X5427=2)*52.18+(X5427=3)*26.09+(X5427=4)*12+(X5427=5)*4+(X5427=6)+(X5427=8)+ (X5427=11)*2+(X5427=12)*6+(X5427=31)*24+(X5427=14)+(X5427=22)) MPRINT(TAXSCF): *(X5423=2)*(X5425>=1))) +MAX(0,(X5434 MPRINT(ACONV): *((X5435=2)*52.18+(X5435=3)*26.09+(X5435=4)*12+(X5435=5)*4+(X5435=6)+(X5435=8)+ (X5435=11)*2+(X5435=12)*6+(X5435=31)*24+(X5435=14)+(X5435=22)) MPRINT(TAXSCF): *(X5431=2)*(X5433>=1))); MPRINT(TAXSCF): SP_WITHDRAW=(X5724)*(X5725=11)*.5+(X5726)*(X5727=11)*.5; MPRINT(TAXSCF): * For new tax units need to split up income and determine which new tax unit is assigned which deductions and exemptions. Also need to zero out any variables not relevant to the new tax unit (ex. spouses wages); MPRINT(TAXSCF): IF TAXUNIT IN(1 2) THEN DO; MPRINT(TAXSCF): * age; MPRINT(TAXSCF): IF (TAXUNIT=1) THEN SPAGE=0; MPRINT(TAXSCF): * wages; MPRINT(TAXSCF): IF (TAXUNIT=1 & (R_LABORINC+SP_LABORINC>0)) THEN WSINCOME=MAX(0,X5702)*(R_LABORINC/(R_LABORINC+SP_LABORINC))*(R_LABORINC>0); MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & (R_LABORINC+SP_LABORINC>0)) THEN WSINCOME=MAX(0,X5702)*(SP_LABORINC/(R_LABORINC+SP_LABORINC))*(SP_LABORINC>0); MPRINT(TAXSCF): ELSE WSINCOME=MAX(0,X5702)*.5; MPRINT(TAXSCF): WSINCSP=0; MPRINT(TAXSCF): * business income; MPRINT(TAXSCF): R_SOLEPROP=(X4106 IN(2 3 4) | (X3113=1 & X3119=2) | (X3213=1 & X3219=2) | (X3313=1 & X3319=2)); MPRINT(TAXSCF): SP_SOLEPROP=(X4706 IN(2 3 4) | (X3114=1 & X3119=2) | (X3214=1 & X3219=2) | (X3313=1 & X3319=2)); MPRINT(TAXSCF): IF (TAXUNIT=1 & (R_BUSINC+SP_BUSINC>0) & (R_SOLEPROP=1 | SP_SOLEPROP=1)) THEN DO; MPRINT(TAXSCF): IF (R_SOLEPROP=1 & SP_SOLEPROP=1) THEN TBUSINC=X5704*(R_BUSINC/(R_BUSINC+SP_BUSINC))*(R_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=1 & SP_SOLEPROP=0) THEN TBUSINC=X5704; MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=0 & SP_SOLEPROP=1) THEN TBUSINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & (R_BUSINC+SP_BUSINC>0) & (R_SOLEPROP=1 | SP_SOLEPROP=1)) THEN DO; MPRINT(TAXSCF): IF (R_SOLEPROP=1 & SP_SOLEPROP=1) THEN TBUSINC=X5704*(SP_BUSINC/(R_BUSINC+SP_BUSINC))*(SP_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=0 & SP_SOLEPROP=1) THEN TBUSINC=X5704; MPRINT(TAXSCF): ELSE IF (R_SOLEPROP=1 & SP_SOLEPROP=0) THEN TBUSINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE TBUSINC=X5704*.5; MPRINT(TAXSCF): * interest, dividends, and capital gains - just split 50-50; MPRINT(TAXSCF): NTAXINC= MAX(0,X5706)*.5; MPRINT(TAXSCF): INTINC= MAX(0,X5708)*.5; MPRINT(TAXSCF): DIVINC= MAX(0,X5710)*.5; MPRINT(TAXSCF): IF X5712=-1 THEN CAPGLINC=0; 544 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE CAPGLINC=X5712*.5; MPRINT(TAXSCF): * rent, royalties, partnership and scorp income; MPRINT(TAXSCF): R_PARTNER_SCORP=(X4106 IN(2 3 4) | (X3113=1 & X3119 IN(1 3 6 11 12 15)) | (X3213=1 & X3219 IN(1 3 6 11 12 15))); MPRINT(TAXSCF): SP_PARTNER_SCORP=(X4106 IN(2 3 4) | (X3114=1 & X3119 IN(1 3 6 11 12 15)) | (X3214=1 & X3219 IN(1 3 6 11 12 15))); MPRINT(TAXSCF): IF (TAXUNIT=1 & (R_BUSINC+SP_BUSINC>0) & (R_PARTNER_SCORP=1 | SP_PARTNER_SCORP=1)) THEN DO; MPRINT(TAXSCF): IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=1) THEN RENTINC=X5714*(R_BUSINC/(R_BUSINC+SP_BUSINC))*(R_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=0) THEN RENTINC=X5714; MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=0 & SP_PARTNER_SCORP=1) THEN RENTINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & (R_BUSINC+SP_BUSINC>0) & (R_PARTNER_SCORP=1 | SP_PARTNER_SCORP=1)) THEN DO; MPRINT(TAXSCF): IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=1) THEN RENTINC=X5714*(SP_BUSINC/(R_BUSINC+SP_BUSINC))*(SP_BUSINC>0); MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=0 & SP_PARTNER_SCORP=1) THEN RENTINC=X5714; MPRINT(TAXSCF): ELSE IF (R_PARTNER_SCORP=1 & SP_PARTNER_SCORP=0) THEN RENTINC=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE RENTINC=X5714*.5; MPRINT(TAXSCF): * unemployment income, no questions about unemployed in past 12 months prior to 1998; MPRINT(TAXSCF): IF (TAXUNIT=1) THEN DO; MPRINT(TAXSCF): UNEMPINC=MAX(0,X5716)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2) THEN DO; MPRINT(TAXSCF): UNEMPINC=MAX(0,X5716)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * child support and alimony income; MPRINT(TAXSCF): IF (TAXUNIT=1 & X7377=2) THEN DO; MPRINT(TAXSCF): CHSPALINC=MAX(0,X5718)*(X7392^=2)+MAX(0,X5718)*(X7392=2)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2 & X7392=2) THEN DO; MPRINT(TAXSCF): CHSPALINC=MAX(0,X5718)*(X7377^=2)+MAX(0,X5718)*(X7377=2)*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE CHSPALINC=MAX(0,X5718)*.5; MPRINT(TAXSCF): * government transfers, split 50/50; MPRINT(TAXSCF): AFDCINC=MAX(0,X5720)*.5; MPRINT(TAXSCF): * other income, split 50/50 - remove other income that is non-taxable, such as scholarships/grants, inheritances/gifts/, support from family or others, also remove IRA/Keogh income; MPRINT(TAXSCF): * special fix for 1992, removing other income coded 14, repayment of debts, it appears the total amount of the debt was reported, not just the interest on the debt; MPRINT(TAXSCF): OTHINC= (X5724)*(X5725 NOT IN(3 11 12 13 28))*.5+(X5726)*(X5727 NOT IN(3 11 12 13 28))*.5; MPRINT(TAXSCF): * social security and pension income, adding in withdrawals from IRA/Keogh/401ks; MPRINT(TAXSCF): R_GSSINC=MAX(0,(X5306 MPRINT(ACONV): *((X5307=2)*52.18+(X5307=3)*26.09+(X5307=4)*12+(X5307=5)*4+(X5307=6)+(X5307=8)+ (X5307=11)*2+(X5307=12)*6+(X5307=31)*24+(X5307=14)+(X5307=22)) MPRINT(TAXSCF): *(X5305>=1))); MPRINT(TAXSCF): SP_GSSINC=MAX(0,(X5311 MPRINT(ACONV): *((X5312=2)*52.18+(X5312=3)*26.09+(X5312=4)*12+(X5312=5)*4+(X5312=6)+(X5312=8)+ (X5312=11)*2+(X5312=12)*6+(X5312=31)*24+(X5312=14)+(X5312=22)) MPRINT(TAXSCF): *(X5310>=1))); MPRINT(TAXSCF): T_GSSINC=MAX(0,((X5306 MPRINT(ACONV): *((X5307=2)*52.18+(X5307=3)*26.09+(X5307=4)*12+(X5307=5)*4+(X5307=6)+(X5307=8)+ (X5307=11)*2+(X5307=12)*6+(X5307=31)*24+(X5307=14)+(X5307=22)) MPRINT(TAXSCF): *(X5305>=1))+(X5311 MPRINT(ACONV): *((X5312=2)*52.18+(X5312=3)*26.09+(X5312=4)*12+(X5312=5)*4+(X5312=6)+(X5312=8)+ (X5312=11)*2+(X5312=12)*6+(X5312=31)*24+(X5312=14)+(X5312=22)) MPRINT(TAXSCF): *(X5310>=1)))); MPRINT(TAXSCF): NOSS_X5722=MAX(0,(X5722-T_GSSINC)); 545 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): IF (TAXUNIT=1) THEN DO; MPRINT(TAXSCF): IF (R_REGPEN > 0) THEN PENINC=NOSS_X5722*(R_REGPEN/(R_REGPEN+SP_REGPEN))+R_WITHDRAW; MPRINT(TAXSCF): ELSE IF (R_REGPEN=0 & R_WITHDRAW > 0) THEN PENINC=R_WITHDRAW; MPRINT(TAXSCF): ELSE IF (R_REGPEN=0 & R_WITHDRAW=0 & SP_REGPEN > 0) THEN PENINC=0; MPRINT(TAXSCF): ELSE IF (R_REGPEN=0 & R_WITHDRAW=0 & SP_REGPEN=0) THEN PENINC=NOSS_X5722*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TAXUNIT=2) THEN DO; MPRINT(TAXSCF): IF (SP_REGPEN > 0) THEN PENINC=NOSS_X5722*(SP_REGPEN/(R_REGPEN+SP_REGPEN))+SP_WITHDRAW; MPRINT(TAXSCF): ELSE IF (SP_REGPEN=0 & SP_WITHDRAW > 0) THEN PENINC=SP_WITHDRAW; MPRINT(TAXSCF): ELSE IF (SP_REGPEN=0 & SP_WITHDRAW=0 & R_REGPEN > 0) THEN PENINC=0; MPRINT(TAXSCF): ELSE IF (SP_REGPEN=0 & SP_WITHDRAW=0 & R_REGPEN=0) THEN PENINC=NOSS_X5722*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): GSSINC=MAX(0,R_GSSINC)*(TAXUNIT=1)+MAX(0,SP_GSSINC)*(TAXUNIT=2); MPRINT(TAXSCF): OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; MPRINT(TAXSCF): NONTAX=NTAXINC+AFDCINC; MPRINT(TAXSCF): RENT=MAX(0,(X602 MPRINT(ACONV): *((X603=2)*52.18+(X603=3)*26.09+(X603=4)*12+(X603=5)*4+(X603=6)+(X603=8)+ (X603=11)*2+(X603=12)*6+(X603=31)*24+(X603=14)+(X603=22)) MPRINT(TAXSCF): ),(X612 MPRINT(ACONV): *((X613=2)*52.18+(X613=3)*26.09+(X613=4)*12+(X613=5)*4+(X613=6)+(X613=8)+ (X613=11)*2+(X613=12)*6+(X613=31)*24+(X613=14)+(X613=22)) MPRINT(TAXSCF): ),(X619 MPRINT(ACONV): *((X620=2)*52.18+(X620=3)*26.09+(X620=4)*12+(X620=5)*4+(X620=6)+(X620=8)+ (X620=11)*2+(X620=12)*6+(X620=31)*24+(X620=14)+(X620=22)) MPRINT(TAXSCF): ), (X708 MPRINT(ACONV): *((X709=2)*52.18+(X709=3)*26.09+(X709=4)*12+(X709=5)*4+(X709=6)+(X709=8)+ (X709=11)*2+(X709=12)*6+(X709=31)*24+(X709=14)+(X709=22)) MPRINT(TAXSCF): ))*.5; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TAXUNIT=0 THEN DO; MPRINT(TAXSCF): R_SOLEPROP=(X4106 IN(2 3 4) | (X3113=1 & X3119=2) | (X3213=1 & X3219=2) | (X3313=1 & X3319=2)); MPRINT(TAXSCF): SP_SOLEPROP=(X4706 IN(2 3 4) | (X3114=1 & X3119=2) | (X3214=1 & X3219=2) | (X3313=1 & X3319=2)); MPRINT(TAXSCF): * Split wages across primary and secondary earner for married filing jointly households; MPRINT(TAXSCF): IF FILESTAT^=2 THEN DO; MPRINT(TAXSCF): WSINCOME=MAX(0,X5702); MPRINT(TAXSCF): WSINCSP=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF FILESTAT=2 THEN DO; MPRINT(TAXSCF): IF ((R_LABORINC > 0 & SP_LABORINC=0) | (R_LABORINC=0 & SP_LABORINC > 0) | (R_LABORINC=0 & SP_LABORINC=0)) THEN DO; MPRINT(TAXSCF): WSINCOME=MAX(0,X5702); MPRINT(TAXSCF): WSINCSP=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (R_LABORINC > 0 & SP_LABORINC > 0) THEN DO; MPRINT(TAXSCF): WSINCOME=MAX(0,X5702)*(R_LABORINC/(R_LABORINC+SP_LABORINC)); MPRINT(TAXSCF): WSINCSP=MAX(0,X5702)*(SP_LABORINC/(R_LABORINC+SP_LABORINC)); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TBUSINC = X5704; MPRINT(TAXSCF): NTAXINC= MAX(0,X5706); MPRINT(TAXSCF): INTINC= MAX(0,X5708); MPRINT(TAXSCF): DIVINC= MAX(0,X5710); MPRINT(TAXSCF): IF X5712=-1 THEN CAPGLINC=0; MPRINT(TAXSCF): ELSE CAPGLINC=X5712; MPRINT(TAXSCF): RENTINC= X5714; MPRINT(TAXSCF): UNEMPINC = MAX(0,X5716); MPRINT(TAXSCF): CHSPALINC=MAX(0,X5718); MPRINT(TAXSCF): AFDCINC = MAX(0,X5720); 546 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): * Starting in 2004, IRA/Keogh/401K type income is not reported in other income, instead withdrawals are reported separately during the questions about the assets, so need to add the withdrawals to pension income. There may be a few withdrawals still reported as other income if the asset account was closed or emptied out during the year prior to the survey.; MPRINT(TAXSCF): * also remove other income that is non-taxable, such as scholarships/grants, inheritances/gifts/, support from family or others; MPRINT(TAXSCF): * special fix for 1992, removing other income coded 14, repayment of debts, it appears the total amount of the debt was report, not just the interest on the debt; MPRINT(TAXSCF): OTHINC= (X5724)*(X5725 NOT IN(3 11 12 13 28))+(X5726)*(X5727 NOT IN(3 11 12 13 28)); MPRINT(TAXSCF): GSSINC=MAX(0,((X5306 MPRINT(ACONV): *((X5307=2)*52.18+(X5307=3)*26.09+(X5307=4)*12+(X5307=5)*4+(X5307=6)+(X5307=8)+ (X5307=11)*2+(X5307=12)*6+(X5307=31)*24+(X5307=14)+(X5307=22)) MPRINT(TAXSCF): *(X5305>=1))+(X5311 MPRINT(ACONV): *((X5312=2)*52.18+(X5312=3)*26.09+(X5312=4)*12+(X5312=5)*4+(X5312=6)+(X5312=8)+ (X5312=11)*2+(X5312=12)*6+(X5312=31)*24+(X5312=14)+(X5312=22)) MPRINT(TAXSCF): *(X5310>=1)))); MPRINT(TAXSCF): IF GSSINC=0 THEN PENINC= MAX(0,X5722)+R_WITHDRAW+SP_WITHDRAW; MPRINT(TAXSCF): ELSE IF (GSSINC > 0) THEN PENINC=MAX(0,(X5722-GSSINC)) +R_WITHDRAW+SP_WITHDRAW; MPRINT(TAXSCF): OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; MPRINT(TAXSCF): NONTAX=NTAXINC+AFDCINC; MPRINT(TAXSCF): RENT=MAX(0,(X602 MPRINT(ACONV): *((X603=2)*52.18+(X603=3)*26.09+(X603=4)*12+(X603=5)*4+(X603=6)+(X603=8)+ (X603=11)*2+(X603=12)*6+(X603=31)*24+(X603=14)+(X603=22)) MPRINT(TAXSCF): ),(X612 MPRINT(ACONV): *((X613=2)*52.18+(X613=3)*26.09+(X613=4)*12+(X613=5)*4+(X613=6)+(X613=8)+ (X613=11)*2+(X613=12)*6+(X613=31)*24+(X613=14)+(X613=22)) MPRINT(TAXSCF): ),(X619 MPRINT(ACONV): *((X620=2)*52.18+(X620=3)*26.09+(X620=4)*12+(X620=5)*4+(X620=6)+(X620=8)+ (X620=11)*2+(X620=12)*6+(X620=31)*24+(X620=14)+(X620=22)) MPRINT(TAXSCF): ), (X708 MPRINT(ACONV): *((X709=2)*52.18+(X709=3)*26.09+(X709=4)*12+(X709=5)*4+(X709=6)+(X709=8)+ (X709=11)*2+(X709=12)*6+(X709=31)*24+(X709=14)+(X709=22)) MPRINT(TAXSCF): )); MPRINT(TAXSCF): END; MPRINT(TAXSCF): * AGI - note that starting in 2010, AGI questions no longer asked, so using total income minus non-taxable income plus IRA/401k withdrawals as a proxy. No information on adjustments to AGI; MPRINT(TAXSCF): AGI=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC+UNEMPINC+CHSPALINC+OTHINC+PENINC+GSSINC; MPRINT(TAXSCF): IF AGI=-1 THEN AGI=0; MPRINT(TAXSCF): AGIGE50K=(AGI>=50000); MPRINT(TAXSCF): AGICL=1*(AGI < 50000)+2*(50000 <= AGI < 100000)+3*(AGI >= 100000); MPRINT(TAXSCF): * For allocating itemized deductions - mortgage interest, investment interest expense, property taxes, and charitable contributions - between new tax units, assume tax unit with higher income assigned all itemized deductions. Creating a flag here for use in computing deductions later in the program. Using wages, business, and pension income as income measure (all other income components are split 50/50 between the new tax units).; MPRINT(TAXSCF): IF (TAXUNIT IN(1 2)) THEN DO; MPRINT(TAXSCF): R_TINCOME=R_LABORINC+R_BUSINC+R_REGPEN+R_WITHDRAW; MPRINT(TAXSCF): SP_TINCOME=SP_LABORINC+SP_BUSINC+SP_REGPEN+SP_WITHDRAW; MPRINT(TAXSCF): ITEMDEDCT_FLAG=(TAXUNIT=1 & R_TINCOME >= SP_TINCOME) +(TAXUNIT=2 & SP_TINCOME > R_TINCOME); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TAXUNIT=0 THEN ITEMDEDCT_FLAG=1; MPRINT(TAXSCF): * Set personal exemption to one for split households, divide kids among split households, if one, give to both tax units, if even number, split evenly between tax units, if odd number, give more to higher income tax unit; MPRINT(TAXSCF): IF TAXUNIT IN(1 2) THEN DO; MPRINT(TAXSCF): PERSEXP=1; MPRINT(TAXSCF): IF KIDS>1 THEN DO; MPRINT(TAXSCF): IF (KIDSU13>0 & MOD(KIDSU13,2)=0) THEN KIDSU13=KIDSU13/2; MPRINT(TAXSCF): ELSE IF (KIDSU13>0 & MOD(KIDSU13,2)^=0) THEN DO; 547 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): KIDSU13=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU13/2,1))+ (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU13/2)-.5); MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (KIDSU17>0 & MOD(KIDSU17,2)=0) THEN KIDSU17=KIDSU17/2; MPRINT(TAXSCF): ELSE IF (KIDSU17>0 & MOD(KIDSU17,2)^=0) THEN DO; MPRINT(TAXSCF): KIDSU17=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU17/2,1))+ (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU17/2)-.5); MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (KIDSU18>0 & MOD(KIDSU18,2)=0) THEN KIDSU18=KIDSU18/2; MPRINT(TAXSCF): ELSE IF (KIDSU18>0 & MOD(KIDSU18,2)^=0) THEN DO; MPRINT(TAXSCF): KIDSU18=(TAXUNIT=1 & R_TINCOME>=SP_TINCOME)*(ROUND(KIDSU18/2,1))+ (TAXUNIT=1 & R_TINCOME=SP_TINCOME)*((KIDSU18/2)-.5); MPRINT(TAXSCF): END; MPRINT(TAXSCF): KIDS=KIDSU13+KIDSU17+KIDSU18; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF PERSEXP=1 & MARRIED=1 THEN FILESTAT=3; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS=0 & MARRIED=0 THEN FILESTAT=1; MPRINT(TAXSCF): ELSE IF PERSEXP=1 & KIDS>0 & MARRIED=0 THEN FILESTAT=4; MPRINT(TAXSCF): TOTEXPT=PERSEXP+KIDS; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF FILESTAT=0 THEN PUT "MISSING FILING STATUS " Y1= X5744= X5746= TAXUNIT= MARRIED= KIDS= PERSEXP=; MPRINT(TAXSCF): RUN; NOTE: There were 16185 observations read from the data set WORK.SCF. NOTE: The data set WORK.SCF has 16185 observations and 3581 variables. NOTE: DATA statement used (Total process time): real time 0.27 seconds cpu time 0.27 seconds MPRINT(TAXSCF): * Create tax units based on NPEU members. If there are multiple NPEU members, need to allocate income, assets, and debt across the members; MPRINT(TAXSCF): DATA TEMP NPEU; MPRINT(TAXSCF): SET SCF(WHERE=(TAXUNIT IN(0 1) & X7050 >=1)); MPRINT(TAXSCF): file "null.txt"; MPRINT(TAXSCF): TAXUNIT=2; MPRINT(TAXSCF): ARRAY NPEUAGE {*} X110 X116 X122 X128 X134 X204 X210 X216 X222 X228; MPRINT(TAXSCF): ARRAY LIVEWITH {*} X112 X118 X124 X130 X136 X206 X212 X218 X224 X230; MPRINT(TAXSCF): ARRAY FINDEP {*} X113 X119 X125 X131 X137 X207 X213 X219 X225 X231; MPRINT(TAXSCF): DO I=1 TO DIM(LIVEWITH); MPRINT(TAXSCF): IF LIVEWITH{I} IN(1 2 3 4) & FINDEP{I} IN(2 3 4 5) THEN DO; MPRINT(TAXSCF): TAXUNIT=TAXUNIT+1; MPRINT(TAXSCF): TUAGE=NPEUAGE{I}; MPRINT(TAXSCF): SPAGE=0; MPRINT(TAXSCF): OUTPUT NPEU; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): RUN; NOTE: The file "null.txt" is: Filename=/disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code/null.txt, Owner Name=taxsim,Group Name=taxsim, Access Permission=-rw-r--r--, Last Modified=29Jan2021:13:36:30 548 The SAS System 13:32 Friday, January 29, 2021 NOTE: 0 records were written to the file "null.txt". NOTE: There were 15715 observations read from the data set WORK.SCF. WHERE TAXUNIT in (0, 1) and (X7050>=1); NOTE: The data set WORK.TEMP has 0 observations and 3581 variables. NOTE: The data set WORK.NPEU has 2935 observations and 3581 variables. NOTE: DATA statement used (Total process time): real time 0.14 seconds cpu time 0.14 seconds MPRINT(TAXSCF): DATA NPEU; MPRINT(TAXSCF): SET NPEU; MPRINT(TAXSCF): ARRAY INCTYPES {*} WSINCOME WSINCSP TBUSINC INTINC NTAXINC DIVINC RENTINC UNEMPINC AFDCINC GSSINC PENINC OTHINC CAPGLINC; MPRINT(TAXSCF): DO I=1 TO DIM(INCTYPES); MPRINT(TAXSCF): INCTYPES{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Allocate NPEU wage income across all NPEU members less than 70 years old. If only other type of income is Social Security, allocate amount across NPEU members age 62 or more. Otherwise, allocate total amount of nonwage income divided by the number of other types of income to each type of income equally to each NPEU member; MPRINT(TAXSCF): NUMU70=(0=62 & X113=5)+(X116>=62 & X119=5)+(X122>=62 & X125=5) +(X128>=62 & X131=5)+(X134>=62 & X137=5)+(X204>=62 & X207=5) +(X210>=62 & X213=5)+(X216>=62 & X219=5)+(X222>=62 & X225=5); MPRINT(TAXSCF): NUMINCTYPES=(X6406=1)+(X6407=1)+(X6408=1)+(X6409=1)+(X6410=1)+(X6411=1) +(X6412=1)+(X6413=1)+(X6414 > 5); MPRINT(TAXSCF): IF (NUMU70 > 0) THEN WSINCOME=(MAX(0,X6403)/NUMU70)*(TUAGE < 70); MPRINT(TAXSCF): ELSE WSINCOME=(MAX(0,X6403)/X7050); MPRINT(TAXSCF): IF (X6415 > 0 & NUMINCTYPES > 0) THEN DO; MPRINT(TAXSCF): IF (NUMGE62 > 0) THEN GSSINC=(X6406=1)*((MAX(0,X6415)/(NUMINCTYPES))/NUMGE62)*(TUAGE>=62); MPRINT(TAXSCF): ELSE GSSINC=(X6406=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): TBUSINC=(X6412=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): INTINC=(X6410=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): DIVINC=(X6411=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): RENTINC=(X6413=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): PENINC=(X6407=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050) +(X6408=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): AFDCINC=(X6409=1)*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): CAPGLINC=(X6414 IN(13))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): UNEMPINC=(X6414 IN(10))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): OTHINC=(X6414 IN(11 12 15))*((MAX(0,X6415)/(NUMINCTYPES))/X7050); MPRINT(TAXSCF): END; MPRINT(TAXSCF): OTHPINC=RENTINC+INTINC+TBUSINC+CHSPALINC+OTHINC; MPRINT(TAXSCF): NONTAX=NTAXINC+AFDCINC; MPRINT(TAXSCF): * All NPEU tax units take the standard deduction, have one personal exemption, and have filing status of single; MPRINT(TAXSCF): ITEMDEDCT_FLAG=0; MPRINT(TAXSCF): PERSEXP=1; MPRINT(TAXSCF): TOTEXPT=1; MPRINT(TAXSCF): KIDS=0; MPRINT(TAXSCF): KIDSU13=0; MPRINT(TAXSCF): KIDSU17=0; MPRINT(TAXSCF): KIDSU18=0; MPRINT(TAXSCF): FILESTAT=1; MPRINT(TAXSCF): AGI=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC+UNEMPINC+CHSPALINC+OTHINC+PENINC+GSSINC; MPRINT(TAXSCF): IF AGI=-1 THEN AGI=0; MPRINT(TAXSCF): AGIGE50K=(AGI>=50000); MPRINT(TAXSCF): AGICL=1*(AGI < 50000)+2*(50000 <= AGI < 100000)+3*(AGI >= 100000); MPRINT(TAXSCF): RUN; 549 The SAS System 13:32 Friday, January 29, 2021 NOTE: There were 2935 observations read from the data set WORK.NPEU. NOTE: The data set WORK.NPEU has 2935 observations and 3584 variables. NOTE: DATA statement used (Total process time): real time 0.05 seconds cpu time 0.06 seconds MPRINT(TAXSCF): * Add NPEU tax units; MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF NPEU; MPRINT(TAXSCF): RUN; NOTE: There were 16185 observations read from the data set WORK.SCF. NOTE: There were 2935 observations read from the data set WORK.NPEU. NOTE: The data set WORK.SCF has 19120 observations and 3584 variables. NOTE: DATA statement used (Total process time): real time 0.26 seconds cpu time 0.27 seconds MPRINT(TAXSCF): DATA SCF; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): ************Itemized deductions; MPRINT(TAXSCF): IF ITEMDEDCT_FLAG=1 THEN DO; MPRINT(TAXSCF): ************Mortgage interest deduction; MPRINT(TAXSCF): * Convert real estate taxes on primary residence into a yearly amount; MPRINT(TAXSCF): RESTAXM1=0; MPRINT(TAXSCF): IF (X721 > 0) THEN DO; MPRINT(TAXSCF): RESTAXM1=X721 MPRINT(ACONV): *((X722=2)*52.18+(X722=3)*26.09+(X722=4)*12+(X722=5)*4+(X722=6)+(X722=8)+ (X722=11)*2+(X722=12)*6+(X722=31)*24+(X722=14)+(X722=22)) MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Create arrays for various mortgage loan components; MPRINT(TAXSCF): ARRAY TLMTH {*} TLMTHM1 TLMTHM2 TLMTHM3; MPRINT(TAXSCF): ARRAY CMOPAY {*} CMOPAYM1 CMOPAYM2 CMOPAYM3; MPRINT(TAXSCF): ARRAY PAYLFT {*} PAYLFTM1 PAYLFTM2 PAYLFTM3; MPRINT(TAXSCF): ARRAY AMTOWE {*} AMTOWEM1 AMTOWEM2 AMTOWEM3; MPRINT(TAXSCF): ARRAY AMTOWE_1 {*} AMTOWE_1M1 AMTOWE_1M2 AMTOWE_1M3; MPRINT(TAXSCF): ARRAY AINTDCT {*} AINTDCTM1 AINTDCTM2 AINTDCTM3; MPRINT(TAXSCF): ARRAY LNAGE {*} LNAGEM1 LNAGEM2 LNAGEM3; MPRINT(TAXSCF): ARRAY CURBAL {*} CURBALM1 CURBALM2 CURBALM3; MPRINT(TAXSCF): ARRAY CURBAL_1 {*} CURBAL_1M1 CURBAL_1M2 CURBAL_1M3; MPRINT(TAXSCF): ARRAY CINTDCT {*} CINTDCTM1 CINTDCTM2 CINTDCTM3; MPRINT(TAXSCF): ARRAY DCTDIFF {*} DCTDIFFM1 DCTDIFFM2 DCTDIFFM3; MPRINT(TAXSCF): ARRAY SINTDCT {*} SINTDCTM1 SINTDCTM2 SINTDCTM3; MPRINT(TAXSCF): ARRAY AVINTDCT {*} AVINTDCTM1 AVINTDCTM2 AVINTDCTM3; MPRINT(TAXSCF): ARRAY NMPMT {*} X807 X907 X1007; MPRINT(TAXSCF): ARRAY NMYR {*} X806 X906 X1006; MPRINT(TAXSCF): ARRAY REGPAYF {*} X809 X909 X1009; MPRINT(TAXSCF): ARRAY REGPAY {*} X808 X908 X1008; MPRINT(TAXSCF): ARRAY TYPAYF {*} X814 X914 X1014; MPRINT(TAXSCF): ARRAY TYPAY {*} X813 X913 X1013; MPRINT(TAXSCF): ARRAY LNSTMN {*} X801 X901 X1001; MPRINT(TAXSCF): ARRAY LNSTYR {*} X802 X902 X1002; MPRINT(TAXSCF): ARRAY HBALLN {*} X811 X911 X1011; MPRINT(TAXSCF): ARRAY BALLN {*} X812 X912 X1012; 550 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ARRAY HAVELN {*} X723 X830 X931; MPRINT(TAXSCF): ARRAY AMTBORR {*} X804 X904 X1004; MPRINT(TAXSCF): ARRAY JAMTBORR {*} J804 J904 J1004; MPRINT(TAXSCF): ARRAY AMTOUT {*} X805 X905 X1005; MPRINT(TAXSCF): ARRAY JAMTOUT {*} J805 J905 J1005; MPRINT(TAXSCF): ARRAY INTRATE {*} X816 X916 X1016; MPRINT(TAXSCF): ARRAY ONSCHED {*} X7571 X7570 X7569; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTH); MPRINT(TAXSCF): TLMTH{I}=0; MPRINT(TAXSCF): CMOPAY{I}=0; MPRINT(TAXSCF): PAYLFT{I}=0; MPRINT(TAXSCF): AMTOWE{I}=0; MPRINT(TAXSCF): AMTOWE_1{I}=0; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): LNAGE{I}=0; MPRINT(TAXSCF): CURBAL{I}=0; MPRINT(TAXSCF): CURBAL_1{I}=0; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): DCTDIFF{I}=0; MPRINT(TAXSCF): SINTDCT{I}=0; MPRINT(TAXSCF): AVINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): NUMORT=(X723=1)+(X830=1)+(X931=1); MPRINT(TAXSCF): TOTAMTOUTM=0; MPRINT(TAXSCF): TOTDEDCTM=0; MPRINT(TAXSCF): GRFAMTOUTM=0; MPRINT(TAXSCF): A17AMTOUTM=0; MPRINT(TAXSCF): HAAMTOUTM=0; MPRINT(TAXSCF): DO I=1 TO DIM(NMPMT); MPRINT(TERMCON): IF (NMYR{I}=0 & NMPMT{I}=0) THEN DO; MPRINT(TERMCON): TLMTH{I}=0; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYR{I}^=0|NMPMT{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYR{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYR{I}=-1) THEN DO; MPRINT(TERMCON): TLMTH{I}=NMYR{I}; MPRINT(TERMCON): IF (NMPMT{I}=0) THEN DO; MPRINT(TERMCON): NMPMT{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYR{I}>0) THEN DO; MPRINT(TERMCON): TLMTH{I}=NMYR{I}*12; MPRINT(TERMCON): IF (NMPMT{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYF{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMT{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYF{I}=-7) THEN DO; MPRINT(TERMCON): NMPMT{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYF{I}=8) THEN DO; MPRINT(TERMCON): NMPMT{I}=1; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYF{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYF{I}=1) THEN NMPMT{I}=TLMTH{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=2) THEN NMPMT{I}=TLMTH{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=3) THEN NMPMT{I}=TLMTH{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=4) THEN NMPMT{I}=TLMTH{I}; 551 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (REGPAYF{I}=5) THEN NMPMT{I}=TLMTH{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=6) THEN NMPMT{I}=TLMTH{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=20) THEN NMPMT{I}=TLMTH{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=21) THEN NMPMT{I}=TLMTH{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=11) THEN NMPMT{I}=TLMTH{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=12) THEN NMPMT{I}=TLMTH{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=23) THEN NMPMT{I}=TLMTH{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=24) THEN NMPMT{I}=TLMTH{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=25) THEN NMPMT{I}=TLMTH{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=31) THEN NMPMT{I}=TLMTH{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=18) THEN NMPMT{I}=TLMTH{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=0) THEN NMPMT{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYF{I}>.Z & REGPAYF{I}^=-1 & REGPAYF{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMT{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTH{I}= REGPAYF{I}= NMPMT{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTH{I}>.Z & TLMTH{I}<-2) THEN DO; MPRINT(MOCONV): NMPMT{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTH{I}= REGPAYF{I}= NMPMT{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTH{I}<=.Z) THEN NMPMT{I}=TLMTH{I}; MPRINT(MOCONV): ELSE IF (TLMTH{I}^=-1 & TLMTH{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYF{I}= TLMTH{I}= "SETTING AMT=."; MPRINT(MOCONV): NMPMT{I}=.; MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMT{I}=-1) THEN DO; MPRINT(TERMCON): TLMTH{I}=-1; MPRINT(TERMCON): IF (NMYR{I}=0) THEN DO; MPRINT(TERMCON): NMYR{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMT{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYF{I}; MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYF{I}>0) THEN PFREQ=TYPAYF{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTH{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; MPRINT(TERMCON): TLMTH{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): IF (NMPMT{I}>0) THEN DO; MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTH{I}=NMPMT{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}))); MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12))); MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTH{I}=MAX(1,INT(.5+(NMPMT{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTH{I}=NMPMT{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTH{I}=NMPMT{I}*2/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTH{I}=NMPMT{I}/(2*(52/52)); 552 The SAS System 13:32 Friday, January 29, 2021 MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTH{I}=NMPMT{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTH{I}=NMPMT{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTH{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): TLMTH{I}=NMPMT{I}; MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMT{I}= PFREQ= TLMTH{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMT{I}>.Z & NMPMT{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTH{I}=NMPMT{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMT{I}= PFREQ= TLMTH{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMT{I}=0) THEN TLMTH{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMT{I}<=.Z) THEN TLMTH{I}=NMPMT{I}; MPRINT(IMOCONV): ELSE IF (NMPMT{I}^=-1 & NMPMT{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMT{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTH{I}=.; MPRINT(IMOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTH{I}>0) THEN DO; MPRINT(TERMCON): NMYR{I}=MAX(1,INT(.5+(TLMTH{I}/12))); MPRINT(TERMCON): TLMTH{I}=MAX(1,ROUND(TLMTH{I})); MPRINT(TERMCON): END; MPRINT(TERMCON): IF (NMYR{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMT{I}= NMYR{I}= TLMTH{I}= REGPAYF{I}= REGPAY{I}= TYPAYF{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAY{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYF{I}=1) THEN CMOPAY{I}=REGPAY{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=2) THEN CMOPAY{I}=REGPAY{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=3) THEN CMOPAY{I}=REGPAY{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=4) THEN CMOPAY{I}=REGPAY{I}; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=5) THEN CMOPAY{I}=REGPAY{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=6) THEN CMOPAY{I}=REGPAY{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=20) THEN CMOPAY{I}=REGPAY{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=21) THEN CMOPAY{I}=REGPAY{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=8) THEN CMOPAY{I}=REGPAY{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=11) THEN CMOPAY{I}=REGPAY{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=12) THEN CMOPAY{I}=REGPAY{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=23) THEN CMOPAY{I}=REGPAY{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=24) THEN CMOPAY{I}=REGPAY{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=25) THEN CMOPAY{I}=REGPAY{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=31) THEN CMOPAY{I}=REGPAY{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=18) THEN CMOPAY{I}=REGPAY{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYF{I}=0) THEN CMOPAY{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYF{I}>.Z & REGPAYF{I}^=-1 & REGPAYF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAY{I}= REGPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAY{I}>.Z & REGPAY{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAY{I}= REGPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAY{I}<=.Z) THEN CMOPAY{I}=REGPAY{I}; MPRINT(MOCONV): ELSE IF (REGPAY{I}^=-1 & REGPAY{I}^=-2) THEN DO; 553 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYF{I}= REGPAY{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(MOCONV): IF (TYPAYF{I}=1) THEN CMOPAY{I}=TYPAY{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=2) THEN CMOPAY{I}=TYPAY{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=3) THEN CMOPAY{I}=TYPAY{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=4) THEN CMOPAY{I}=TYPAY{I}; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=5) THEN CMOPAY{I}=TYPAY{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=6) THEN CMOPAY{I}=TYPAY{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=20) THEN CMOPAY{I}=TYPAY{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=21) THEN CMOPAY{I}=TYPAY{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=8) THEN CMOPAY{I}=TYPAY{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=11) THEN CMOPAY{I}=TYPAY{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=12) THEN CMOPAY{I}=TYPAY{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=23) THEN CMOPAY{I}=TYPAY{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=24) THEN CMOPAY{I}=TYPAY{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=25) THEN CMOPAY{I}=TYPAY{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=31) THEN CMOPAY{I}=TYPAY{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=18) THEN CMOPAY{I}=TYPAY{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYF{I}=0) THEN CMOPAY{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYF{I}>.Z & TYPAYF{I}^=-1 & TYPAYF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAY{I}= TYPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAY{I}>.Z & TYPAY{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAY{I}= TYPAYF{I}= CMOPAY{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAY{I}<=.Z) THEN CMOPAY{I}=TYPAY{I}; MPRINT(MOCONV): ELSE IF (TYPAY{I}^=-1 & TYPAY{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYF{I}= TYPAY{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAY{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF NMYR{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFT{I}=(TLMTH{I}-((1989-LNSTYR{I})*12)); MPRINT(TAXSCF): LNAGE{I}=TLMTH{I}-PAYLFT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFT{I}=0; MPRINT(TAXSCF): LNAGE{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): file "null.txt"; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((X723=1) & (X810 IN(1 2 3)) & TLMTHM1 > 0 & X816 > 0) THEN DO; 554 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): IF (X811=1) THEN DO; MPRINT(MORTPAY): AMOPAYM1=ROUND((MORT((X804),.,((X816/10000)/12),(TLMTHM1))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (CMOPAYM1 > AMOPAYM1) THEN CMOPAYM1=AMOPAYM1; MPRINT(TAXSCF): 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= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X811=2) THEN DO; MPRINT(TAXSCF): IF (X804 > X812) THEN ADJBORR=X804-X812; MPRINT(TAXSCF): ELSE IF (X804 < X812) THEN ADJBORR=X804; MPRINT(TAXSCF): IF ADJBORR > 0 THEN MPRINT(MORTPAY): AMOPAYM1=ROUND((MORT((ADJBORR),.,((X816/10000)/12),(TLMTHM1))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (X804=X812) THEN AMOPAYM1=((X804)*(X816/10000))/12; MPRINT(TAXSCF): IF (CMOPAYM1 > AMOPAYM1) THEN CMOPAYM1=AMOPAYM1; MPRINT(TAXSCF): 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= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * 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); MPRINT(TAXSCF): * NOT INCLUDING LAND CONTRACTS; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELN); MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTDCT{I}=CMOPAY{I}*12; MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELN{I}=1 & HBALLN{I} IN(1 2) & NMYR{I} NOT IN(0 -1 -7) & INTRATE{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & PAYLFT{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAY{I} < AMTBORR{I}*.005) THEN CMOPAY{I}=MAX(REGPAY{I},TYPAY{I}); MPRINT(TAXSCF): 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})); MPRINT(TAXSCF): 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))); MPRINT(TAXSCF): IF LNSTYR{I}^=1989 THEN AINTDCT{I}=(CMOPAY{I}*12)-(AMTOWE_1{I}-AMTOWE{I}); MPRINT(TAXSCF): ELSE IF LNSTYR{I}=1989 THEN AINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTH{I} < 0 | CMOPAY{I} < 0 | PAYLFT{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWE{I}=0; MPRINT(TAXSCF): AMTOWE_1{I}=0; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & AMTBORR{I} > 0 & LNAGE{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTDCT{I}=(CMOPAY{I}*12)-(CURBAL_1{I}-CURBAL{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTH{I} < 0 | AMTBORR{I} < 0 | LNAGE{I} < 0) THEN DO; 555 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): CURBAL{I}=0; MPRINT(TAXSCF): CURBAL_1{I}=0; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUT{I} > 0 & INTRATE{I} > 0) THEN SINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): ELSE SINTDCT{I}=0; MPRINT(TAXSCF): * 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 the home was not purchased in the survey year. If the home was purchased in the survey year, set deduction to zero.; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & PAYLFT{I}=0) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=CURBAL_1{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): AINTDCT{I}=CINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & LNSTYR{I}=1989 & X720=1989) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): SINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTH{I} > 0 & CMOPAY{I} > 0 & LNSTYR{I}=1989) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTDCT{I} < 0 | CINTDCT{I} < 0) & CURBAL{I} > 0 & CURBAL_1{I} > 0) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=CURBAL_1{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): AINTDCT{I}=CINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTDCT{I} < 0 | CINTDCT{I} < 0) & (CURBAL{I} <= 0 & CURBAL_1{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCT{I} > 0 & CINTDCT{I} > 0) THEN DCTDIFF{I}=CINTDCT{I}-SINTDCT{I}; MPRINT(TAXSCF): ELSE DCTDIFF{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELN{I}=1 & (NMYR{I} IN(-1 -7) | NMPMT{I} IN(-1 -7)) & AMTOUT{I} > 0 & INTRATE{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): AINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): CINTDCT{I}=SINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELN{I}=1 & (INTRATE{I}=-1)) THEN DO; MPRINT(TAXSCF): AINTDCT{I}=0; MPRINT(TAXSCF): CINTDCT{I}=0; MPRINT(TAXSCF): SINTDCT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest deduction; MPRINT(TAXSCF): IF ((CINTDCT{I} + AINTDCT{I} + SINTDCT{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTDCT{I}=(CINTDCT{I}+AINTDCT{I}+SINTDCT{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTDCT{I}=0; MPRINT(TAXSCF): * Constraining interest deduction amount to be no more than the reported year 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.; MPRINT(TAXSCF): IF (HAVELN{I}=1 & AVINTDCT{I} > 0 & CMOPAY{I} > 0 & (AVINTDCT{I} > CMOPAY{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTDCT{I}=CMOPAY{I}*12; 556 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): CINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): SINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELN{I}=1 & AVINTDCT{I} > 0 & AMTOUT{I} > 0 & (AVINTDCT{I} > .25*AMTOUT{I})) THEN DO; MPRINT(TAXSCF): AVINTDCT{I}=AMTOUT{I}*(INTRATE{I}/10000); MPRINT(TAXSCF): CINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): AINTDCT{I}=AVINTDCT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELN{I}=1 & Y1=YY1*10+1 & AVINTDCT{I}=0 & NMYR{I}^=1989) 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}= /; MPRINT(TAXSCF): * 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; MPRINT(TAXSCF): IF (X702=1 & X714=1 & X7135=5) THEN DO; MPRINT(TAXSCF): TOTDEDCTM=TOTDEDCTM+(AVINTDCT{I}/X715)*(HAVELN{I}=1); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE TOTDEDCTM=TOTDEDCTM+AVINTDCT{I}; MPRINT(TAXSCF): * Total amount outstanding on loans; MPRINT(TAXSCF): TOTAMTOUTM=TOTAMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): * Need to divide mortgages up by date, pre 10/13/87 mortgages are considered grandfathered debt by IRS, and different limits apply to mortgages taken out after 12/15/2017; MPRINT(TAXSCF): IF ((LNSTYR{I}=1987 & LNSTMN{I} < 10) | (LNSTYR{I} < 1987)) THEN DO; MPRINT(TAXSCF): GRFAMTOUTM=GRFAMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((LNSTYR{I}=2017 & LNSTMN{I}=12) | (LNSTYR{I} > 2017)) THEN DO; MPRINT(TAXSCF): A17AMTOUTM=A17AMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((LNSTYR{I}=1987 & LNSTMN {I} >= 10) | (1987 < LNSTYR{I} < 2017) | (LNSTYR{I}=2017 & LNSTMN{I}<=11)) THEN DO; MPRINT(TAXSCF): HAAMTOUTM=HAAMTOUTM+AMTOUT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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, 3, or 4 as home acquisition debt (same as a mortgage, counts toward mortgage balance limit), while HELOCs with other use codes counted as home equity debt. Ignoring the mopup as we dont know if that LOC is secured by a home; MPRINT(TAXSCF): ARRAY CMOPAYL {*} CMOPAYL1 CMOPAYL2 CMOPAYL3; MPRINT(TAXSCF): ARRAY SINTDCTL {*} SINTDCTL1 SINTDCTL2 SINTDCTL3; MPRINT(TAXSCF): ARRAY AQDBT {*} AQDBTL1 AQDBTL2 AQDBTL3; MPRINT(TAXSCF): ARRAY AQINT {*} AQINTL1 AQINTL2 AQINTL3; MPRINT(TAXSCF): ARRAY EQDBT {*} EQDBTL1 EQDBTL2 EQDBTL3; MPRINT(TAXSCF): ARRAY SBYHOME {*} X1103 X1114 X1125; MPRINT(TAXSCF): ARRAY DOOWE {*} X1105 X1116 X1127; MPRINT(TAXSCF): ARRAY LNPURP {*} X1106 X1117 X1128; MPRINT(TAXSCF): ARRAY AMTOUTL {*} X1108 X1119 X1130; MPRINT(TAXSCF): ARRAY TYPAYL {*} X1109 X1120 X1131; MPRINT(TAXSCF): ARRAY TYPAYLF {*} X1110 X1121 X1132; MPRINT(TAXSCF): ARRAY INTRATEL {*} X1111 X1122 X1133; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): TOTAQDBTL=0; MPRINT(TAXSCF): TOTEQDBTL=0; MPRINT(TAXSCF): TOTDEDCTL=0; MPRINT(TAXSCF): TOTAQDEDCTL=0; MPRINT(TAXSCF): TOTLOCINVEX=0; MPRINT(TAXSCF): DO I=1 TO DIM(CMOPAYL); 557 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): AQDBT{I}=0; MPRINT(TAXSCF): AQINT{I}=0; MPRINT(TAXSCF): EQDBT{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (X1101=1) THEN DO; MPRINT(TAXSCF): DO I=1 TO DIM(SBYHOME); MPRINT(TAXSCF): IF (SBYHOME{I}=1 & DOOWE{I}=1) THEN DO; MPRINT(TAXSCF): IF (TYPAYL{I} > 0) THEN DO; MPRINT(MOCONV): IF (TYPAYLF{I}=1) THEN CMOPAYL{I}=TYPAYL{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=2) THEN CMOPAYL{I}=TYPAYL{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=3) THEN CMOPAYL{I}=TYPAYL{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=4) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=5) THEN CMOPAYL{I}=TYPAYL{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=6) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=20) THEN CMOPAYL{I}=TYPAYL{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=21) THEN CMOPAYL{I}=TYPAYL{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=8) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=11) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=12) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=23) THEN CMOPAYL{I}=TYPAYL{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=24) THEN CMOPAYL{I}=TYPAYL{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=25) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=31) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=18) THEN CMOPAYL{I}=TYPAYL{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=0) THEN CMOPAYL{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}>.Z & TYPAYLF{I}^=-1 & TYPAYLF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}>.Z & TYPAYL{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}<=.Z) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYL{I}^=-1 & TYPAYL{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYLF{I}= TYPAYL{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TYPAYL{I} IN(0 -1 -2)) THEN DO; MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (INTRATEL{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=((INTRATEL{I}/10000)*AMTOUTL{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEL{I} IN(0 -1)) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTL{I} > 0 & CMOPAYL{I} > 0 & SINTDCTL{I} > CMOPAYL{I}*12) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=CMOPAYL{I}*12; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (LNPURP{I} IN(1 3 4)) THEN DO; MPRINT(TAXSCF): AQDBT{I}=AMTOUTL{I}; MPRINT(TAXSCF): AQINT{I}=SINTDCTL{I}; MPRINT(TAXSCF): END; 558 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE IF (LNPURP{I} NOT IN(1 3 4)) THEN DO; MPRINT(TAXSCF): EQDBT{I}=AMTOUTL{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTDEDCTL=TOTDEDCTL+SINTDCTL{I}; MPRINT(TAXSCF): TOTAQDEDCTL=TOTAQDEDCTL+AQINT{I}; MPRINT(TAXSCF): TOTAQDBTL=TOTAQDBTL+AQDBT{I}; MPRINT(TAXSCF): TOTEQDBTL=TOTEQDBTL+EQDBT{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * Dropped third column of grid for 2010 forward; MPRINT(TAXSCF): * Create arrays for various other property loan components; MPRINT(TAXSCF): ARRAY TLMTHO {*} TLMTHO1 TLMTHO2 TLMTHO3; MPRINT(TAXSCF): ARRAY CMOPAYO {*} CMOPAYO1 CMOPAYO2 CMOPAYO3; MPRINT(TAXSCF): ARRAY AMOPAYO {*} AMOPAYO1 AMOPAYO2 AMOPAYO3; MPRINT(TAXSCF): ARRAY PAYLFTO {*} PAYLFTO1 PAYLFTO2 PAYLFTO3; MPRINT(TAXSCF): ARRAY AMTOWEO {*} AMTOWEO1 AMTOWEO2 AMTOWEO3; MPRINT(TAXSCF): ARRAY AMTOWE_1O {*} AMTOWE_1O1 AMTOWE_1O2 AMTOWE_1O3; MPRINT(TAXSCF): ARRAY AINTDCTO {*} AINTDCTO1 AINTDCTO2 AINTDCTO3; MPRINT(TAXSCF): ARRAY LNAGEO {*} LNAGEO1 LNAGEO2 LNAGEO3; MPRINT(TAXSCF): ARRAY CURBALO {*} CURBALO1 CURBALO2 CURBALO3; MPRINT(TAXSCF): ARRAY CURBAL_1O {*} CURBAL_1O1 CURBAL_1O2 CURBAL_1O3; MPRINT(TAXSCF): ARRAY CINTDCTO {*} CINTDCTO1 CINTDCTO2 CINTDCTO3; MPRINT(TAXSCF): ARRAY DCTDIFFO {*} DCTDIFFO1 DCTDIFFO2 DCTDIFFO3; MPRINT(TAXSCF): ARRAY SINTDCTO {*} SINTDCTO1 SINTDCTO2 SINTDCTO3; MPRINT(TAXSCF): ARRAY AVINTDCTO {*} AVINTDCTO1 AVINTDCTO2 AVINTDCTO3; MPRINT(TAXSCF): ARRAY QUALPROP {*} QPROP1 QPROP2 QPROP3; MPRINT(TAXSCF): ARRAY QUALPINV {*} QPINV1 QPINV2 QPINV3; MPRINT(TAXSCF): ARRAY ADJBORRO {*} ADJBORRO1 ADJBORRO2 ADJBORRO3; MPRINT(TAXSCF): ARRAY NMPMTO {*} X1717 X1817 X1917; MPRINT(TAXSCF): ARRAY NMYRO {*} X1716 X1816 X1916; MPRINT(TAXSCF): ARRAY REGPAYFO {*} X1719 X1819 X1919; MPRINT(TAXSCF): ARRAY REGPAYO {*} X1718 X1818 X1918; MPRINT(TAXSCF): ARRAY TYPAYFO {*} X1724 X1824 X1924; MPRINT(TAXSCF): ARRAY TYPAYO {*} X1723 X1823 X1923; MPRINT(TAXSCF): ARRAY LNSTMNO {*} X1712 X1812 X1912; MPRINT(TAXSCF): ARRAY LNSTYRO {*} X1713 X1813 X1913; MPRINT(TAXSCF): ARRAY HBALLNO {*} X1721 X1821 X1921; MPRINT(TAXSCF): ARRAY BALLNO {*} X1722 X1822 X1922; MPRINT(TAXSCF): ARRAY AMTBORRO {*} X1714 X1814 X1914; MPRINT(TAXSCF): ARRAY JAMTBORRO {*} J1714 J1814 J1914; MPRINT(TAXSCF): ARRAY AMTOUTO {*} X1715 X1815 X1915; MPRINT(TAXSCF): ARRAY JAMTOUTO {*} J1715 J1815 J1915; MPRINT(TAXSCF): ARRAY HAVELNO {*} X1711 X1811 X1911; MPRINT(TAXSCF): ARRAY INTRATEO {*} X1726 X1826 X1926; MPRINT(TAXSCF): ARRAY ONSCHEDO {*} X7554 X7553 X7552; MPRINT(TAXSCF): ARRAY HINCOMEO {*} X1729 X1829 X1929; MPRINT(TAXSCF): ARRAY INCOMEO {*} X1730 X1830 X1930; MPRINT(TAXSCF): ARRAY PROPTYPE {*} X1703 X1803 X1903; MPRINT(TAXSCF): ARRAY PERPROP {*} X1705 X1805 X1905; MPRINT(TAXSCF): ARRAY PROPVAL {*} X1706 X1806 X1906; MPRINT(TAXSCF): ARRAY TAXINS {*} X1720 X1820 X1920; MPRINT(TAXSCF): ARRAY PURCHYRO {*} X1708 X1808 X1908; MPRINT(TAXSCF): ARRAY LIMFLAG {*} LIMFL1 LIMFL2 LIMFL3; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTHO); 559 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): TLMTHO{I}=0; MPRINT(TAXSCF): CMOPAYO{I}=0; MPRINT(TAXSCF): PAYLFTO{I}=0; MPRINT(TAXSCF): AMTOWEO{I}=0; MPRINT(TAXSCF): AMTOWE_1O{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): LNAGEO{I}=0; MPRINT(TAXSCF): CURBALO{I}=0; MPRINT(TAXSCF): CURBAL_1O{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): DCTDIFFO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): AVINTDCTO{I}=0; MPRINT(TAXSCF): QUALPROP{I}=0; MPRINT(TAXSCF): QUALPINV{I}=0; MPRINT(TAXSCF): ADJBORRO{I}=0; MPRINT(TAXSCF): LIMFLAG{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTAMTOUTO=0; MPRINT(TAXSCF): TOTDEDCTO=0; MPRINT(TAXSCF): QUALOTHPROP=0; MPRINT(TAXSCF): QUALINVPROP=0; MPRINT(TAXSCF): TOTINVPDCT=0; MPRINT(TAXSCF): FMVOP=0; MPRINT(TAXSCF): DO I=1 TO DIM(NMPMTO); MPRINT(TERMCON): IF (NMYRO{I}=0 & NMPMTO{I}=0) THEN DO; MPRINT(TERMCON): TLMTHO{I}=0; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRO{I}^=0|NMPMTO{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRO{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRO{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHO{I}=NMYRO{I}; MPRINT(TERMCON): IF (NMPMTO{I}=0) THEN DO; MPRINT(TERMCON): NMPMTO{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRO{I}>0) THEN DO; MPRINT(TERMCON): TLMTHO{I}=NMYRO{I}*12; MPRINT(TERMCON): IF (NMPMTO{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYFO{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMTO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFO{I}=-7) THEN DO; MPRINT(TERMCON): NMPMTO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFO{I}=8) THEN DO; MPRINT(TERMCON): NMPMTO{I}=1; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFO{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYFO{I}=1) THEN NMPMTO{I}=TLMTHO{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=2) THEN NMPMTO{I}=TLMTHO{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=3) THEN NMPMTO{I}=TLMTHO{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=4) THEN NMPMTO{I}=TLMTHO{I}; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=5) THEN NMPMTO{I}=TLMTHO{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=6) THEN NMPMTO{I}=TLMTHO{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=20) THEN NMPMTO{I}=TLMTHO{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=21) THEN NMPMTO{I}=TLMTHO{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=11) THEN NMPMTO{I}=TLMTHO{I}*(52/52)/6; 560 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=12) THEN NMPMTO{I}=TLMTHO{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=23) THEN NMPMTO{I}=TLMTHO{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=24) THEN NMPMTO{I}=TLMTHO{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=25) THEN NMPMTO{I}=TLMTHO{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=31) THEN NMPMTO{I}=TLMTHO{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=18) THEN NMPMTO{I}=TLMTHO{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=0) THEN NMPMTO{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}>.Z & REGPAYFO{I}^=-1 & REGPAYFO{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMTO{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTHO{I}= REGPAYFO{I}= NMPMTO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHO{I}>.Z & TLMTHO{I}<-2) THEN DO; MPRINT(MOCONV): NMPMTO{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTHO{I}= REGPAYFO{I}= NMPMTO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHO{I}<=.Z) THEN NMPMTO{I}=TLMTHO{I}; MPRINT(MOCONV): ELSE IF (TLMTHO{I}^=-1 & TLMTHO{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFO{I}= TLMTHO{I}= "SETTING AMT=."; MPRINT(MOCONV): NMPMTO{I}=.; MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTO{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHO{I}=-1; MPRINT(TERMCON): IF (NMYRO{I}=0) THEN DO; MPRINT(TERMCON): NMYRO{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTO{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYFO{I}; MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYFO{I}>0) THEN PFREQ=TYPAYFO{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTHO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; MPRINT(TERMCON): TLMTHO{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): IF (NMPMTO{I}>0) THEN DO; MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTHO{I}=NMPMTO{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}))); MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12))); MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTHO{I}=MAX(1,INT(.5+(NMPMTO{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTHO{I}=NMPMTO{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTHO{I}=NMPMTO{I}*2/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTHO{I}=NMPMTO{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTHO{I}=NMPMTO{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTHO{I}=NMPMTO{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTHO{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): TLMTHO{I}=NMPMTO{I}; 561 The SAS System 13:32 Friday, January 29, 2021 MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMTO{I}= PFREQ= TLMTHO{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}>.Z & NMPMTO{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTHO{I}=NMPMTO{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMTO{I}= PFREQ= TLMTHO{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}=0) THEN TLMTHO{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}<=.Z) THEN TLMTHO{I}=NMPMTO{I}; MPRINT(IMOCONV): ELSE IF (NMPMTO{I}^=-1 & NMPMTO{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMTO{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTHO{I}=.; MPRINT(IMOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTHO{I}>0) THEN DO; MPRINT(TERMCON): NMYRO{I}=MAX(1,INT(.5+(TLMTHO{I}/12))); MPRINT(TERMCON): TLMTHO{I}=MAX(1,ROUND(TLMTHO{I})); MPRINT(TERMCON): END; MPRINT(TERMCON): IF (NMYRO{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMTO{I}= NMYRO{I}= TLMTHO{I}= REGPAYFO{I}= REGPAYO{I}= TYPAYFO{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAYO{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYFO{I}=1) THEN CMOPAYO{I}=REGPAYO{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=2) THEN CMOPAYO{I}=REGPAYO{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=3) THEN CMOPAYO{I}=REGPAYO{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=4) THEN CMOPAYO{I}=REGPAYO{I}; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=5) THEN CMOPAYO{I}=REGPAYO{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=6) THEN CMOPAYO{I}=REGPAYO{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=20) THEN CMOPAYO{I}=REGPAYO{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=21) THEN CMOPAYO{I}=REGPAYO{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=8) THEN CMOPAYO{I}=REGPAYO{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=11) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=12) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=23) THEN CMOPAYO{I}=REGPAYO{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=24) THEN CMOPAYO{I}=REGPAYO{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=25) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=31) THEN CMOPAYO{I}=REGPAYO{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=18) THEN CMOPAYO{I}=REGPAYO{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}=0) THEN CMOPAYO{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFO{I}>.Z & REGPAYFO{I}^=-1 & REGPAYFO{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAYO{I}= REGPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYO{I}>.Z & REGPAYO{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAYO{I}= REGPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYO{I}<=.Z) THEN CMOPAYO{I}=REGPAYO{I}; MPRINT(MOCONV): ELSE IF (REGPAYO{I}^=-1 & REGPAYO{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFO{I}= REGPAYO{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; 562 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(MOCONV): IF (TYPAYFO{I}=1) THEN CMOPAYO{I}=TYPAYO{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=2) THEN CMOPAYO{I}=TYPAYO{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=3) THEN CMOPAYO{I}=TYPAYO{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=4) THEN CMOPAYO{I}=TYPAYO{I}; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=5) THEN CMOPAYO{I}=TYPAYO{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=6) THEN CMOPAYO{I}=TYPAYO{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=20) THEN CMOPAYO{I}=TYPAYO{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=21) THEN CMOPAYO{I}=TYPAYO{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=8) THEN CMOPAYO{I}=TYPAYO{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=11) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=12) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=23) THEN CMOPAYO{I}=TYPAYO{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=24) THEN CMOPAYO{I}=TYPAYO{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=25) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=31) THEN CMOPAYO{I}=TYPAYO{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=18) THEN CMOPAYO{I}=TYPAYO{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}=0) THEN CMOPAYO{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYFO{I}>.Z & TYPAYFO{I}^=-1 & TYPAYFO{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYO{I}= TYPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYO{I}>.Z & TYPAYO{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYO{I}= TYPAYFO{I}= CMOPAYO{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYO{I}<=.Z) THEN CMOPAYO{I}=TYPAYO{I}; MPRINT(MOCONV): ELSE IF (TYPAYO{I}^=-1 & TYPAYO{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYFO{I}= TYPAYO{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYO{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF NMYRO{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFTO{I}=(TLMTHO{I}-((1989-LNSTYRO{I})*12)); MPRINT(TAXSCF): LNAGEO{I}=TLMTHO{I}-PAYLFTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFTO{I}=0; MPRINT(TAXSCF): LNAGEO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNO); MPRINT(TAXSCF): IF ((HAVELNO{I}=1) & (TAXINS{I} IN(1 2 3)) & TLMTHO{I} > 0 & INTRATEO{I} > 0) THEN DO; MPRINT(TAXSCF): IF (HBALLNO{I}=1) THEN DO; MPRINT(MORTPAY): AMOPAYO{I}=ROUND((MORT((AMTBORRO{I}),.,((INTRATEO{I}/10000)/12),(TLMTHO{I}))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (CMOPAYO{I} > AMOPAYO{I}) THEN CMOPAYO{I}=AMOPAYO{I}; MPRINT(TAXSCF): ELSE IF (AMOPAYO{I} >= CMOPAYO{I}) & Y1=YY1*10+1 THEN PUT "ADJUSTED MONTHLY PAYMENT GREATER THAN 563 The SAS System 13:32 Friday, January 29, 2021 COMPUTED MONTHLY PAYMENT " Y1= AMTBORRO{I}= CMOPAYO{I}= AMOPAYO{I}= INTRATEO{I}= TAXINS{I}= TLMTHO{I}= HBALLNO{I}= BALLNO{I}= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HBALLNO{I}=5) THEN DO; MPRINT(TAXSCF): IF (AMTBORRO{I} > BALLNO{I}) THEN ADJBORRO{I}=(AMTBORRO{I}-BALLNO{I}); MPRINT(TAXSCF): ELSE IF (AMTBORRO{I} < BALLNO{I}) THEN ADJBORRO{I}=AMTBORRO{I}; MPRINT(TAXSCF): IF ADJBORRO{I} > 0 THEN MPRINT(MORTPAY): AMOPAYO{I}=ROUND((MORT((ADJBORRO{I}),.,((INTRATEO{I}/10000)/12),(TLMTHO{I}))),.01); MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (AMTBORRO{I}=BALLNO{I}) THEN AMOPAYO{I}=((AMTBORRO{I})*(INTRATEO{I}/10000))/12; MPRINT(TAXSCF): IF (CMOPAYO{I} > AMOPAYO{I}) THEN CMOPAYO{I}=AMOPAYO{I}; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * 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); MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNO); MPRINT(TAXSCF): IF (PROPTYPE{I} IN(12 13 14 21 22 25 40 49 999) & (HINCOMEO{I}=5 | INCOMEO{I}=-1)) | (PROPTYPE{I} IN(12 13 14 21 22 25 40 49 999) & HINCOMEO{I}=1 & INCOMEO{I} < (CMOPAYO{I}*12)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified properties; MPRINT(TAXSCF): QUALPROP{I}=(HAVELNO{I}=1); MPRINT(TAXSCF): QUALOTHPROP=QUALOTHPROP+QUALPROP{I}; MPRINT(TAXSCF): FMVOP=FMVOP+PROPVAL{I}*(HAVELNO{I}=1); MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & HBALLNO{I} IN(1 5) & NMYRO{I} NOT IN(0 -1 -7) & INTRATEO{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAYO{I} < AMTBORRO{I}*.005) THEN CMOPAYO{I}=MAX(REGPAYO{I},TYPAYO{I}); MPRINT(TAXSCF): 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})); MPRINT(TAXSCF): 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))); MPRINT(TAXSCF): IF LNSTYRO{I}^=1989 THEN AINTDCTO{I}=(CMOPAYO{I}*12)-(AMTOWE_1O{I}-AMTOWEO{I}); MPRINT(TAXSCF): ELSE IF LNSTYRO{I}=1989 THEN AINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | CMOPAYO{I} < 0 | PAYLFTO{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEO{I}=0; MPRINT(TAXSCF): AMTOWE_1O{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & AMTBORRO{I} > 0 & LNAGEO{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); 564 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): CINTDCTO{I}=(CMOPAYO{I}*12)-(CURBAL_1O{I}-CURBALO{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | AMTBORRO{I} < 0 | LNAGEO{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALO{I}=0; MPRINT(TAXSCF): CURBAL_1O{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): ELSE SINTDCTO{I}=0; MPRINT(TAXSCF): * 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 the home was not purchased in the survey year. If the home was purchased in the survey year, set deduction to zero.; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I}=0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=1989 & PURCHYRO{I}=1989) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=1989) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & CURBALO{I} > 0 & CURBAL_1O{I} > 0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & (CURBALO{I} <= 0 & CURBAL_1O{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTO{I} > 0 & CINTDCTO{I} > 0) THEN DCTDIFFO{I}=CINTDCTO{I}-SINTDCTO{I}; MPRINT(TAXSCF): ELSE DCTDIFFO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (NMYRO{I} IN(-1 -7) & NMPMTO{I} IN(-1 -7)) & AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (INTRATEO{I}=-1)) THEN DO; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest deduction; MPRINT(TAXSCF): IF ((CINTDCTO{I} + AINTDCTO{I} + SINTDCTO{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=(CINTDCTO{I}+AINTDCTO{I}+SINTDCTO{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTDCTO{I}=0; MPRINT(TAXSCF): * 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 565 The SAS System 13:32 Friday, January 29, 2021 more than 25 percent of the current amount outstanding. If this is the case then the use the simple interest deduction.; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & CMOPAYO{I} > 0 & (AVINTDCTO{I} > CMOPAYO{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): SINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & AMTOUTO{I} > 0 & (AVINTDCTO{I} > .25*AMTOUTO{I})) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): * Compute total deduction and total amount outstanding; MPRINT(TAXSCF): TOTDEDCTO=TOTDEDCTO+((AVINTDCTO{I})*PERPROP{I}/10000)*(HAVELNO{I}=1); MPRINT(TAXSCF): TOTAMTOUTO=TOTAMTOUTO+AMTOUTO{I}; MPRINT(TAXSCF): * Create flag for loans after 12/15/17, used in computing limits on mortgage interest deduction for home acquistion debt; MPRINT(TAXSCF): LIMFLAG{I}=(LNSTYRO{I}> 2017 | (LNSTYRO{I}=2017 & LNSTMNO{I}=12)); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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 hhs are rational and report the home/properties with the biggest deductions.; MPRINT(TAXSCF): ADJDEDCTO=0; MPRINT(TAXSCF): ADJAMTOUTO=0; MPRINT(TAXSCF): ADJ17AMTOUTO=0; MPRINT(TAXSCF): FMVOTHPROP=0; MPRINT(TAXSCF): IF (QUALOTHPROP > 0) THEN DO; MPRINT(TAXSCF): IF (QUALOTHPROP=1 & QPROP1=1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=1 & QPROP2=1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=1 & QPROP3=1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO3; MPRINT(TAXSCF): ADJ17AMTOUTO=X1915*(LIMFL3=1); MPRINT(TAXSCF): ADJAMTOUTO=X1915*(LIMFL3=0); MPRINT(TAXSCF): FMVOTHPROP=X1906*(X1905/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=2) THEN DO; MPRINT(TAXSCF): IF (QPROP1=1 & QPROP2=1) THEN DO; MPRINT(TAXSCF): IF (AVINTDCTO1 >= AVINTDCTO2) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); 566 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO2 >= AVINTDCTO1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QPROP1=1 & QPROP3=1) THEN DO; MPRINT(TAXSCF): IF (AVINTDCTO1 >= AVINTDCTO3) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO3 >= AVINTDCTO1) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO3; MPRINT(TAXSCF): ADJ17AMTOUTO=X1915*(LIMFL3=1); MPRINT(TAXSCF): ADJAMTOUTO=X1915*(LIMFL3=0); MPRINT(TAXSCF): FMVOTHPROP=X1906*(X1905/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QPROP2=1 & QPROP3=1) THEN DO; MPRINT(TAXSCF): IF (AVINTDCTO2 >= AVINTDCTO3) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO3 >= AVINTDCTO2) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO3; MPRINT(TAXSCF): ADJ17AMTOUTO=X1915*(LIMFL3=1); MPRINT(TAXSCF): ADJAMTOUTO=X1915*(LIMFL3=0); MPRINT(TAXSCF): FMVOTHPROP=X1906*(X1905/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (QUALOTHPROP=3) THEN DO; MPRINT(TAXSCF): IF (AVINTDCTO1 >= AVINTDCTO2 & AVINTDCTO1 >= AVINTDCTO3) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO1; MPRINT(TAXSCF): ADJ17AMTOUTO=X1715*(LIMFL1=1); MPRINT(TAXSCF): ADJAMTOUTO=X1715*(LIMFL1=0); MPRINT(TAXSCF): FMVOTHPROP=X1706*(X1705/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO2 >= AVINTDCTO1 & AVINTDCTO2 >= AVINTDCTO3) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO2; MPRINT(TAXSCF): ADJ17AMTOUTO=X1815*(LIMFL2=1); MPRINT(TAXSCF): ADJAMTOUTO=X1815*(LIMFL2=0); MPRINT(TAXSCF): FMVOTHPROP=X1806*(X1805/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AVINTDCTO3 >= AVINTDCTO1 & AVINTDCTO3 >= AVINTDCTO2) THEN DO; MPRINT(TAXSCF): ADJDEDCTO=AVINTDCTO3; MPRINT(TAXSCF): ADJ17AMTOUTO=X1915*(LIMFL3=1); MPRINT(TAXSCF): ADJAMTOUTO=X1915*(LIMFL3=0); MPRINT(TAXSCF): FMVOTHPROP=X1906*(X1905/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; 567 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (X701=-7 & X7133=1) THEN DO; MPRINT(TAXSCF): HOUSE=(X7134/10000)*X716; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE HOUSE=SUM(0,X604,X614,X623,X716,(X513+X526)); MPRINT(TAXSCF): IF (TOTEQDBTL > 0 & GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL+TOTEQDBTL > (HOUSE)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) > 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=MIN((HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL)),TOTEQDBTL,100000); MPRINT(TAXSCF): ADJDEDCTL=TOTDEDCTL*(ADJEQDBTL/TOTEQDBTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) <= 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=0; MPRINT(TAXSCF): ADJDEDCTL=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((FILESTAT=3) & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) > 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=MIN((HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL)),TOTEQDBTL,50000); MPRINT(TAXSCF): ADJDEDCTL=TOTDEDCTL*(ADJEQDBTL/TOTEQDBTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((FILESTAT=3) & HOUSE-(GRFAMTOUTM+A17AMTOUTM+HAAMTOUTM+TOTAQDBTL) <= 0) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=0; MPRINT(TAXSCF): ADJDEDCTL=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TOTEQDBTL ^=. & TOTDEDCTL ^=.) THEN DO; MPRINT(TAXSCF): ADJEQDBTL=TOTEQDBTL; MPRINT(TAXSCF): ADJDEDCTL=TOTDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TOTEQDBTL > 0 & GRFAMTOUTM+A17AMTOUTM+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= /; MPRINT(TAXSCF): * 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), worksheet changed in 2018; MPRINT(TAXSCF): ADJDEDCT=0; MPRINT(TAXSCF): * case 1 - grandfathered debt, no home acquisition debt, maybe home equity; MPRINT(TAXSCF): IF (GRFAMTOUTM > 0 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & ADJEQDBTL <= 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & ADJEQDBTL > 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+100000)/(GRFAMTOUTM+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & ADJEQDBTL <= 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & ADJEQDBTL > 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+50000)/(GRFAMTOUTM+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * case 2 - some grandfathered debt, some home acquisition debt, maybe home equity; 568 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE IF (GRFAMTOUTM > 0 & (HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & (ADJEQDBTL=0 | ADJEQDBTL <= 100000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & ADJEQDBTL > 100000 & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+100000) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (ADJEQDBTL <= 100000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+ADJEQDBTL),(1000000+ADJEQDBTL))) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (ADJEQDBTL > 100000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 1000000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+100000),1100000))/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (ADJEQDBTL=0 | ADJEQDBTL <= 50000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & ADJEQDBTL > 50000 & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+50000) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (ADJEQDBTL=0 | ADJEQDBTL <= 50000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+ADJEQDBTL),(500000+ADJEQDBTL))) /(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (ADJEQDBTL=0 | ADJEQDBTL > 50000) & (GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((MAX((GRFAMTOUTM+50000),550000))/(GRFAMTOUTM+HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * case 3 - no grandfathered debt, maybe home acquisition, maybe home equity; MPRINT(TAXSCF): ELSE IF (GRFAMTOUTM=0 & (HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | ADJEQDBTL > 0)) THEN DO; MPRINT(TAXSCF): IF (FILESTAT^=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 0 & ADJEQDBTL <= 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((100000)/ADJEQDBTL)*ADJDEDCTL; 569 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL <= 1000000) & ADJEQDBTL <= 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL <= 1000000) & ADJEQDBTL > 100000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+100000)/ (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL > 1000000) & (ADJEQDBTL <= 100000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((1000000+ADJEQDBTL)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT^=3 & (HAAMTOUTM+ADJAMTOUTO+ TOTAQDBTL > 1000000) & (ADJEQDBTL > 100000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((1100000)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 0 & ADJEQDBTL <= 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & HAAMTOUTM=0 & ADJAMTOUTO=0 & TOTAQDBTL=0 & ADJEQDBTL > 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((50000)/ADJEQDBTL)*ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000) & ADJEQDBTL <= 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=0; MPRINT(TAXSCF): ADJDEDCT=TOTDEDCTM+ADJDEDCTO+ADJDEDCTL; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL <= 500000) & ADJEQDBTL > 50000) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+50000)/ (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL))*(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000) & (ADJEQDBTL <= 50000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((500000+ADJEQDBTL)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & (HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL > 500000) & (ADJEQDBTL > 50000)) THEN DO; MPRINT(TAXSCF): OVERLIM=1; MPRINT(TAXSCF): ADJDEDCT=((550000)/(HAAMTOUTM+ADJAMTOUTO+TOTAQDBTL+ADJEQDBTL)) *(TOTDEDCTM+ADJDEDCTO+ADJDEDCTL); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * a few obs will come out here, but they either have -1 as the interest rate or are land contracts; MPRINT(TAXSCF): IF ((GRFAMTOUTM > 0 | HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | (ADJEQDBTL*(1989 LE 2016)) > 0 | A17AMTOUTM > 0 & ADJ17AMTOUTO > 0) & ADJDEDCT=0 & X5744 IN(1 5 6) & Y1=YY1*10+1 & X720^=1989) THEN PUT "MORTGAGE DEDUCTION SHOULD NOT BE ZERO " Y1= X5744= X5746= GRFAMTOUTM= HAAMTOUTM= ADJAMTOUTO= TOTAQDBTL= ADJEQDBTL= A17AMTOUTM= ADJ17AMTOUTO= TOTDEDCTM= ADJDEDCTO= ADJDEDCTL= OVERLIM= QUALOTHPROP= CINTDCTM1= CINTDCTM2= CINTDCTM3= CINTDCTO1= CINTDCTO2= X702= X714= X7135= X723=/; MPRINT(TAXSCF): IF ((GRFAMTOUTM > 0 | HAAMTOUTM > 0 | ADJAMTOUTO > 0 | TOTAQDBTL > 0 | ADJEQDBTL > 0 | A17AMTOUTM > 0 & ADJ17AMTOUTO > 0) & OVERLIM=. & Y1=YY1*10+1) THEN PUT "OVER LIMIT INDICATOR MISSING " Y1= X5744= X5746= GRFAMTOUTM= HAAMTOUTM= ADJAMTOUTO= TOTAQDBTL= ADJEQDBTL= A17AMTOUTM= ADJ17AMTOUTO= TOTDEDCTM= ADJDEDCTO= ADJDEDCTL= OVERLIM= ADJDEDCT=/; MPRINT(TAXSCF): IF ADJDEDCT >= 100000 & Y1=YY1*10+1 THEN PUT "HUGE MORTGAGE INTEREST DEDUCTION " Y1= TOTDEDCTM= 570 The SAS System 13:32 Friday, January 29, 2021 GRFAMTOUTM= HAAMTOUTM= TOTAQDBTL= ADJDEDCTL= ADJEQDBTL= ADJDEDCTO= ADJAMTOUTO= A17AMTOUTM= ADJ17AMTOUTO= HOUSE= QUALOTHPROP= FMVOTHPROP= X5744= X5746= ADJDEDCT= /; MPRINT(TAXSCF): ************Real estate taxes; MPRINT(TAXSCF): * TAXSIM doesnt want local property taxes in amount of itemized deductions, listed as a separate variable; MPRINT(TAXSCF): * 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; MPRINT(TAXSCF): PROPTXRATE=0; MPRINT(TAXSCF): IF (HOUSE > 0 & RESTAXM1 > 0) THEN PROPTXRATE=(RESTAXM1/HOUSE)*100; MPRINT(TAXSCF): IF (PROPTXRATE > 10 & Y1=YY1*10+1) THEN PUT "HIGH PROPERTY TAX RATE " Y1= HOUSE= RESTAXM1= X721= J721= X722= J722= X501= X601= X701= PROPTXRATE=/; MPRINT(TAXSCF): IF (PROPTXRATE > 10 & X722=4) THEN RESTAXM1=X721; MPRINT(TAXSCF): ************Investment interest expense; MPRINT(TAXSCF): * 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 need to add up dividend/interest income. Capital gains 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.; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): * LOCs - only counting loans not secured by the residence and with asset or real estate investment as loan purpose.; MPRINT(TAXSCF): IF (X1101=1) THEN DO; MPRINT(TAXSCF): DO I=1 TO DIM(SBYHOME); MPRINT(TAXSCF): IF (SBYHOME{I}=5 & DOOWE{I}=1 & LNPURP{I} IN(76 78 79)) THEN DO; MPRINT(TAXSCF): IF (TYPAYL{I} > 0) THEN DO; MPRINT(MOCONV): IF (TYPAYLF{I}=1) THEN CMOPAYL{I}=TYPAYL{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=2) THEN CMOPAYL{I}=TYPAYL{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=3) THEN CMOPAYL{I}=TYPAYL{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=4) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=5) THEN CMOPAYL{I}=TYPAYL{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=6) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=20) THEN CMOPAYL{I}=TYPAYL{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=21) THEN CMOPAYL{I}=TYPAYL{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=8) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=11) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=12) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=23) THEN CMOPAYL{I}=TYPAYL{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=24) THEN CMOPAYL{I}=TYPAYL{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=25) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=31) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=18) THEN CMOPAYL{I}=TYPAYL{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=0) THEN CMOPAYL{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}>.Z & TYPAYLF{I}^=-1 & TYPAYLF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}>.Z & TYPAYL{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}<=.Z) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYL{I}^=-1 & TYPAYL{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYLF{I}= TYPAYL{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; 571 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE IF (TYPAYL{I} IN(0 -1 -2)) THEN DO; MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (INTRATEL{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=((INTRATEL{I}/10000)*AMTOUTL{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEL{I} IN(0 -1)) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTL{I} > 0 & CMOPAYL{I} > 0 & SINTDCTL{I} > CMOPAYL{I}*12) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=CMOPAYL{I}*12; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTLOCINVEX=TOTLOCINVEX+SINTDCTL{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Other properties - only counting properties held for investment purposes, and hh must receive income from the property.; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNO); MPRINT(TAXSCF): IF (PROPTYPE{I} IN(41 42 43 44 45 46 47 48) & (INCOMEO{I} > 0)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified properties; MPRINT(TAXSCF): QUALPINV{I}=(HAVELNO{I}=1); MPRINT(TAXSCF): QUALINVPROP=QUALINVPROP+QUALPINV{I}; MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & HBALLNO{I} IN(1 5) & NMYRO{I} NOT IN(0 -1 -7) & INTRATEO{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAYO{I} < AMTBORRO{I}*.005) THEN CMOPAYO{I}=MAX(REGPAYO{I},TYPAYO{I}); MPRINT(TAXSCF): 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})); MPRINT(TAXSCF): 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))); MPRINT(TAXSCF): IF LNSTYRO{I}^=1989 THEN AINTDCTO{I}=(CMOPAYO{I}*12)-(AMTOWE_1O{I}-AMTOWEO{I}); MPRINT(TAXSCF): ELSE IF LNSTYRO{I}=1989 THEN AINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | CMOPAYO{I} < 0 | PAYLFTO{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEO{I}=0; MPRINT(TAXSCF): AMTOWE_1O{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & AMTBORRO{I} > 0 & LNAGEO{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTDCTO{I}=(CMOPAYO{I}*12)-(CURBAL_1O{I}-CURBALO{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} < 0 | AMTBORRO{I} < 0 | LNAGEO{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALO{I}=0; MPRINT(TAXSCF): CURBAL_1O{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); 572 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE SINTDCTO{I}=0; MPRINT(TAXSCF): * 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 the home was not purchased in the survey year. If the home was purchased in the survey year, set deduction to zero.; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & PAYLFTO{I}=0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=1989 & PURCHYRO{I}=1989) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHO{I} > 0 & CMOPAYO{I} > 0 & LNSTYRO{I}=1989) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & CURBALO{I} > 0 & CURBAL_1O{I} > 0) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=CURBAL_1O{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=CINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTDCTO{I} < 0 | CINTDCTO{I} < 0) & (CURBALO{I} <= 0 & CURBAL_1O{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTO{I} > 0 & CINTDCTO{I} > 0) THEN DCTDIFFO{I}=CINTDCTO{I}-SINTDCTO{I}; MPRINT(TAXSCF): ELSE DCTDIFFO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (NMYRO{I} IN(-1 -7) & NMPMTO{I} IN(-1 -7)) & AMTOUTO{I} > 0 & INTRATEO{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): AINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): CINTDCTO{I}=SINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (HAVELNO{I}=1 & (INTRATEO{I}=-1)) THEN DO; MPRINT(TAXSCF): AINTDCTO{I}=0; MPRINT(TAXSCF): CINTDCTO{I}=0; MPRINT(TAXSCF): SINTDCTO{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest deduction; MPRINT(TAXSCF): IF ((CINTDCTO{I} + AINTDCTO{I} + SINTDCTO{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=(CINTDCTO{I}+AINTDCTO{I}+SINTDCTO{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTDCTO{I}=0; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & CMOPAYO{I} > 0 & (AVINTDCTO{I} > CMOPAYO{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTDCTO{I}=CMOPAYO{I}*12; MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): SINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (HAVELNO{I}=1 & AVINTDCTO{I} > 0 & AMTOUTO{I} > 0 & (AVINTDCTO{I} > .25*AMTOUTO{I})) THEN DO; 573 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): AVINTDCTO{I}=AMTOUTO{I}*(INTRATEO{I}/10000); MPRINT(TAXSCF): CINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): AINTDCTO{I}=AVINTDCTO{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): 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}= /; MPRINT(TAXSCF): * Compute total investment interest expense; MPRINT(TAXSCF): TOTINVPDCT=TOTINVPDCT+((AVINTDCTO{I})*PERPROP{I}/10000)*(HAVELNO{I}=1); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Other loans - only counting loans for (non-business) investment purposes; MPRINT(TAXSCF): ARRAY TLMTHI {*} TLMTHI1 TLMTHI2 TLMTHI3 TLMTHI4 TLMTHI5 TLMTHI6; MPRINT(TAXSCF): ARRAY CMOPAYI {*} CMOPAYI1 CMOPAYI2 CMOPAYI3 CMOPAYI4 CMOPAYI5 CMOPAYI6; MPRINT(TAXSCF): ARRAY PAYLFTI {*} PAYLFTI1 PAYLFTI2 PAYLFTI3 PAYLFTI4 PAYLFTI5 PAYLFTI6; MPRINT(TAXSCF): ARRAY AMTOWEI {*} AMTOWEI1 AMTOWEI2 AMTOWEI3 AMTOWEI4 AMTOWEI5 AMTOWEI6; MPRINT(TAXSCF): ARRAY AMTOWE_1I {*} AMTOWE_1I1 AMTOWE_1I2 AMTOWE_1I3 AMTOWE_1I4 AMTOWE_1I5 AMTOWE_1I6; MPRINT(TAXSCF): ARRAY AINTEXPI {*} AINTEXPI1 AINTEXPI2 AINTEXPI3 AINTEXPI4 AINTEXPI5 AINTEXPI6; MPRINT(TAXSCF): ARRAY LNAGEI {*} LNAGEI1 LNAGEI2 LNAGEI3 LNAGEI4 LNAGEI5 LNAGEI6; MPRINT(TAXSCF): ARRAY CURBALI {*} CURBALI1 CURBALI2 CURBALI3 URBALI4 CURBALI5 CURBALI6; MPRINT(TAXSCF): ARRAY CURBAL_1I {*} CURBAL_1I1 CURBAL_1I2 CURBAL_1I3 CURBAL_1I4 CURBAL_1I5 CURBAL_1I6; MPRINT(TAXSCF): ARRAY CINTEXPI {*} CINTEXPI1 CINTEXPI2 CINTEXPI3 CINTEXPI4 CINTEXPI5 CINTEXPI6; MPRINT(TAXSCF): ARRAY DCTDIFFI {*} DCTDIFFI1 DCTDIFFI2 DCTDIFFI3 DCTDIFFI4 DCTDIFFI5 DCTDIFFI6; MPRINT(TAXSCF): ARRAY SINTEXPI {*} SINTEXPI1 SINTEXPI2 SINTEXPI3 SINTEXPI4 SINTEXPI5 SINTEXPI6; MPRINT(TAXSCF): ARRAY AVINTEXPI {*} AVINTEXPI1 AVINTEXPI2 AVINTEXPI3 AVINTEXPI4 AVINTEXPI5 AVINTEXPI6; MPRINT(TAXSCF): ARRAY QUALN {*} QLN1 QLN2 QLN3 QLN4 QLN5 QLN6; MPRINT(TAXSCF): ARRAY NMPMTI {*} X2716 X2733 X2816 X2833 X2916 X2933; MPRINT(TAXSCF): ARRAY NMYRI {*} X2717 X2734 X2817 X2834 X2917 X2934; MPRINT(TAXSCF): ARRAY REGPAYFI {*} X7527 X7526 X7525 X7524 X7523 X7522; MPRINT(TAXSCF): ARRAY REGPAYI {*} X2718 X2735 X2818 X2835 X2918 X2935; MPRINT(TAXSCF): ARRAY TYPAYFI {*} X2720 X2737 X2820 X2837 X2920 X2937; MPRINT(TAXSCF): ARRAY TYPAYI {*} X2719 X2736 X2819 X2836 X2919 X2936; MPRINT(TAXSCF): ARRAY LNSTYRI {*} X2713 X2730 X2813 X2830 X2913 X2930; MPRINT(TAXSCF): ARRAY AMTBORRI {*} X2714 X2731 X2814 X2831 X2914 X2931; MPRINT(TAXSCF): ARRAY JAMTBORRI {*} J2714 J2731 J2814 J2831 J2914 J2931; MPRINT(TAXSCF): ARRAY AMTOUTI {*} X2723 X2740 X2823 X2840 X2923 X2940; MPRINT(TAXSCF): ARRAY JAMTOUTI {*} J2723 J2740 J2823 J2840 J2923 J2940; MPRINT(TAXSCF): ARRAY INTRATEI {*} X2724 X2741 X2824 X2841 X2924 X2941; MPRINT(TAXSCF): ARRAY ONSCHEDI {*} X7521 X7520 X7519 X7518 X7517 X7516; MPRINT(TAXSCF): ; MPRINT(TAXSCF): ARRAY LNTYPE {*} X2710 X2727 X2810 X2827 X2910 X2927; MPRINT(TAXSCF): ARRAY BUSLN {*} X6842 X6843 X6844 X6845 X6846 X6847; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTHI); MPRINT(TAXSCF): TLMTHI{I}=0; MPRINT(TAXSCF): CMOPAYI{I}=0; MPRINT(TAXSCF): PAYLFTI{I}=0; MPRINT(TAXSCF): AMTOWEI{I}=0; MPRINT(TAXSCF): AMTOWE_1I{I}=0; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): LNAGEI{I}=0; MPRINT(TAXSCF): CURBALI{I}=0; MPRINT(TAXSCF): CURBAL_1I{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): DCTDIFFI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; 574 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): AVINTEXPI{I}=0; MPRINT(TAXSCF): QUALN{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTLNINVEX=0; MPRINT(TAXSCF): QUALOANINV=0; MPRINT(TAXSCF): DO I=1 TO DIM(NMPMTI); MPRINT(TERMCON): IF (NMYRI{I}=0 & NMPMTI{I}=0) THEN DO; MPRINT(TERMCON): TLMTHI{I}=0; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRI{I}^=0|NMPMTI{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRI{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRI{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHI{I}=NMYRI{I}; MPRINT(TERMCON): IF (NMPMTI{I}=0) THEN DO; MPRINT(TERMCON): NMPMTI{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRI{I}>0) THEN DO; MPRINT(TERMCON): TLMTHI{I}=NMYRI{I}*12; MPRINT(TERMCON): IF (NMPMTI{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYFI{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMTI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFI{I}=-7) THEN DO; MPRINT(TERMCON): NMPMTI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFI{I}=8) THEN DO; MPRINT(TERMCON): NMPMTI{I}=1; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFI{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYFI{I}=1) THEN NMPMTI{I}=TLMTHI{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=2) THEN NMPMTI{I}=TLMTHI{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=3) THEN NMPMTI{I}=TLMTHI{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=4) THEN NMPMTI{I}=TLMTHI{I}; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=5) THEN NMPMTI{I}=TLMTHI{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=6) THEN NMPMTI{I}=TLMTHI{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=20) THEN NMPMTI{I}=TLMTHI{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=21) THEN NMPMTI{I}=TLMTHI{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=11) THEN NMPMTI{I}=TLMTHI{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=12) THEN NMPMTI{I}=TLMTHI{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=23) THEN NMPMTI{I}=TLMTHI{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=24) THEN NMPMTI{I}=TLMTHI{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=25) THEN NMPMTI{I}=TLMTHI{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=31) THEN NMPMTI{I}=TLMTHI{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=18) THEN NMPMTI{I}=TLMTHI{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=0) THEN NMPMTI{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}>.Z & REGPAYFI{I}^=-1 & REGPAYFI{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMTI{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTHI{I}= REGPAYFI{I}= NMPMTI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHI{I}>.Z & TLMTHI{I}<-2) THEN DO; MPRINT(MOCONV): NMPMTI{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTHI{I}= REGPAYFI{I}= NMPMTI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHI{I}<=.Z) THEN NMPMTI{I}=TLMTHI{I}; MPRINT(MOCONV): ELSE IF (TLMTHI{I}^=-1 & TLMTHI{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFI{I}= TLMTHI{I}= "SETTING AMT=."; MPRINT(MOCONV): NMPMTI{I}=.; 575 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTI{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHI{I}=-1; MPRINT(TERMCON): IF (NMYRI{I}=0) THEN DO; MPRINT(TERMCON): NMYRI{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTI{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYFI{I}; MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYFI{I}>0) THEN PFREQ=TYPAYFI{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTHI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; MPRINT(TERMCON): TLMTHI{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): IF (NMPMTI{I}>0) THEN DO; MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTHI{I}=NMPMTI{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}))); MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12))); MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTHI{I}=MAX(1,INT(.5+(NMPMTI{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTHI{I}=NMPMTI{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTHI{I}=NMPMTI{I}*2/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTHI{I}=NMPMTI{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTHI{I}=NMPMTI{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTHI{I}=NMPMTI{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTHI{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): TLMTHI{I}=NMPMTI{I}; MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMTI{I}= PFREQ= TLMTHI{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}>.Z & NMPMTI{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTHI{I}=NMPMTI{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMTI{I}= PFREQ= TLMTHI{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}=0) THEN TLMTHI{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}<=.Z) THEN TLMTHI{I}=NMPMTI{I}; MPRINT(IMOCONV): ELSE IF (NMPMTI{I}^=-1 & NMPMTI{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMTI{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTHI{I}=.; MPRINT(IMOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTHI{I}>0) THEN DO; MPRINT(TERMCON): NMYRI{I}=MAX(1,INT(.5+(TLMTHI{I}/12))); MPRINT(TERMCON): TLMTHI{I}=MAX(1,ROUND(TLMTHI{I})); MPRINT(TERMCON): END; 576 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TERMCON): IF (NMYRI{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMTI{I}= NMYRI{I}= TLMTHI{I}= REGPAYFI{I}= REGPAYI{I}= TYPAYFI{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAYI{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYFI{I}=1) THEN CMOPAYI{I}=REGPAYI{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=2) THEN CMOPAYI{I}=REGPAYI{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=3) THEN CMOPAYI{I}=REGPAYI{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=4) THEN CMOPAYI{I}=REGPAYI{I}; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=5) THEN CMOPAYI{I}=REGPAYI{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=6) THEN CMOPAYI{I}=REGPAYI{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=20) THEN CMOPAYI{I}=REGPAYI{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=21) THEN CMOPAYI{I}=REGPAYI{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=8) THEN CMOPAYI{I}=REGPAYI{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=11) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=12) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=23) THEN CMOPAYI{I}=REGPAYI{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=24) THEN CMOPAYI{I}=REGPAYI{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=25) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=31) THEN CMOPAYI{I}=REGPAYI{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=18) THEN CMOPAYI{I}=REGPAYI{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}=0) THEN CMOPAYI{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFI{I}>.Z & REGPAYFI{I}^=-1 & REGPAYFI{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAYI{I}= REGPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYI{I}>.Z & REGPAYI{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAYI{I}= REGPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYI{I}<=.Z) THEN CMOPAYI{I}=REGPAYI{I}; MPRINT(MOCONV): ELSE IF (REGPAYI{I}^=-1 & REGPAYI{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFI{I}= REGPAYI{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(MOCONV): IF (TYPAYFI{I}=1) THEN CMOPAYI{I}=TYPAYI{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=2) THEN CMOPAYI{I}=TYPAYI{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=3) THEN CMOPAYI{I}=TYPAYI{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=4) THEN CMOPAYI{I}=TYPAYI{I}; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=5) THEN CMOPAYI{I}=TYPAYI{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=6) THEN CMOPAYI{I}=TYPAYI{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=20) THEN CMOPAYI{I}=TYPAYI{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=21) THEN CMOPAYI{I}=TYPAYI{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=8) THEN CMOPAYI{I}=TYPAYI{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=11) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=12) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=23) THEN CMOPAYI{I}=TYPAYI{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=24) THEN CMOPAYI{I}=TYPAYI{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=25) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=31) THEN CMOPAYI{I}=TYPAYI{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=18) THEN CMOPAYI{I}=TYPAYI{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFI{I}=0) THEN CMOPAYI{I}=0; 577 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (TYPAYFI{I}>.Z & TYPAYFI{I}^=-1 & TYPAYFI{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYI{I}= TYPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYI{I}>.Z & TYPAYI{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYI{I}= TYPAYFI{I}= CMOPAYI{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYI{I}<=.Z) THEN CMOPAYI{I}=TYPAYI{I}; MPRINT(MOCONV): ELSE IF (TYPAYI{I}^=-1 & TYPAYI{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYFI{I}= TYPAYI{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYI{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF NMYRI{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFTI{I}=(TLMTHI{I}-((1989-LNSTYRI{I})*12)); MPRINT(TAXSCF): LNAGEI{I}=TLMTHI{I}-PAYLFTI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFTI{I}=0; MPRINT(TAXSCF): LNAGEI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): DO I=1 TO MIN(6,X2709); MPRINT(TAXSCF): IF (LNTYPE{I} IN(76 78 79) & BUSLN{I} IN(0 5 8)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified loans; MPRINT(TAXSCF): QUALN{I}=1; MPRINT(TAXSCF): QUALOANINV=QUALOANINV+QUALN{I}; MPRINT(TAXSCF): IF (NMYRI{I} NOT IN(0 -1 -7) & INTRATEI{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & PAYLFTI{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): * IF (CMOPAYI{I} < AMTBORRI{I}*.005) THEN CMOPAYI{I}=MAX(REGPAYI{I},TYPAYI{I}); MPRINT(TAXSCF): AMTOWEI{I}=CMOPAYI{I}*((1-1/(1+(INTRATEI{I}/10000)/12)**PAYLFTI{I})/ ((INTRATEI{I}/10000)/12)); MPRINT(TAXSCF): AMTOWE_1I{I}=CMOPAYI{I}*((1-1/(1+(INTRATEI{I}/10000)/12)**(PAYLFTI{I}+12))/ ((INTRATEI{I}/10000)/12)); MPRINT(TAXSCF): IF LNSTYRI{I}^=1989 THEN AINTEXPI{I}=(CMOPAYI{I}*12)-(AMTOWE_1I{I}-AMTOWEI{I}); MPRINT(TAXSCF): ELSE IF LNSTYRI{I}=1989 THEN AINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHI{I} < 0 | CMOPAYI{I} < 0 | PAYLFTI{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEI{I}=0; MPRINT(TAXSCF): AMTOWE_1I{I}=0; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & AMTBORRI{I} > 0 & LNAGEI{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTEXPI{I}=(CMOPAYI{I}*12)-(CURBAL_1I{I}-CURBALI{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHI{I} < 0 | AMTBORRI{I} < 0 | LNAGEI{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALI{I}=0; MPRINT(TAXSCF): CURBAL_1I{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUTI{I} > 0 & INTRATEI{I} > 0) THEN SINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): ELSE SINTEXPI{I}=0; MPRINT(TAXSCF): * Also fixing cases where loan ends or starts in the survey year. Setting interest expense to amount 578 The SAS System 13:32 Friday, January 29, 2021 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, set the interest expense to zero.; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & PAYLFTI{I}=0) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=CURBAL_1I{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=CINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & LNSTYRI{I}=1989) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF ((AINTEXPI{I} < 0 | CINTEXPI{I} < 0) & CURBALI{I} > 0 & CURBAL_1I{I} > 0) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=CURBAL_1I{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=CINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTEXPI{I} < 0 | CINTEXPI{I} < 0) & (CURBALI{I} <= 0 & CURBAL_1I{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTEXPI{I} > 0 & CINTEXPI{I} > 0) THEN DCTDIFFI{I}=CINTEXPI{I}-SINTEXPI{I}; MPRINT(TAXSCF): ELSE DCTDIFFI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): CINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEI{I}=-1) THEN DO; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of interest expense; MPRINT(TAXSCF): IF ((CINTEXPI{I} + AINTEXPI{I} + SINTEXPI{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=(CINTEXPI{I}+AINTEXPI{I}+SINTEXPI{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTEXPI{I}=0; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (AVINTEXPI{I} > 0 & CMOPAYI{I} > 0 & (AVINTEXPI{I} > CMOPAYI{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=CMOPAYI{I}*12; MPRINT(TAXSCF): CINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): SINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AVINTEXPI{I} > 0 & AMTOUTI{I} > 0 & (AVINTEXPI{I} > .25*AMTOUTI{I})) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): CINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (Y1=YY1*10+1 & (AVINTEXPI{I} > .25*AMTOUTI{I})) THEN PUT "DEDUCTION LARGER THAN 25% OF BALANCE 579 The SAS System 13:32 Friday, January 29, 2021 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}= /; MPRINT(TAXSCF): * Compute loan investment interest expense; MPRINT(TAXSCF): TOTLNINVEX=TOTLNINVEX+AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Total investment interest expense, if investment interest expense is greater than interest/dividend income, then expense is limited to income amount; MPRINT(TAXSCF): TOTINTINC=X5708+X5710; MPRINT(TAXSCF): TOTINVEX=0; MPRINT(TAXSCF): TOTINVEX=TOTLOCINVEX+TOTINVPDCT+TOTLNINVEX; MPRINT(TAXSCF): IF TOTINVEX > 0 THEN HINVEX=1; MPRINT(TAXSCF): ELSE HINVEX=0; MPRINT(TAXSCF): IF TOTINVEX > TOTINTINC & Y1=YY1*10+1 THEN PUT "TOO MUCH INVESTMENT INTEREST EXPENSES " Y1= TOTINVEX= TOTLOCINVEX= TOTINVPDCT= TOTLNINVEX= TOTINTINC=/; MPRINT(TAXSCF): IF (TOTINVEX > TOTINTINC) THEN TOTINVEX=TOTINTINC; MPRINT(TAXSCF): * In 1988, 40% of personal interest is deductible, this includes credit cards, car/other vehicle loans, other consumer loans, loans against life insurance policies, home improvement loans, and non-HELOC LOCs.; MPRINT(TAXSCF): * Credit cards - although we do not have interest rate info, assume 17.8% interest rate and pro-rate deduction based on the payment question (x432). If hh almost always pays balance, then deduction is balance still owed on all cards multiplied by .178/12. For sometimes pays balance, deduction is balance still owed multiplied by .178/6, for hardly ever pays balance, deduction is balance still owed multiplied by .178; MPRINT(TAXSCF): * 17.8% interest rate taken from Federal Reserve Bulletin; MPRINT(TAXSCF): TOTCCBAL=MAX(0,(X413+X421+X424+X427+X430)); MPRINT(TAXSCF): CCPINEX=0; MPRINT(TAXSCF): IF (X410=1 & TOTCCBAL > 0) THEN DO; MPRINT(TAXSCF): IF (X432=1) THEN CCPINEX=TOTCCBAL*(.178/12); MPRINT(TAXSCF): ELSE IF (X432=3) THEN CCPINEX=TOTCCBAL*(.178/6); MPRINT(TAXSCF): ELSE IF (X432=5) THEN CCPINEX=TOTCCBAL*(.178); MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Car/other vehicle and home improvement loans, using code similar to other loan investment interest deduction computations; MPRINT(TAXSCF): ARRAY TLMTHC {*} TLMTHC1 TLMTHC2 TLMTHC3 TLMTHC4 TLMTHC5 TLMTHC6 TLMTHC7; MPRINT(TAXSCF): ARRAY CMOPAYC {*} CMOPAYC1 CMOPAYC2 CMOPAYC3 CMOPAYC4 CMOPAYC5 CMOPAYC6 CMOPAYC7; MPRINT(TAXSCF): ARRAY PAYLFTC {*} PAYLFTC1 PAYLFTC2 PAYLFTC3 PAYLFTC4 PAYLFTC5 PAYLFTC6 PAYLFTC7; MPRINT(TAXSCF): ARRAY AMTOWEC {*} AMTOWEC1 AMTOWEC2 AMTOWEC3 AMTOWEC4 AMTOWEC5 AMTOWEC6 AMTOWEC7; MPRINT(TAXSCF): ARRAY AMTOWE_1C {*} AMTOWE_1C1 AMTOWE_1C2 AMTOWE_1C3 AMTOWE_1C4 AMTOWE_1C5 AMTOWE_1C6 AMTOWE_1C7; MPRINT(TAXSCF): ARRAY AINTEXPC {*} AINTEXPC1 AINTEXPC2 AINTEXPC3 AINTEXPC4 AINTEXPC5 AINTEXPC6 AINTEXPC7; MPRINT(TAXSCF): ARRAY LNAGEC {*} LNAGEC1 LNAGEC2 LNAGEC3 LNAGEC4 LNAGEC5 LNAGEC6 LNAGEC7; MPRINT(TAXSCF): ARRAY QUALNC {*} QUALNC1 QUALNC2 QUALNC3 QUALNC4 QUALNC5 QUALNC6 QUALNC7; MPRINT(TAXSCF): ARRAY CURBALC {*} CURBALC1 CURBALC2 CURBALC3 URBALC4 CURBALC5 CURBALC6 CURBALC7; MPRINT(TAXSCF): ARRAY CURBAL_1C {*} CURBAL_1C1 CURBAL_1C2 CURBAL_1C3 CURBAL_1C4 CURBAL_1C5 CURBAL_1C6 CURBAL_1C7; MPRINT(TAXSCF): ARRAY CINTEXPC {*} CINTEXPC1 CINTEXPC2 CINTEXPC3 CINTEXPC4 CINTEXPC5 CINTEXPC6 CINTEXPC7; MPRINT(TAXSCF): ARRAY DCTDIFFC {*} DCTDIFFC1 DCTDIFFC2 DCTDIFFC3 DCTDIFFC4 DCTDIFFC5 DCTDIFFC6 DCTDIFFC7; MPRINT(TAXSCF): ARRAY SINTEXPC {*} SINTEXPC1 SINTEXPC2 SINTEXPC3 SINTEXPC4 SINTEXPC5 SINTEXPC6 SINTEXPC7; MPRINT(TAXSCF): ARRAY AVINTEXPC {*} AVINTEXPC1 AVINTEXPC2 AVINTEXPC3 AVINTEXPC4 AVINTEXPC5 AVINTEXPC6 AVINTEXPC7; MPRINT(TAXSCF): ARRAY NMPMTC {*} X1037 X1208 X2211 X2311 X2411 X2512 X2612; MPRINT(TAXSCF): ARRAY NMYRC {*} X1038 X1209 X2212 X2312 X2412 X2513 X2613; MPRINT(TAXSCF): ARRAY REGPAYFC {*} REGPYFC1 REGPYFC2 REGPYFC3 REGPYFC4 REGPYFC5 REGPYFC6 REGPYFC7; MPRINT(TAXSCF): ARRAY REGPAYC {*} X1039 X1210 X2213 X2313 X2413 X2514 X2614; MPRINT(TAXSCF): ARRAY TYPAYFC {*} X1041 X1212 X2215 X2315 X2415 X2516 X2616; MPRINT(TAXSCF): ARRAY TYPAYC {*} X1040 X1211 X2214 X2314 X2414 X2515 X2615; MPRINT(TAXSCF): ARRAY LNSTYRC {*} X1034 X1205 X2208 X2308 X2408 X2509 X2609; MPRINT(TAXSCF): ARRAY AMTBORRC {*} X1035 X1206 X2209 X2309 X2409 X2510 X2610; MPRINT(TAXSCF): ARRAY JAMTBORRC {*} J1035 J1206 J2209 J2309 J2409 J2510 J2610; MPRINT(TAXSCF): ARRAY AMTOUTC {*} X1044 X1215 X2218 X2318 X2418 X2519 X2619; 580 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ARRAY JAMTOUTC {*} J1044 J1215 J2218 J2318 J2418 J2519 J2619; MPRINT(TAXSCF): ARRAY INTRATEC {*} X1045 X1216 X2219 X2319 X2419 X2520 X2620; MPRINT(TAXSCF): ARRAY HAVELNC {*} X1032 X1203 X2206 X2306 X2406 X2507 X2607; MPRINT(TAXSCF): ARRAY REGLNC {*} X1036 X1207 X2210 X2310 X2410 X2511 X2611; MPRINT(TAXSCF): * Initialize some variables; MPRINT(TAXSCF): DO I=1 TO DIM(TLMTHC); MPRINT(TAXSCF): TLMTHC{I}=0; MPRINT(TAXSCF): CMOPAYC{I}=0; MPRINT(TAXSCF): PAYLFTC{I}=0; MPRINT(TAXSCF): AMTOWEC{I}=0; MPRINT(TAXSCF): AMTOWE_1C{I}=0; MPRINT(TAXSCF): AINTEXPC{I}=0; MPRINT(TAXSCF): LNAGEC{I}=0; MPRINT(TAXSCF): CURBALC{I}=0; MPRINT(TAXSCF): CURBAL_1C{I}=0; MPRINT(TAXSCF): CINTEXPC{I}=0; MPRINT(TAXSCF): DCTDIFFC{I}=0; MPRINT(TAXSCF): SINTEXPC{I}=0; MPRINT(TAXSCF): AVINTEXPC{I}=0; MPRINT(TAXSCF): QUALNC{I}=0; MPRINT(TAXSCF): * frequency of regular payment question not asked for car/vehicle/HI loans, it is assumed to be monthly; MPRINT(TAXSCF): REGPAYFC{I}=4; MPRINT(TAXSCF): * A fix for length of loan, this variable is not in the public dataset, and missing values exist in the internal dataset - just setting the value to inap. It seems from inspecting the data that any loan with a missing value for the length has a zero interest rate.; MPRINT(TAXSCF): IF NMYRC{I} < -1 THEN NMYRC{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTLNPINEXC=0; MPRINT(TAXSCF): QUALNPINEXC=0; MPRINT(TAXSCF): DO I=1 TO DIM(NMPMTC); MPRINT(TERMCON): IF (NMYRC{I}=0 & NMPMTC{I}=0) THEN DO; MPRINT(TERMCON): TLMTHC{I}=0; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRC{I}^=0|NMPMTC{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRC{I}^=0) THEN DO; MPRINT(TERMCON): IF (NMYRC{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHC{I}=NMYRC{I}; MPRINT(TERMCON): IF (NMPMTC{I}=0) THEN DO; MPRINT(TERMCON): NMPMTC{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMYRC{I}>0) THEN DO; MPRINT(TERMCON): TLMTHC{I}=NMYRC{I}*12; MPRINT(TERMCON): IF (NMPMTC{I}=0) THEN DO; MPRINT(TERMCON): IF (REGPAYFC{I} IN (-1 -2)) THEN DO; MPRINT(TERMCON): NMPMTC{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFC{I}=-7) THEN DO; MPRINT(TERMCON): NMPMTC{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFC{I}=8) THEN DO; MPRINT(TERMCON): NMPMTC{I}=1; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (REGPAYFC{I}>.Z) THEN DO; MPRINT(MOCONV): IF (REGPAYFC{I}=1) THEN NMPMTC{I}=TLMTHC{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFC{I}=2) THEN NMPMTC{I}=TLMTHC{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFC{I}=3) THEN NMPMTC{I}=TLMTHC{I}*26*(52/52)/12; 581 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (REGPAYFC{I}=4) THEN NMPMTC{I}=TLMTHC{I}; MPRINT(MOCONV): ELSE IF (REGPAYFC{I}=5) THEN NMPMTC{I}=TLMTHC{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFC{I}=6) THEN NMPMTC{I}=TLMTHC{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFC{I}=20) THEN NMPMTC{I}=TLMTHC{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFC{I}=21) THEN NMPMTC{I}=TLMTHC{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFC{I}=11) THEN NMPMTC{I}=TLMTHC{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFC{I}=12) THEN NMPMTC{I}=TLMTHC{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFC{I}=23) THEN NMPMTC{I}=TLMTHC{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFC{I}=24) THEN NMPMTC{I}=TLMTHC{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFC{I}=25) THEN NMPMTC{I}=TLMTHC{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFC{I}=31) THEN NMPMTC{I}=TLMTHC{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFC{I}=18) THEN NMPMTC{I}=TLMTHC{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFC{I}=0) THEN NMPMTC{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFC{I}>.Z & REGPAYFC{I}^=-1 & REGPAYFC{I}^=-2) THEN DO; MPRINT(MOCONV): NMPMTC{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TLMTHC{I}= REGPAYFC{I}= NMPMTC{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHC{I}>.Z & TLMTHC{I}<-2) THEN DO; MPRINT(MOCONV): NMPMTC{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TLMTHC{I}= REGPAYFC{I}= NMPMTC{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TLMTHC{I}<=.Z) THEN NMPMTC{I}=TLMTHC{I}; MPRINT(MOCONV): ELSE IF (TLMTHC{I}^=-1 & TLMTHC{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFC{I}= TLMTHC{I}= "SETTING AMT=."; MPRINT(MOCONV): NMPMTC{I}=.; MPRINT(MOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTC{I}=-1) THEN DO; MPRINT(TERMCON): TLMTHC{I}=-1; MPRINT(TERMCON): IF (NMYRC{I}=0) THEN DO; MPRINT(TERMCON): NMYRC{I}=-1; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (NMPMTC{I}>0) THEN DO; MPRINT(TERMCON): PFREQ=REGPAYFC{I}; MPRINT(TERMCON): IF (PFREQ<=0 & TYPAYFC{I}>0) THEN PFREQ=TYPAYFC{I}; MPRINT(TERMCON): IF (PFREQ IN (-1 -2)) THEN DO; MPRINT(TERMCON): TLMTHC{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ=-7) THEN DO; MPRINT(TERMCON): TLMTHC{I}=-7; MPRINT(TERMCON): END; MPRINT(TERMCON): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): IF (NMPMTC{I}>0) THEN DO; MPRINT(IMOCONV): IF (PFREQ=1) THEN TLMTHC{I}=NMPMTC{I}*12/(5*52); MPRINT(IMOCONV): ELSE IF (PFREQ=2) THEN TLMTHC{I}=MAX(1,INT(.5+(NMPMTC{I}*12/52))); MPRINT(IMOCONV): ELSE IF (PFREQ=3) THEN TLMTHC{I}=MAX(1,INT(.5+(NMPMTC{I}*12/26))); MPRINT(IMOCONV): ELSE IF (PFREQ=4) THEN TLMTHC{I}=MAX(1,INT(.5+(NMPMTC{I}))); MPRINT(IMOCONV): ELSE IF (PFREQ=5) THEN TLMTHC{I}=MAX(1,INT(.5+(NMPMTC{I}*3))); MPRINT(IMOCONV): ELSE IF (PFREQ=6) THEN TLMTHC{I}=MAX(1,INT(.5+(NMPMTC{I}*12))); MPRINT(IMOCONV): ELSE IF (PFREQ=21) THEN TLMTHC{I}=MAX(1,INT(.5+(NMPMTC{I}*4))); MPRINT(IMOCONV): ELSE IF (PFREQ=20) THEN TLMTHC{I}=MAX(1,INT(.5+(NMPMTC{I}*12/10))); MPRINT(IMOCONV): ELSE IF (PFREQ=11) THEN TLMTHC{I}=NMPMTC{I}*6/(52/52); MPRINT(IMOCONV): ELSE IF (PFREQ=12) THEN TLMTHC{I}=NMPMTC{I}*2/(52/52); 582 The SAS System 13:32 Friday, January 29, 2021 MPRINT(IMOCONV): ELSE IF (PFREQ=31) THEN TLMTHC{I}=NMPMTC{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=14) THEN TLMTHC{I}=NMPMTC{I}/(2*(52/52)); MPRINT(IMOCONV): ELSE IF (PFREQ=18) THEN TLMTHC{I}=NMPMTC{I}*12/(40*52); MPRINT(IMOCONV): ELSE IF (PFREQ=0) THEN TLMTHC{I}=0; MPRINT(IMOCONV): ELSE IF (PFREQ>.Z) THEN DO; MPRINT(IMOCONV): TLMTHC{I}=NMPMTC{I}; MPRINT(IMOCONV): PUT "ERR CANNOT TRANSLATE PER FOR " Y1= NMPMTC{I}= PFREQ= TLMTHC{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTC{I}>.Z & NMPMTC{I}<-2) THEN DO; MPRINT(IMOCONV): TLMTHC{I}=NMPMTC{I}; MPRINT(IMOCONV): PUT "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= NMPMTC{I}= PFREQ= TLMTHC{I}=; MPRINT(IMOCONV): END; MPRINT(IMOCONV): ELSE IF (NMPMTC{I}=0) THEN TLMTHC{I}=0; MPRINT(IMOCONV): ELSE IF (NMPMTC{I}<=.Z) THEN TLMTHC{I}=NMPMTC{I}; MPRINT(IMOCONV): ELSE IF (NMPMTC{I}^=-1 & NMPMTC{I}^=-2) THEN DO; MPRINT(IMOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= PFREQ= NMPMTC{I}= "SETTING CAMT=."; MPRINT(IMOCONV): TLMTHC{I}=.; MPRINT(IMOCONV): END; MPRINT(TERMCON): ; MPRINT(TERMCON): END; MPRINT(TERMCON): IF (TLMTHC{I}>0) THEN DO; MPRINT(TERMCON): NMYRC{I}=MAX(1,INT(.5+(TLMTHC{I}/12))); MPRINT(TERMCON): TLMTHC{I}=MAX(1,ROUND(TLMTHC{I})); MPRINT(TERMCON): END; MPRINT(TERMCON): IF (NMYRC{I}=0) THEN DO; MPRINT(TERMCON): PUT "UNABLE TO CONVERT TERM " YY1= NMPMTC{I}= NMYRC{I}= TLMTHC{I}= REGPAYFC{I}= REGPAYC{I}= TYPAYFC{I}=; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TERMCON): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (REGPAYC{I} > 0) THEN DO; MPRINT(MOCONV): IF (REGPAYFC{I}=1) THEN CMOPAYC{I}=REGPAYC{I}*5*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFC{I}=2) THEN CMOPAYC{I}=REGPAYC{I}*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFC{I}=3) THEN CMOPAYC{I}=REGPAYC{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (REGPAYFC{I}=4) THEN CMOPAYC{I}=REGPAYC{I}; MPRINT(MOCONV): ELSE IF (REGPAYFC{I}=5) THEN CMOPAYC{I}=REGPAYC{I}/3; MPRINT(MOCONV): ELSE IF (REGPAYFC{I}=6) THEN CMOPAYC{I}=REGPAYC{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFC{I}=20) THEN CMOPAYC{I}=REGPAYC{I}*10/12; MPRINT(MOCONV): ELSE IF (REGPAYFC{I}=21) THEN CMOPAYC{I}=REGPAYC{I}*3/12; MPRINT(MOCONV): ELSE IF (REGPAYFC{I}=8) THEN CMOPAYC{I}=REGPAYC{I}/12; MPRINT(MOCONV): ELSE IF (REGPAYFC{I}=11) THEN CMOPAYC{I}=REGPAYC{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (REGPAYFC{I}=12) THEN CMOPAYC{I}=REGPAYC{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (REGPAYFC{I}=23) THEN CMOPAYC{I}=REGPAYC{I}*13/12; MPRINT(MOCONV): ELSE IF (REGPAYFC{I}=24) THEN CMOPAYC{I}=REGPAYC{I}*8.67/12; MPRINT(MOCONV): ELSE IF (REGPAYFC{I}=25) THEN CMOPAYC{I}=REGPAYC{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (REGPAYFC{I}=31) THEN CMOPAYC{I}=REGPAYC{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (REGPAYFC{I}=18) THEN CMOPAYC{I}=REGPAYC{I}*40*52/12; MPRINT(MOCONV): ELSE IF (REGPAYFC{I}=0) THEN CMOPAYC{I}=0; MPRINT(MOCONV): ELSE IF (REGPAYFC{I}>.Z & REGPAYFC{I}^=-1 & REGPAYFC{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYC{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= REGPAYC{I}= REGPAYFC{I}= CMOPAYC{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (REGPAYC{I}>.Z & REGPAYC{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYC{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= REGPAYC{I}= REGPAYFC{I}= CMOPAYC{I}=; MPRINT(MOCONV): END; 583 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): ELSE IF (REGPAYC{I}<=.Z) THEN CMOPAYC{I}=REGPAYC{I}; MPRINT(MOCONV): ELSE IF (REGPAYC{I}^=-1 & REGPAYC{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= REGPAYFC{I}= REGPAYC{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYC{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(MOCONV): IF (TYPAYFC{I}=1) THEN CMOPAYC{I}=TYPAYC{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFC{I}=2) THEN CMOPAYC{I}=TYPAYC{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFC{I}=3) THEN CMOPAYC{I}=TYPAYC{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYFC{I}=4) THEN CMOPAYC{I}=TYPAYC{I}; MPRINT(MOCONV): ELSE IF (TYPAYFC{I}=5) THEN CMOPAYC{I}=TYPAYC{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYFC{I}=6) THEN CMOPAYC{I}=TYPAYC{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFC{I}=20) THEN CMOPAYC{I}=TYPAYC{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYFC{I}=21) THEN CMOPAYC{I}=TYPAYC{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYFC{I}=8) THEN CMOPAYC{I}=TYPAYC{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYFC{I}=11) THEN CMOPAYC{I}=TYPAYC{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYFC{I}=12) THEN CMOPAYC{I}=TYPAYC{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYFC{I}=23) THEN CMOPAYC{I}=TYPAYC{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYFC{I}=24) THEN CMOPAYC{I}=TYPAYC{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYFC{I}=25) THEN CMOPAYC{I}=TYPAYC{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYFC{I}=31) THEN CMOPAYC{I}=TYPAYC{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYFC{I}=18) THEN CMOPAYC{I}=TYPAYC{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYFC{I}=0) THEN CMOPAYC{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYFC{I}>.Z & TYPAYFC{I}^=-1 & TYPAYFC{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYC{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYC{I}= TYPAYFC{I}= CMOPAYC{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYC{I}>.Z & TYPAYC{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYC{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYC{I}= TYPAYFC{I}= CMOPAYC{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYC{I}<=.Z) THEN CMOPAYC{I}=TYPAYC{I}; MPRINT(MOCONV): ELSE IF (TYPAYC{I}^=-1 & TYPAYC{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYFC{I}= TYPAYC{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYC{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF NMYRC{I} NOT IN (0 -1 -7) THEN DO; MPRINT(TAXSCF): PAYLFTC{I}=(TLMTHC{I}-((1989-LNSTYRC{I})*12)); MPRINT(TAXSCF): LNAGEC{I}=TLMTHC{I}-PAYLFTC{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE DO; MPRINT(TAXSCF): PAYLFTC{I}=0; MPRINT(TAXSCF): LNAGEC{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): DO I=1 TO DIM(HAVELNC); MPRINT(TAXSCF): IF (HAVELNC{I}=1) THEN DO; MPRINT(TAXSCF): QUALNC{I}=1; MPRINT(TAXSCF): QUALNPINEXC=QUALNPINEXC+QUALNC{I}; MPRINT(TAXSCF): IF (NMYRC{I} NOT IN(0 -1 -7) & INTRATEC{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHC{I} > 0 & CMOPAYC{I} > 0 & PAYLFTC{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): IF (CMOPAYC{I} < AMTBORRC{I}*.005) THEN CMOPAYC{I}=MAX(REGPAYC{I},TYPAYC{I}); MPRINT(TAXSCF): AMTOWEC{I}=CMOPAYC{I}*((1-1/(1+(INTRATEC{I}/10000)/12)**PAYLFTC{I})/ ((INTRATEC{I}/10000)/12)); 584 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): AMTOWE_1C{I}=CMOPAYC{I}*((1-1/(1+(INTRATEC{I}/10000)/12)**(PAYLFTC{I}+12))/ ((INTRATEC{I}/10000)/12)); MPRINT(TAXSCF): IF LNSTYRC{I}^=1989 THEN AINTEXPC{I}=(CMOPAYC{I}*12)-(AMTOWE_1C{I}-AMTOWEC{I}); MPRINT(TAXSCF): ELSE IF LNSTYRC{I}=1989 THEN AINTEXPC{I}=AMTOUTC{I}*(INTRATEC{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHC{I} < 0 | CMOPAYC{I} < 0 | PAYLFTC{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEC{I}=0; MPRINT(TAXSCF): AMTOWE_1C{I}=0; MPRINT(TAXSCF): AINTEXPC{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHC{I} > 0 & AMTBORRC{I} > 0 & LNAGEC{I} > 0) THEN DO; MPRINT(TAXSCF): CURBALC{I}=AMTBORRC{I}*(((1+(INTRATEC{I}/10000)/12)**TLMTHC{I})- ((1+(INTRATEC{I}/10000)/12)**(LNAGEC{I})))/ (((1+(INTRATEC{I}/10000)/12)**TLMTHC{I})-1); MPRINT(TAXSCF): CURBAL_1C{I}=AMTBORRC{I}*(((1+(INTRATEC{I}/10000)/12)**TLMTHC{I})- ((1+(INTRATEC{I}/10000)/12)**(LNAGEC{I}-12)))/ (((1+(INTRATEC{I}/10000)/12)**TLMTHC{I})-1); MPRINT(TAXSCF): CINTEXPC{I}=(CMOPAYC{I}*12)-(CURBAL_1C{I}-CURBALC{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHC{I} < 0 | AMTBORRC{I} < 0 | LNAGEC{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALC{I}=0; MPRINT(TAXSCF): CURBAL_1C{I}=0; MPRINT(TAXSCF): CINTEXPC{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUTC{I} > 0 & INTRATEC{I} > 0) THEN SINTEXPC{I}=AMTOUTC{I}*(INTRATEC{I}/10000); MPRINT(TAXSCF): ELSE SINTEXPC{I}=0; MPRINT(TAXSCF): * Also fixing cases where loan ends or starts in the survey year. Setting interest deduction 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, set the interest expense to zero; MPRINT(TAXSCF): IF (TLMTHC{I} > 0 & CMOPAYC{I} > 0 & PAYLFTC{I}=0) THEN DO; MPRINT(TAXSCF): CINTEXPC{I}=CURBAL_1C{I}*(INTRATEC{I}/10000); MPRINT(TAXSCF): AINTEXPC{I}=CINTEXPC{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHC{I} > 0 & CMOPAYC{I} > 0 & LNSTYRC{I}=1989) THEN DO; MPRINT(TAXSCF): CINTEXPC{I}=0; MPRINT(TAXSCF): AINTEXPC{I}=0; MPRINT(TAXSCF): SINTEXPC{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Ad hoc fix for negative personal interest deduction. 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.; MPRINT(TAXSCF): IF ((AINTEXPC{I} < 0 | CINTEXPC{I} < 0) & CURBALC{I} > 0 & CURBAL_1C{I} > 0) THEN DO; MPRINT(TAXSCF): CINTEXPC{I}=CURBAL_1C{I}*(INTRATEC{I}/10000); MPRINT(TAXSCF): AINTEXPC{I}=CINTEXPC{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTEXPC{I} < 0 | CINTEXPC{I} < 0) & (CURBALC{I} <= 0 & CURBAL_1C{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTEXPC{I}=SINTEXPC{I}; MPRINT(TAXSCF): AINTEXPC{I}=SINTEXPC{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTEXPC{I} > 0 & CINTEXPC{I} > 0) THEN DCTDIFFC{I}=CINTEXPC{I}-SINTEXPC{I}; MPRINT(TAXSCF): ELSE DCTDIFFC{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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 deduction.; MPRINT(TAXSCF): ELSE IF (NMYRC{I} IN(-1 -7) & NMPMTC{I} IN(-1 -7) & AMTOUTC{I} > 0 & INTRATEC{I} > 0) | (CMOPAYC{I} > 0 & INTRATEC{I} > 0 & TLMTHC{I}=0 & AMTOUTC{I} > 0) THEN DO; MPRINT(TAXSCF): SINTEXPC{I}=AMTOUTC{I}*(INTRATEC{I}/10000); MPRINT(TAXSCF): AINTEXPC{I}=SINTEXPC{I}; MPRINT(TAXSCF): CINTEXPC{I}=SINTEXPC{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEC{I}=-1) THEN DO; 585 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): AINTEXPC{I}=0; MPRINT(TAXSCF): CINTEXPC{I}=0; MPRINT(TAXSCF): SINTEXPC{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of personal interest deduction; MPRINT(TAXSCF): IF ((CINTEXPC{I} + AINTEXPC{I} + SINTEXPC{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTEXPC{I}=(CINTEXPC{I}+AINTEXPC{I}+SINTEXPC{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTEXPC{I}=0; MPRINT(TAXSCF): * Constraining personal interest deduction amount to be no more than the reported year loan payment - using avintdedct as prefered personal 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.; MPRINT(TAXSCF): IF (AVINTEXPC{I} > 0 & CMOPAYC{I} > 0 & (AVINTEXPC{I} > CMOPAYC{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTEXPC{I}=CMOPAYC{I}*12; MPRINT(TAXSCF): CINTEXPC{I}=AVINTEXPC{I}; MPRINT(TAXSCF): AINTEXPC{I}=AVINTEXPC{I}; MPRINT(TAXSCF): SINTEXPC{I}=AVINTEXPC{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AVINTEXPC{I} > 0 & AMTOUTC{I} > 0 & (AVINTEXPC{I} > .25*AMTOUTC{I})) THEN DO; MPRINT(TAXSCF): AVINTEXPC{I}=AMTOUTC{I}*(INTRATEC{I}/10000); MPRINT(TAXSCF): CINTEXPC{I}=AVINTEXPC{I}; MPRINT(TAXSCF): AINTEXPC{I}=AVINTEXPC{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (Y1=YY1*10+1 & AVINTEXPC{I} > .25*AMTOUTC{I}) THEN PUT "DEDUCTION LARGER THAN 25% OF BALANCE OUTSTANDING " Y1= NMPMTC{I}= NMYRC{I}= TLMTHC{I}= REGPAYFC{I}= REGPAYC{I}= CMOPAYC{I}= TYPAYC{I}= TYPAYFC{I}= LNSTYRC{I}= PAYLFTC{I}= LNAGEC{I}= AMTOUTC{I}= JAMTOUTC{I}= AMTOWEC{I}= AMTOWE_1C{I}= AINTEXPC{I}= CURBALC{I}= CURBAL_1C{I}= CINTEXPC{I}= DCTDIFFC{I}= SINTEXPC{I}= AVINTEXPC{I}= INTRATEC{I}= AMTBORRC{I}= JAMTBORRC{I}= /; MPRINT(TAXSCF): * Compute car/vehicle/HI personal interest deduction; MPRINT(TAXSCF): TOTLNPINEXC=TOTLNPINEXC+AVINTEXPC{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Non-HELOC lines of credit, using same code as for LOCs deductible under investment interest expense; MPRINT(TAXSCF): TOTLOCPINEX=0; MPRINT(TAXSCF): IF (X1101=1) THEN DO; MPRINT(TAXSCF): DO I=1 TO DIM(SBYHOME); MPRINT(TAXSCF): IF (SBYHOME{I}=5 & DOOWE{I}=1 & LNPURP{I} NOT IN(76 78 79)) THEN DO; MPRINT(TAXSCF): IF (TYPAYL{I} > 0) THEN DO; MPRINT(MOCONV): IF (TYPAYLF{I}=1) THEN CMOPAYL{I}=TYPAYL{I}*5*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=2) THEN CMOPAYL{I}=TYPAYL{I}*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=3) THEN CMOPAYL{I}=TYPAYL{I}*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=4) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=5) THEN CMOPAYL{I}=TYPAYL{I}/3; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=6) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=20) THEN CMOPAYL{I}=TYPAYL{I}*10/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=21) THEN CMOPAYL{I}=TYPAYL{I}*3/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=8) THEN CMOPAYL{I}=TYPAYL{I}/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=11) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/6; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=12) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=23) THEN CMOPAYL{I}=TYPAYL{I}*13/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=24) THEN CMOPAYL{I}=TYPAYL{I}*8.67/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=25) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)/24; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=31) THEN CMOPAYL{I}=TYPAYL{I}*(52/52)*2; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=18) THEN CMOPAYL{I}=TYPAYL{I}*40*52/12; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}=0) THEN CMOPAYL{I}=0; MPRINT(MOCONV): ELSE IF (TYPAYLF{I}>.Z & TYPAYLF{I}^=-1 & TYPAYLF{I}^=-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; 586 The SAS System 13:32 Friday, January 29, 2021 MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}>.Z & TYPAYL{I}<-2) THEN DO; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= TYPAYL{I}= TYPAYLF{I}= CMOPAYL{I}=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (TYPAYL{I}<=.Z) THEN CMOPAYL{I}=TYPAYL{I}; MPRINT(MOCONV): ELSE IF (TYPAYL{I}^=-1 & TYPAYL{I}^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= TYPAYLF{I}= TYPAYL{I}= "SETTING AMT=."; MPRINT(MOCONV): CMOPAYL{I}=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TYPAYL{I} IN(0 -1 -2)) THEN DO; MPRINT(TAXSCF): CMOPAYL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (INTRATEL{I} > 0) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=((INTRATEL{I}/10000)*AMTOUTL{I}); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEL{I} IN(0 -1)) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTDCTL{I} > 0 & CMOPAYL{I} > 0 & SINTDCTL{I} > CMOPAYL{I}*12) THEN DO; MPRINT(TAXSCF): SINTDCTL{I}=CMOPAYL{I}*12; MPRINT(TAXSCF): END; MPRINT(TAXSCF): TOTLOCPINEX=TOTLOCPINEX+SINTDCTL{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Other consumer loans, using the code for other loans from the investment interest expense computations; MPRINT(TAXSCF): QUALNPINEXI=0; MPRINT(TAXSCF): TOTLNPINEXI=0; MPRINT(TAXSCF): DO I=1 TO MIN(6,X2709); MPRINT(TAXSCF): IF (LNTYPE{I} NOT IN(76 78 79)) THEN DO; MPRINT(TAXSCF): * indicator and counter of qualified loans; MPRINT(TAXSCF): QUALN{I}=1; MPRINT(TAXSCF): QUALNPINEXI=QUALNPINEXI+QUALN{I}; MPRINT(TAXSCF): IF (NMYRI{I} NOT IN(0 -1 -7) & INTRATEI{I}^=-1) THEN DO; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & PAYLFTI{I} > 0) THEN DO; MPRINT(TAXSCF): * a fix for payments reported as yearly that appear to be monthly; MPRINT(TAXSCF): IF (CMOPAYI{I} < AMTBORRI{I}*.005) THEN CMOPAYI{I}=MAX(REGPAYI{I},TYPAYI{I}); MPRINT(TAXSCF): AMTOWEI{I}=CMOPAYI{I}*((1-1/(1+(INTRATEI{I}/10000)/12)**PAYLFTI{I})/ ((INTRATEI{I}/10000)/12)); MPRINT(TAXSCF): AMTOWE_1I{I}=CMOPAYI{I}*((1-1/(1+(INTRATEI{I}/10000)/12)**(PAYLFTI{I}+12))/ ((INTRATEI{I}/10000)/12)); MPRINT(TAXSCF): IF LNSTYRI{I}^=1989 THEN AINTEXPI{I}=(CMOPAYI{I}*12)-(AMTOWE_1I{I}-AMTOWEI{I}); MPRINT(TAXSCF): ELSE IF LNSTYRI{I}=1989 THEN AINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (TLMTHI{I} < 0 | CMOPAYI{I} < 0 | PAYLFTI{I} < 0) THEN DO; MPRINT(TAXSCF): AMTOWEI{I}=0; MPRINT(TAXSCF): AMTOWE_1I{I}=0; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & AMTBORRI{I} > 0 & LNAGEI{I} > 0) THEN DO; MPRINT(TAXSCF): 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); MPRINT(TAXSCF): 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); MPRINT(TAXSCF): CINTEXPI{I}=(CMOPAYI{I}*12)-(CURBAL_1I{I}-CURBALI{I}); MPRINT(TAXSCF): END; 587 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): ELSE IF (TLMTHI{I} < 0 | AMTBORRI{I} < 0 | LNAGEI{I} < 0) THEN DO; MPRINT(TAXSCF): CURBALI{I}=0; MPRINT(TAXSCF): CURBAL_1I{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AMTOUTI{I} > 0 & INTRATEI{I} > 0) THEN SINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): ELSE SINTEXPI{I}=0; MPRINT(TAXSCF): * Also fixing cases where loan ends or starts in the survey year. Setting interest deduction 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, set the interest expense to zero; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & PAYLFTI{I}=0) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=CURBAL_1I{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=CINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (TLMTHI{I} > 0 & CMOPAYI{I} > 0 & LNSTYRI{I}=1989) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Ad hoc fix for negative personal interest deduction. 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.; MPRINT(TAXSCF): IF ((AINTEXPI{I} < 0 | CINTEXPI{I} < 0) & CURBALI{I} > 0 & CURBAL_1I{I} > 0) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=CURBAL_1I{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=CINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((AINTEXPI{I} < 0 | CINTEXPI{I} < 0) & (CURBALI{I} <= 0 & CURBAL_1I{I} <= 0)) THEN DO; MPRINT(TAXSCF): CINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (SINTEXPI{I} > 0 & CINTEXPI{I} > 0) THEN DCTDIFFI{I}=CINTEXPI{I}-SINTEXPI{I}; MPRINT(TAXSCF): ELSE DCTDIFFI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * 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 deduction.; MPRINT(TAXSCF): 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; MPRINT(TAXSCF): SINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): AINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): CINTEXPI{I}=SINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (INTRATEI{I}=-1) THEN DO; MPRINT(TAXSCF): AINTEXPI{I}=0; MPRINT(TAXSCF): CINTEXPI{I}=0; MPRINT(TAXSCF): SINTEXPI{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Averaging across the three measures of personal interest deduction; MPRINT(TAXSCF): IF ((CINTEXPI{I} + AINTEXPI{I} + SINTEXPI{I}) > 0) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=(CINTEXPI{I}+AINTEXPI{I}+SINTEXPI{I})/3; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE AVINTEXPI{I}=0; MPRINT(TAXSCF): * Constraining personal interest deduction amount to be no more than the reported year loan payment - using avintdedct as prefered personal 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.; MPRINT(TAXSCF): IF (AVINTEXPI{I} > 0 & CMOPAYI{I} > 0 & (AVINTEXPI{I} > CMOPAYI{I}*12)) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=CMOPAYI{I}*12; MPRINT(TAXSCF): CINTEXPI{I}=AVINTEXPI{I}; 588 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): AINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): SINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF (AVINTEXPI{I} > 0 & AMTOUTI{I} > 0 & (AVINTEXPI{I} > .25*AMTOUTI{I})) THEN DO; MPRINT(TAXSCF): AVINTEXPI{I}=AMTOUTI{I}*(INTRATEI{I}/10000); MPRINT(TAXSCF): CINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): AINTEXPI{I}=AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): 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}= LNTYPE{I}= /; MPRINT(TAXSCF): * Compute other loans personal interest deduction; MPRINT(TAXSCF): TOTLNPINEXI=TOTLNPINEXI+AVINTEXPI{I}; MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Loans against whole life insurance policies - these loans must not be recorded elsewhere in the data. Check that interest deduction is not greater than yearly payment on the loan. If it is, then deduction amount equals the annual payment; MPRINT(TAXSCF): LIFEINSINEX=0; MPRINT(TAXSCF): LIPAYM=0; MPRINT(TAXSCF): IF (X4001=1 & X4004=1 & X4007=1 & X4009=5) THEN DO; MPRINT(TAXSCF): LIFEINSINEX=MAX(0,(X4010)*(X4013/10000)); MPRINT(MOCONV): IF (X4012=1) THEN LIPAYM=X4011*5*52/12; MPRINT(MOCONV): ELSE IF (X4012=2) THEN LIPAYM=X4011*52/12; MPRINT(MOCONV): ELSE IF (X4012=3) THEN LIPAYM=X4011*26*(52/52)/12; MPRINT(MOCONV): ELSE IF (X4012=4) THEN LIPAYM=X4011; MPRINT(MOCONV): ELSE IF (X4012=5) THEN LIPAYM=X4011/3; MPRINT(MOCONV): ELSE IF (X4012=6) THEN LIPAYM=X4011/12; MPRINT(MOCONV): ELSE IF (X4012=20) THEN LIPAYM=X4011*10/12; MPRINT(MOCONV): ELSE IF (X4012=21) THEN LIPAYM=X4011*3/12; MPRINT(MOCONV): ELSE IF (X4012=8) THEN LIPAYM=X4011/12; MPRINT(MOCONV): ELSE IF (X4012=11) THEN LIPAYM=X4011*(52/52)/6; MPRINT(MOCONV): ELSE IF (X4012=12) THEN LIPAYM=X4011*(52/52)/2; MPRINT(MOCONV): ELSE IF (X4012=23) THEN LIPAYM=X4011*13/12; MPRINT(MOCONV): ELSE IF (X4012=24) THEN LIPAYM=X4011*8.67/12; MPRINT(MOCONV): ELSE IF (X4012=25) THEN LIPAYM=X4011*(52/52)/24; MPRINT(MOCONV): ELSE IF (X4012=31) THEN LIPAYM=X4011*(52/52)*2; MPRINT(MOCONV): ELSE IF (X4012=18) THEN LIPAYM=X4011*40*52/12; MPRINT(MOCONV): ELSE IF (X4012=0) THEN LIPAYM=0; MPRINT(MOCONV): ELSE IF (X4012>.Z & X4012^=-1 & X4012^=-2) THEN DO; MPRINT(MOCONV): LIPAYM=.; MPRINT(MOCONV): PUT / "ERR CANNOT TRANSLATE PER FOR " Y1= X4011= X4012= LIPAYM=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (X4011>.Z & X4011<-2) THEN DO; MPRINT(MOCONV): LIPAYM=.; MPRINT(MOCONV): PUT / "ERR AMOUNT NEGATIVE, CANNOT TRANSLATE " Y1= X4011= X4012= LIPAYM=; MPRINT(MOCONV): END; MPRINT(MOCONV): ELSE IF (X4011<=.Z) THEN LIPAYM=X4011; MPRINT(MOCONV): ELSE IF (X4011^=-1 & X4011^=-2) THEN DO; MPRINT(MOCONV): PUT "VALUE NOT CONVERTED FOR " Y1= X4012= X4011= "SETTING AMT=."; MPRINT(MOCONV): LIPAYM=.; MPRINT(MOCONV): END; MPRINT(TAXSCF): ; MPRINT(TAXSCF): IF (LIPAYM > 0) & (LIFEINSINEX > (LIPAYM*12)) THEN LIFEINSINEX=(LIPAYM*12); MPRINT(TAXSCF): END; MPRINT(TAXSCF): * Total personal interest deduction, only 40% is deductible; MPRINT(TAXSCF): TOTPINEX=MAX(0,(CCPINEX+TOTLNPINEXC+TOTLOCPINEX+TOTLNPINEXI+LIFEINSINEX))*.4; 589 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): UNADJTOTPINEX=MAX(0,(CCPINEX+TOTLNPINEXC+TOTLOCPINEX+TOTLNPINEXI+LIFEINSINEX)); MPRINT(TAXSCF): **************Charitable Contributions; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): GCHARITY=(X5822=1); MPRINT(TAXSCF): CHARITYAMT=0; MPRINT(TAXSCF): IF (X5822=1 & X5823 > 0) THEN DO; MPRINT(TAXSCF): IF (X5823 > .5*AGI) & (AGI>0) THEN CHARITYAMT=.5*AGI; MPRINT(TAXSCF): ELSE CHARITYAMT=X5823; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF X5822=1 & X5823 > 0 & AGI < 0 & Y1=YY1*10+1 THEN PUT "NEGATIVE AGI BUT CHARITYAMT > 0 " Y1= X5823= CHARITYAMT= X5744= X5746= AGI=; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ITEMDEDCT_FLAG=0 THEN DO; MPRINT(TAXSCF): ADJDEDCT=0; MPRINT(TAXSCF): RESTAXM1=0; MPRINT(TAXSCF): TOTINVEX=0; MPRINT(TAXSCF): CHARITYAMT=0; MPRINT(TAXSCF): TOTPINEX=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): **********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.; MPRINT(TAXSCF): TOTITEMDCT=0; MPRINT(TAXSCF): * no limits on itemized deductions in 1988, 2012 and 2018; MPRINT(TAXSCF): * starting in 2015, itemized deduction phaseout limit for AGI are the same as for personal exemptions, so using EXLIM1-4 in this code; MPRINT(TAXSCF): TOTITEMDCT=MAX(0,(ADJDEDCT+RESTAXM1+TOTINVEX+TOTPINEX+CHARITYAMT)); MPRINT(TAXSCF): DEDCTLIM=0; MPRINT(TAXSCF): * NOTE: Change in worksheet for 2006; MPRINT(TAXSCF): * no limits on exemptions in 1988 and 2012, no exemptions in 2018; MPRINT(TAXSCF): TOTEXPTAMT=0; MPRINT(TAXSCF): EXPTLIM=0; MPRINT(TAXSCF): TOTEXPTAMT=TOTEXPT*1950; MPRINT(TAXSCF): * Standard deduction by filing status, including addition deduction amount for over 65, dont have any info on blindness. Also compute number of age exemptions and flag nonfilers based on IRS filing thresholds and a few other assumptions. Nonfilers also cannot have negative AGI, losses from business or capital gains or more than 1/3 of the lowest filing threshold, which is married, filing separately; MPRINT(TAXSCF): BUSRENTCAPLOSS=(TBUSINC < 0 | RENTINC < 0 | CAPGLINC < 0); MPRINT(TAXSCF): HWSINCSE=(WSINCOME >= (.33*1950) | WSINCSP >= (.33*1950) | TBUSINC >= (.33*1950)); MPRINT(TAXSCF): STDDCT=0; MPRINT(TAXSCF): IF (FILESTAT=1 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=3000; MPRINT(TAXSCF): NONFILER=(0 < AGI < 4950)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=1 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=3750; MPRINT(TAXSCF): NONFILER=(0 < AGI < 5700)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=2 & TUAGE < 65 & SPAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=5000; MPRINT(TAXSCF): NONFILER=(0 < AGI < 8900)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=2 & TUAGE >= 65 & SPAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=6200; MPRINT(TAXSCF): NONFILER=(0 < AGI < 10100)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); 590 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=2 & (TUAGE >= 65 | SPAGE >= 65)) THEN DO; MPRINT(TAXSCF): STDDCT=5600; MPRINT(TAXSCF): NONFILER=(0 < AGI < 9500)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=5000/2; MPRINT(TAXSCF): NONFILER=(AGI < 1950)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=3 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=6200/2; MPRINT(TAXSCF): NONFILER=(AGI < 1950)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=4 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=4400; MPRINT(TAXSCF): NONFILER=(0 < AGI < 6350)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=4 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=5150; MPRINT(TAXSCF): NONFILER=(0 < AGI < 7100)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=5 & TUAGE < 65) THEN DO; MPRINT(TAXSCF): STDDCT=5000; MPRINT(TAXSCF): NONFILER=(AGI < 7850)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (FILESTAT=5 & TUAGE >= 65) THEN DO; MPRINT(TAXSCF): STDDCT=5600; MPRINT(TAXSCF): NONFILER=(0 < AGI < 8500)*(BUSRENTCAPLOSS=0 & HWSINCSE=0); MPRINT(TAXSCF): END; MPRINT(TAXSCF): AGEXMP=(TUAGE > 65) + (SPAGE > 65)*(FILESTAT=2); MPRINT(TAXSCF): * Did the hh itemize; MPRINT(TAXSCF): * No itemization question in 1989 or 1992, so itemize will be zero; MPRINT(TAXSCF): ITEMIZE=(TAXUNIT=0)*(X7367=1 | X7368=1 | X7369=1)+(TAXUNIT=1)*(X7368=1)+(TAXUNIT=2)*(X7369=1); MPRINT(TAXSCF): CITEMIZE=(TOTITEMDCT => STDDCT); MPRINT(TAXSCF): * Construct other variables needed for TAXSIM; MPRINT(TAXSCF): TAXUNITID=Y1*100+TAXUNIT; MPRINT(TAXSCF): YEAR=1988; MPRINT(TAXSCF): AGECL=1*(TUAGE < 26)+2*(26<=TUAGE<35)+3*(35<=TUAGE<45) +4*(45<=TUAGE<55)+5*(55<=TUAGE<65)+6*(TUAGE>=65); MPRINT(TAXSCF): * 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).; MPRINT(TAXSCF): STCAPINC=0; MPRINT(TAXSCF): LTCAPINC=0; MPRINT(TAXSCF): IF (AGICL IN(1)) THEN DO; MPRINT(TAXSCF): IF (CAPGLINC > 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.91; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.91); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (CAPGLINC < 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.68; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.68); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AGICL IN(2)) THEN DO; MPRINT(TAXSCF): IF (CAPGLINC > 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.92; 591 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.92); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (CAPGLINC < 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.63; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.63); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (AGICL IN(3)) THEN DO; MPRINT(TAXSCF): IF (CAPGLINC > 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.93; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.93); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (CAPGLINC < 0) THEN DO; MPRINT(TAXSCF): LTCAPINC=CAPGLINC*.58; MPRINT(TAXSCF): STCAPINC=CAPGLINC*(1-.58); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ARRAY NEG_1 {*} TBUSINC OTHINC RENTINC OTHPINC; MPRINT(TAXSCF): DO I=1 TO DIM(NEG_1); MPRINT(TAXSCF): IF NEG_1{I}=-1 THEN NEG_1{I}=0; MPRINT(TAXSCF): END; MPRINT(TAXSCF): UNADJTOTDEDCT=MAX(0,(ADJDEDCT+TOTINVEX+CHARITYAMT)); MPRINT(TAXSCF): CHCAREXP=0; MPRINT(TAXSCF): TINCOME=WSINCOME+WSINCSP+TBUSINC+INTINC+NTAXINC+DIVINC+CAPGLINC+RENTINC +UNEMPINC+GSSINC+PENINC+AFDCINC+OTHINC; MPRINT(TAXSCF): TOTXINC=WSINCOME+WSINCSP+TBUSINC+INTINC+DIVINC+CAPGLINC+RENTINC +UNEMPINC+GSSINC+PENINC+OTHINC; MPRINT(TAXSCF): *set 3000 max loss for capital gains for comparison with IRS estimates; MPRINT(TAXSCF): IF CAPGLINC < -3000 THEN CAPGL3K=-3000; MPRINT(TAXSCF): ELSE CAPGL3K=CAPGLINC; MPRINT(TAXSCF): * 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.; MPRINT(TAXSCF): IF (TOTXINC=0 & TINCOME > 0 & AFDCINC=0 & NTAXINC=0 & TAXUNIT < 3 & Y1=YY1*10+1) THEN PUT "TOTXINC IS ZERO BUT TINCOME > 0 " YY1= Y1= TOTXINC= TINCOME= WSINCOME= WSINCSP= TBUSINC= INTINC= NTAXINC= DIVINC= RENTINC= UNEMPINC= AFDCINC= GSSINC= PENINC= OTHINC= CAPGLINC= RAGE= SPAGE= FILESTAT= TAXUNIT= X4100= X4700=/; MPRINT(TAXSCF): * Adding in payroll tax liability and mtr, assuming employee pays both employee and employer share, and 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 earning 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 tax year, 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 caculate the payroll liability and mtr. Computing the payroll atr in a similar fashion. NOTE: Need to adjust for different amounts used to compute the mtr, initially computing payroll mtr for adding $1 to earnings.; MPRINT(TAXSCF): * Need to adjust for 1988, 2% credit for SE, in 1991, limit on medicare tax; MPRINT(TAXSCF): ** earnings from wages and businesses for head and spouse/parnter; MPRINT(TAXSCF): REARN=R_LABORINC+R_BUSINC; MPRINT(TAXSCF): SPEARN=SP_LABORINC+SP_BUSINC; MPRINT(TAXSCF): HHEARN=REARN+SPEARN; MPRINT(TAXSCF): TWSINC=WSINCOME+WSINCSP; MPRINT(TAXSCF): PAYROLLIAB=0; MPRINT(TAXSCF): PAYROLLMTR=0; MPRINT(TAXSCF): PAYROLLATR=0; MPRINT(TAXSCF): IF TAXUNIT=0 THEN DO; MPRINT(TAXSCF): IF (X4106 IN(1 2 3 4 -7) & X4706=0) | (X4106=0 & X4706 IN(1 2 3 4 -7)) | (X4106=0 & X4706=0 & X102=0 592 The SAS System 13:32 Friday, January 29, 2021 & (TWSINC > 0 | TBUSINC > 0)) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(45000,(TWSINC+TBUSINC*(TBUSINC >0)))*.1502*(R_SOLEPROP=0)+ MIN(45000,(TWSINC+TBUSINC*(TBUSINC >0)))*(.1502-.02)*(R_SOLEPROP=1); MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC > 0)+1) <=45000)*(100*.1502)*(R_SOLEPROP=0)+ ((TWSINC+TBUSINC*(TBUSINC > 0)+1) <=45000)*(100*(.1502-.02))*(R_SOLEPROP=1)); MPRINT(TAXSCF): IF (PAYROLLIAB >0) THEN PAYROLLATR=100*(PAYROLLIAB/(TWSINC+TBUSINC*(TBUSINC > 0))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X4106 IN(1 2 3 4 -7) & X4706 IN(1 2 3 4 -7)) THEN DO; MPRINT(TAXSCF): IF (X4115 >=1 & X4715 >=1 & HHEARN > 0) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(45000,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*.1502*(R_SOLEPROP=0)+ MIN(45000,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*(.1502-.02)*(R_SOLEPROP=1)+ MIN(45000,((TWSINC+TBUSINC*(TBUSINC >0))*(SPEARN/HHEARN)))*.1502*(SP_SOLEPROP=0) + MIN(45000,((TWSINC+TBUSINC*(TBUSINC >0))*(SPEARN/HHEARN)))*(.1502-.02)*(SP_SOLEPROP=1); MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(REARN/HHEARN) <=45000)*(100*.1502)*(R_SOLEPROP=0)+ ((TWSINC+TBUSINC*(TBUSINC >0)+1)*(REARN/HHEARN) <=45000)*(100*(.1502-.02))*(R_SOLEPROP=1)); MPRINT(TAXSCF): PAYROLLATR=100*((MIN(45000,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*.1502*(R_SOLEPROP=0)+ (MIN(45000,((TWSINC+TBUSINC*(TBUSINC>0))*(REARN/HHEARN)))*(.1502-.02)*(R_SOLEPROP=1)))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X4115 =-1 & X4715=-1) | (X4115 >=1 & X4715=-1) | (X4115=-1 & X4715 >=1) | (HHEARN=0) THEN DO; MPRINT(TAXSCF): IF ((TWSINC+TBUSINC*(TBUSINC >0)) <= 45000) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=(TWSINC+TBUSINC*(TBUSINC >0))*.1502*(R_SOLEPROP=0 & SP_SOLEPROP=0)+(TWSINC+TBUSINC*(TBUSINC >0))*(.1502-.02)*(R_SOLEPROP=1 | SP_SOLEPROP=1); MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF ((TWSINC+TBUSINC*(TBUSINC >0)) > 45000) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(2*45000,((TWSINC+TBUSINC*(TBUSINC >0))))*.1502*(R_SOLEPROP=0 & SP_SOLEPROP=0)+MIN(2*45000,((TWSINC+TBUSINC*(TBUSINC >0))))*(.1502-.02)*(R_SOLEPROP=1 | SP_SOLEPROP=1); MPRINT(TAXSCF): END; MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(.5) <= 45000)*(100*.1502)*(R_SOLEPROP=0 & SP_SOLEPROP=0)+((TWSINC+TBUSINC*(TBUSINC >0)+1)*(.5) <= 45000)*(100*(.1502-.02))*(R_SOLEPROP=1 | SP_SOLEPROP=1)); MPRINT(TAXSCF): IF (PAYROLLIAB*.5 > 0) THEN PAYROLLATR=100*((PAYROLLIAB*.5)/((TWSINC+TBUSINC*(TBUSINC >0))*(.5))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF (X4106=0 & X4706=0 & X102^=0 & (TWSINC > 0 | TBUSINC > 0)) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=2*(MIN(45000,((TWSINC+TBUSINC*(TBUSINC>0))*(.5)))*.1502*(R_SOLEPROP=0 & SP_SOLEPROP=0)+ MIN(45000,((TWSINC+TBUSINC*(TBUSINC>0))*(.5)))*(.1502-.02)*(R_SOLEPROP=1 | SP_SOLEPROP=1)); MPRINT(TAXSCF): PAYROLLMTR=(((TWSINC+TBUSINC*(TBUSINC >0)+1)*(.5) <=45000)*(100*.1502)*(R_SOLEPROP=0 & SP_SOLEPROP=0)+ ((TWSINC+TBUSINC*(TBUSINC >0)+1)*(.5) <=45000)*(100*(.1502-.02))*(R_SOLEPROP=1 | SP_SOLEPROP=1)); MPRINT(TAXSCF): IF (PAYROLLIAB*.5 > 0) THEN PAYROLLATR=100*((PAYROLLIAB*.5)/((TWSINC+TBUSINC*(TBUSINC >0))*(.5))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): ELSE IF TAXUNIT >= 1 THEN DO; MPRINT(TAXSCF): SOLEPROP=(R_SOLEPROP=1 & TAXUNIT=1)+(SP_SOLEPROP=1 & TAXUNIT=2); MPRINT(TAXSCF): IF (WSINCOME > 0 | TBUSINC > 0) THEN DO; MPRINT(TAXSCF): PAYROLLIAB=MIN(45000,(WSINCOME+TBUSINC*(TBUSINC >0)))*.1502*(SOLEPROP=0)+ MIN(45000,(WSINCOME+TBUSINC*(TBUSINC>0)))*(.1502-.02)*(SOLEPROP=1); MPRINT(TAXSCF): PAYROLLMTR=(((WSINCOME+TBUSINC*(TBUSINC > 0)+1)<=45000)*(100*.1502)*(SOLEPROP=0)+ ((WSINCOME+TBUSINC*(TBUSINC >0)+1)<=45000)*(100*(.1502-.02))*(SOLEPROP=1)); MPRINT(TAXSCF): IF (PAYROLLIAB >0) THEN PAYROLLATR=100*(PAYROLLIAB/(WSINCOME+TBUSINC*(TBUSINC > 0))); MPRINT(TAXSCF): END; MPRINT(TAXSCF): END; MPRINT(TAXSCF): IF PAYROLLIAB=0 & PAYROLLMTR=0 & PAYROLLATR=0 & (TWSINC > 0 | TBUSINC > 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= TWSINC= TBUSINC= R_LABORINC= R_BUSINC= R_SOLEPROP= SP_LABORINC= SP_BUSINC= SP_SOLEPROP= REARN= SPEARN= HHEARN= TAXUNIT=/; MPRINT(TAXSCF): * Check for missing variables; MPRINT(TAXSCF): ARRAY CHVARS {*} YY1 Y1 CHARITYAMT X5823 TOTITEMDCT STDDCT AGI AGICL AGIGE50K DEDCTLIM X7372 X7018 X8023 X105 PERSEXP KIDS TOTEXPT FILESTAT TOTEXPTAMT EXPTLIM RAGE SPAGE TUAGE YEAR STATE TAXUNIT WSINCOME WSINCSP TBUSINC NTAXINC INTINC DIVINC CAPGLINC RENTINC UNEMPINC CHSPALINC AFDCINC PENINC OTHINC GSSINC OTHPINC NONTAX RENT 593 The SAS System 13:32 Friday, January 29, 2021 UNADJTOTDEDCT CHCAREXP TINCOME TOTXINC STCAPINC LTCAPINC PAYROLLIAB PAYROLLMTR PAYROLLATR LWP KIDSU17 KIDSU18 KIDSU13; MPRINT(TAXSCF): DO I=1 TO DIM(CHVARS); MPRINT(TAXSCF): IF CHVARS{I}=. THEN PUT "MISSING VALUE FOR " Y1= CHVARS{I}=; MPRINT(TAXSCF): END; MPRINT(TAXSCF): RUN; NOTE: The file "null.txt" is: Filename=/disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/code/null.txt, Owner Name=taxsim,Group Name=taxsim, Access Permission=-rw-r--r--, Last Modified=29Jan2021:13:36:31 NOTE: 758 records were written to the file "null.txt". The minimum record length was 0. The maximum record length was 382. NOTE: Missing values were generated as a result of performing an operation on missing values. Each place is given by: (Number of times) at (Line):(Column). 10 at 3930:43 5 at 3930:187 NOTE: There were 19120 observations read from the data set WORK.SCF. NOTE: The data set WORK.SCF has 19120 observations and 3996 variables. NOTE: DATA statement used (Total process time): real time 0.49 seconds cpu time 0.49 seconds MPRINT(TAXSCF): * Create a dataset for full TAXSIM. Breaking out total itemized deductions into its parts - have applied the limits for the mortgage interest deduction and investment interest expense, but not for charitable contributions.; MPRINT(TAXSCF): PROC SORT DATA=SCF; MPRINT(TAXSCF): BY TAXUNITID; MPRINT(TAXSCF): RUN; NOTE: There were 19120 observations read from the data set WORK.SCF. NOTE: The data set WORK.SCF has 19120 observations and 3996 variables. NOTE: PROCEDURE SORT used (Total process time): real time 0.24 seconds cpu time 0.24 seconds MPRINT(TAXSCF): proc means; MPRINT(TAXSCF): var y1 yy1 year year; MPRINT(TAXSCF): run; NOTE: There were 19120 observations read from the data set WORK.SCF. NOTE: The PROCEDURE MEANS printed page 1128. NOTE: PROCEDURE MEANS used (Total process time): real time 0.03 seconds cpu time 0.03 seconds MPRINT(TAXSCF): * Rename variables to TAXSIM names, use lowercase for TAXSIM file names; MPRINT(TAXSCF): libname swt "../swt/sas"; NOTE: Libref SWT was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/swt/sas MPRINT(TAXSCF): DATA swt.swt89; MPRINT(TAXSCF): SET SCF; MPRINT(TAXSCF): rep=mod(y1,10); 594 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): * IF FILESTAT > 0; MPRINT(TAXSCF): mstat=1*(FILESTAT IN(1 4))+2*(FILESTAT IN(2 5))+6*(FILESTAT IN(3)); MPRINT(TAXSCF): otherprop=RENTINC+TBUSINC; MPRINT(TAXSCF): nonprop=CHSPALINC+OTHINC; MPRINT(TAXSCF): otheritem=TOTINVEX+TOTPINEX; MPRINT(TAXSCF): mortgage=ADJDEDCT+X5823; MPRINT(TAXSCF): scorp=0; MPRINT(TAXSCF): pbusinc=0; MPRINT(TAXSCF): pprofinc=0; MPRINT(TAXSCF): sbusinc=0; MPRINT(TAXSCF): sprofinc=0; MPRINT(TAXSCF): tyear=YEAR; MPRINT(TAXSCF): tstate=STATE; MPRINT(TAXSCF): * set idtl=2 to get detailed output from TAXSIM; MPRINT(TAXSCF): idtl=2; MPRINT(TAXSCF): DROP STATE; MPRINT(TAXSCF): RENAME TAXUNITID=taxsimid TUAGE=page SPAGE=sage KIDS=depx KIDSU13=dep13 KIDSU17=dep17 KIDSU18=dep18 WSINCOME=pwages WSINCSP=swages DIVINC=dividends INTINC=intrec STCAPINC=stcg LTCAPINC=ltcg PENINC=pensions GSSINC=gssi UNEMPINC=ui AFDCINC=transfers RENT=rentpaid RESTAXM1=proptax CHCAREXP=childcare tyear=year; MPRINT(TAXSCF): RUN; WARNING: Variable tyear cannot be renamed to year because year already exists. NOTE: There were 19120 observations read from the data set WORK.SCF. NOTE: The data set SWT.SWT89 has 19120 observations and 4009 variables. NOTE: DATA statement used (Total process time): real time 3.42 seconds cpu time 0.45 seconds MPRINT(TAXSCF): proc means; MPRINT(TAXSCF): var y1 yy1 year; MPRINT(TAXSCF): run; NOTE: There were 19120 observations read from the data set SWT.SWT89. NOTE: The PROCEDURE MEANS printed page 1129. NOTE: PROCEDURE MEANS used (Total process time): real time 2.68 seconds cpu time 0.19 seconds MPRINT(TAXSCF): libname taxsim "../txpydata/sas"; NOTE: Libref TAXSIM was successfully assigned as follows: Engine: V9 Physical Name: /disk/homedirs/nber/taxsim/public_html/to-taxsim/scf27-32/txpydata/sas MPRINT(TAXSCF): proc contents data=swt.swt89; MPRINT(TAXSCF): run; NOTE: PROCEDURE CONTENTS used (Total process time): real time 0.00 seconds cpu time 0.01 seconds NOTE: The PROCEDURE CONTENTS printed pages 1130-1207. MPRINT(TAXSCF): DATA taxsim.txpydata89; MPRINT(TAXSCF): SET swt.swt89(KEEP=taxsimid year mstat page sage depx dep13 dep17 dep18 pwages swages dividends intrec stcg ltcg otherprop nonprop pensions gssi ui transfers rentpaid proptax otheritem childcare mortgage scorp pbusinc pprofinc sbusinc sprofinc Y1 YY1 taxunit rep); MPRINT(TAXSCF): y1=Y1; 595 The SAS System 13:32 Friday, January 29, 2021 MPRINT(TAXSCF): yy1=YY1; MPRINT(TAXSCF): RUN; NOTE: There were 19120 observations read from the data set SWT.SWT89. NOTE: The data set TAXSIM.TXPYDATA89 has 19120 observations and 35 variables. NOTE: DATA statement used (Total process time): real time 0.11 seconds cpu time 0.04 seconds MPRINT(TAXSCF): proc contents data=taxsim.txpydata89; MPRINT(TAXSCF): run; NOTE: PROCEDURE CONTENTS used (Total process time): real time 0.01 seconds cpu time 0.00 seconds NOTE: The PROCEDURE CONTENTS printed pages 1208-1209. 3931 3932 ENDSAS; NOTE: SAS Institute Inc., SAS Campus Drive, Cary, NC USA 27513-2414 NOTE: The SAS System used: real time 4:32.59 cpu time 2:01.34