*********************************************************************************; * SAS Download Code *; * *; * Purpose: Creating An Incident-Level Aggregated Flat File (for all segments) *; *********************************************************************************; LIBNAME PERM 'Directory:\Path\Filename\'; OPTIONS LINESIZE=80 FIRSTOBS=1 OBS=MAX; *********************************************************************************; * *; * Prepare the Administrative Segment for processing *; * *; *********************************************************************************; DATA PERM.ADMIN_SEGMENT; SET PERM.NIBRS; IF (tot_aseg ge 1) THEN clr_arr = 1; IF (excp_clr IN('A', 'B', 'C', 'D', 'E')) THEN CLR_EXCP = 1; RUN; PROC SORT DATA=PERM.ADMIN_SEGMENT; BY ORI INC_NUM; RUN; DATA INCIDENT_01(KEEP=ORI INC_NUM INC_YR INC_MO INC_DY INC_HR RPTDATE CLR_EXCP CLR_ARR); SET PERM.ADMIN_SEGMENT; BY ORI INC_NUM; IF FIRST.INC_NUM; RUN; *********************************************************************************; * *; * Prepare the Offense Segment for processing *; * *; *********************************************************************************; PROC FORMAT; INVALUE OFF_CODE '200' = 200 '13A' = 130 '13B' = 171 '13C' = 172 '510' = 510 '220' = 140 '250' = 250 '290' = 290 '35A' = 350 '35B' = 351 '270' = 270 '210' = 210 '26A' = 260 '26B' = 261 '26C' = 262 '26D' = 263 '26E' = 264 '39A' = 390 '39B' = 391 '39C' = 392 '39D' = 393 '09A' = 90 '09B' = 198 '09C' = 199 '100' = 190 '23A' = 160 '23B' = 161 '23C' = 162 '23D' = 163 '23E' = 164 '23F' = 165 '23G' = 166 '23H' = 167 '240' = 150 '370' = 370 '40A' = 400 '40B' = 401 '120' = 120 '11A' = 110 '11B' = 180 '11C' = 181 '11D' = 182 '36A' = 360 '36B' = 361 '280' = 280 '520' = 520 ; VALUE OFFENSE 200 = 'Arson' 130 = 'Aggravated Assault' 171 = 'Simple Assault' 172 = 'Intimidation' 510 = 'Bribery' 140 = 'Burglary/Breaking and Entering' 250 = 'Counterfeiting/Forgery' 290 = 'Destruction/Damage/Vandalism of Property' 350 = 'Drug/Narcotics Violations' 351 = 'Drug Equipment Violations' 270 = 'Embezzlement' 210 = 'Extortion/Blackmail' 260 = 'False Pretenses/Swindle/Confidence Game' 261 = 'Credit Card/Automated Teller Machine Fraud' 262 = 'Impersonation' 263 = 'Welfare Fraud' 264 = 'Wire Fraud' 390 = 'Betting/Wagering' 391 = 'Operating/Promoting/Assisting Gambling' 392 = 'Gambling Equipment Violations' 393 = 'Sports Tampering' 90 = 'Murder and Nonnegligent Manslaughter' 198 = 'Negligent Manslaughter' 199 = 'Justifiable Homicide' 190 = 'Kidnapping/Abduction' 160 = 'Pocket-picking' 161 = 'Purse-snatching' 162 = 'Shoplifting' 163 = 'Theft From Building' 164 = 'Theft From Coin-Operated Machine or Device' 165 = 'Theft From Motor Vehicle' 166 = 'Theft of Motor Vehicle Parts or Accessories' 167 = 'All Other Larceny' 150 = 'Motor Vehicle Theft' 370 = 'Pornography/Obscene Material' 400 = 'Prostitution' 401 = 'Assisting or Promoting Prostitution' 120 = 'Robbery' 110 = 'Forcible Rape' 180 = 'Forcible Sodomy' 181 = 'Sexual Assault With An Object' 182 = 'Forcible Fondling' 183 = 'Rape of a Male' 360 = 'Incest' 361 = 'Statutory Rape' 280 = 'Stolen Property Offenses' 520 = 'Weapon Law Violations' ; RUN; DATA PERM.OFFENSE_SEGMENT(DROP=I); SET PERM.NIBRS; ARRAY WEAPON{3} $ WEAPON1-WEAPON3; ARRAY WPN{3} WPN1-WPN3; LENGTH OFFENSE INC_LOC OFNS_CNT mur rap rob aggasl bur lar mvt oth_asl 4.; OFFENSE = INPUT(OFF_CODE, OFF.); IF (offense = 90) THEN mur = 1; ELSE mur = 0; IF (offense = 110) THEN rap = 1; ELSE rap = 0; IF (offense = 120) THEN rob = 1; ELSE rob = 0; IF (offense = 130) THEN aggasl = 1; ELSE aggasl = 0; IF (offense = 140) THEN bur = 1; ELSE bur = 0; IF (offense >= 160 and offense le 167) THEN lar = 1; ELSE lar = 0; IF (offense = 150) THEN mvt = 1; ELSE mvt = 0; IF (offense IN(171, 172)) THEN oth_asl = 1; ELSE oth_asl = 0; DO I=1 TO 3; WPN{I} = INPUT(WEAPON{I}, 4.); END; IF (0 le wpn1 le 15) or (0 le wpn2 le 15) or (0 le wpn3 le 15) THEN firearm = 1; ELSE firearm = 0; INC_LOC = INPUT(off_loc, 4.); OFNS_CNT = 1; FORMAT OFFENSE OFFENSE.; RUN; PROC SORT DATA=PERM.OFFENSE_SEGMENT; BY ORI INC_NUM; RUN; DATA INCIDENT_02A(KEEP=ORI INC_NUM INC_LOC ATT_COMP); SET PERM.OFFENSE_SEGMENT; BY ORI INC_NUM; IF FIRST.INC_NUM; RUN; PROC SUMMARY DATA=PERM.OFFENSE_SEGMENT ; VAR OFNS_CNT MUR RAP ROB AGGASL BUR LAR MVT OTH_ASL FIREARM; BY ORI INC_NUM; OUTPUT OUT=INCIDENT_02B(DROP=_TYPE_ _FREQ_) SUM=; RUN; DATA INCIDENT_02; MERGE INCIDENT_02A(IN=IN1) INCIDENT_02B(IN=IN2); BY ORI INC_NUM; IF IN1 & IN2; RUN; *********************************************************************************; * *; * Prepare the Property Segment for processing *; * *; *********************************************************************************; DATA PERM.PROPERTY_SEGMENT; SET PERM.NIBRS; RUN; *********************************************************************************; * *; * Prepare the Victim Segment for processing *; * *; *********************************************************************************; DATA PERM.VICTIM_SEGMENT(DROP=I); SET PERM.FBI; ARRAY V_OFF{10} $ V_OFF1-V_OFF10; ARRAY VOFF{10} VOFF1-VOFF10; LENGTH V_AGE MSVOFF 8. VIC_INJ VIC_CNT 4.; PROC FORMAT; INVALUE V_OFF1-V_OFF10 '200' = 200 '13A' = 130 '13B' = 171 '13C' = 172 '510' = 510 '220' = 140 '250' = 250 '290' = 290 '35A' = 350 '35B' = 351 '270' = 270 '210' = 210 '26A' = 260 '26B' = 261 '26C' = 262 '26D' = 263 '26E' = 264 '39A' = 390 '39B' = 391 '39C' = 392 '39D' = 393 '09A' = 90 '09B' = 198 '09C' = 199 '100' = 190 '23A' = 160 '23B' = 161 '23C' = 162 '23D' = 163 '23E' = 164 '23F' = 165 '23G' = 166 '23H' = 167 '240' = 150 '370' = 370 '40A' = 400 '40B' = 401 '120' = 120 '11A' = 110 '11B' = 180 '11C' = 181 '11D' = 182 '36A' = 360 '36B' = 361 '280' = 280 '520' = 520 RUN; IF (vic_age EQ 'BB') THEN V_AGE = .7; ELSE IF (vic_age EQ 'NN') THEN V_AGE = .1; ELSE IF (vic_age EQ 'NB') THEN V_AGE = .2; ELSE V_AGE = INPUT(vic_age, 4.); IF (0 LE v_age LE 95) THEN DO; IF (v_age ge 65) THEN vage65 = 1; ELSE vage65 = 0; IF (10 LE v_age LE 17) THEN vage1017 = 1; ELSE vage1017 = 0; IF (15 LE v_age LE 24) THEN vage1524 = 1; ELSE vage1524 = 0; IF (18 LE v_age LE 98) THEN vadult = 1; ELSE vadult = 0; IF (v_age LT 18) THEN vlt18 = 1; ELSE vlt18 = 0; IF (vic_sex EQ 'M') THEN vmale = 1; ELSE vmale = 0; IF (vic_sex = 'F') THEN vfemale = 1; ELSE vfemale = 0; END; IF (v_type EQ 'I') THEN indivl = 1; ELSE indivl = 0; DO I=1 TO 10; VOFF{I} = INPUT(V_OFF{I}, OFF.); END; MSVOFF = MIN(voff1, voff2, voff3, voff4, voff5, voff6, voff7, voff8, voff9, voff10); IF (msvoff = 110 AND vic_sex = 'M') THEN msvoff = 183; IF (v_inj1 IN('B', 'I', 'L', 'M', 'T', 'U', 'O') OR v_inj2 IN('B', 'I', 'L', 'M', 'T', 'U', 'O') OR v_inj3 IN('B', 'I', 'L', 'M', 'T', 'U', 'O') OR v_inj4 IN('B', 'I', 'L', 'M', 'T', 'U', 'O') OR v_inj5 IN('B', 'I', 'L', 'M', 'T', 'U', 'O')) THEN VIC_INJ = 1; ELSE VIC_INJ = 0; VIC_CNT = 1; FORMAT VOFF1-VOFF10 OFFENSE.; RUN; PROC SORT DATA=PERM.VICTIM_SEGMENT; BY ORI INC_NUM; RUN; PROC SUMMARY DATA=PERM.VICTIM_SEGMENT ; VAR VIC_CNT MSVOFF INDIVL VAGE65 VAGE1017 VAGE1524 VLT18 VADULT VMALE VFEMALE VIC_INJ; BY ORI INC_NUM; OUTPUT OUT=INCIDENT_04(DROP=_TYPE_ _FREQ_ MSVOFF_S VIC_MIN) SUM=VIC_CNT MSVOFF_S INDIVL VAGE65 VAGE1017 VAGE1524 VLT18 VADULT VMALE VFEMALE VIC_INJ MIN=VIC_MIN MSVOFF; RUN; *********************************************************************************; * *; * Prepare the Offender Segment for processing *; * *; *********************************************************************************; DATA PERM.OFFENDER_SEGMENT; SET PERM.NIBRS; IF (5 LE off_age LT 99) THEN DO; if (10 LE off_age LE 17) THEN off1017 = 1; ELSE off1017 = 0; if (15 LE off_age LE 24) THEN off1524 = 1; ELSE off1524 = 0; if (18 LE off_age LE 98) THEN offadult = 1; ELSE offadult = 0; if (65 LE off_age LE 98) THEN off65 = 1; ELSE off65 = 0; if (off_sex EQ 'M') THEN offmale = 1; ELSE offmale = 0; if (off_sex EQ 'F') THEN offemale = 1; ELSE offemale = 0; END; OFF_CNT = 1; RUN; PROC SORT DATA=PERM.OFFENDER_SEGMENT; BY ORI INC_NUM; RUN; PROC SUMMARY DATA=PERM.OFFENDER_SEGMENT ; VAR OFF_CNT OFF65 OFF1017 OFF1524 OFFADULT OFFMALE OFFEMALE; BY ORI INC_NUM; OUTPUT OUT=INCIDENT_05(DROP=_TYPE_ _FREQ_) SUM=; RUN; *********************************************************************************; * *; * Prepare the Arrestee Segment for processing *; * *; *********************************************************************************; DATA PERM.ARRESTEE_SEGMENT; SET PERM.NIBRS; LENGTH mur_arr rap_arr rob_arr asl_arr bur_arr lar_arr mvt_arr oasl_arr 4.; IF (5 LE arr_age LT 99) THEN DO; IF (65 LE arr_age LE 98) THEN arr65 = 1; ELSE arr65 = 0; IF (5 LE arr_age LE 9) THEN arr0509 = 1; ELSE arr0509 = 0; IF (10 LE arr_age LE 17) THEN arr1017 = 1; ELSE arr1017 = 0; IF (15 LE arr_age LT 25) THEN arr1524 = 1; ELSE arr1524 = 0; IF (18 LE arr_age LE 98) THEN arradult = 1; ELSE arradult = 0; IF (5 LE arr_age LE 9) THEN arr0509 = 1; ELSE arr0509 = 0; IF (arr_sex EQ 'M') THEN arrmale = 1; ELSE arrmale = 0; IF (arr_sex EQ 'F') THEN arfemale = 1; ELSE arfemale = 0; END; PROC FORMAT; INVALUE ARR_OFF '200' = 200 '13A' = 130 '13B' = 171 '13C' = 172 '510' = 510 '220' = 140 '250' = 250 '290' = 290 '35A' = 350 '35B' = 351 '270' = 270 '210' = 210 '26A' = 260 '26B' = 261 '26C' = 262 '26D' = 263 '26E' = 264 '39A' = 390 '39B' = 391 '39C' = 392 '39D' = 393 '09A' = 90 '09B' = 198 '09C' = 199 '100' = 190 '23A' = 160 '23B' = 161 '23C' = 162 '23D' = 163 '23E' = 164 '23F' = 165 '23G' = 166 '23H' = 167 '240' = 150 '370' = 370 '40A' = 400 '40B' = 401 '120' = 120 '11A' = 110 '11B' = 180 '11C' = 181 '11D' = 182 '36A' = 360 '36B' = 361 '280' = 280 '520' = 520 RUN; ARROFF = INPUT(ARR_OFF, OFF.); IF (arroff = 90) THEN mur_arr = 1; ELSE mur_arr = 0; IF (arroff = 110) THEN rap_arr = 1; ELSE rap_arr = 0; IF (arroff = 120) THEN rob_arr = 1; ELSE rob_arr = 0; IF (arroff = 130) THEN asl_arr = 1; ELSE asl_arr = 0; IF (arroff = 140) THEN bur_arr = 1; ELSE bur_arr = 0; IF (arroff >= 160 and arroff le 167) THEN lar_arr = 1; ELSE lar_arr = 0; IF (arroff = 150) THEN mvt_arr = 1; ELSE mvt_arr = 0; IF (arroff IN(171, 172)) THEN oasl_arr = 1; ELSE oasl_arr = 0; ARR_CNT = 1; FORMAT ARROFF OFFENSE.; RUN; PROC SORT DATA=PERM.ARRESTEE_SEGMENT; BY ORI INC_NUM; RUN; PROC SUMMARY DATA=PERM.ARRESTEE_SEGMENT ; VAR ARR_CNT ARR65 ARR1017 ARR1524 ARR0509 ARRADULT ARRMALE ARFEMALE MUR_ARR RAP_ARR ROB_ARR ASL_ARR BUR_ARR LAR_ARR MVT_ARR OASL_ARR; BY ORI INC_NUM; OUTPUT OUT=INCIDENT_06(DROP=_TYPE_ _FREQ_) SUM=; RUN; *********************************************************************************; * *; * Prepare the ArresteeGrpB Segment for processing *; * *; *********************************************************************************; DATA PERM.ARRESTEEGRPB_SEGMENT; SET PERM.NIBRS; LENGTH mur_arr rap_arr rob_arr asl_arr bur_arr lar_arr mvt_arr oasl_arr 4.; IF (5 LE arr_age LT 99) THEN DO; IF (65 LE arr_age LE 98) THEN arr65 = 1; ELSE arr65 = 0; IF (10 LE arr_age LE 17) THEN arr1017 = 1; ELSE arr1017 = 0; IF (15 LE arr_age LT 25) THEN arr1524 = 1; ELSE arr1524 = 0; IF (18 LE arr_age LE 98) THEN arradult = 1; ELSE arradult = 0; IF (5 LE arr_age LE 9) THEN arr0509 = 1; ELSE arr0509 = 0; IF (arr_sex EQ 'M') THEN arrmale = 1; ELSE arrmale = 0; IF (arr_sex EQ 'F') THEN arfemale = 1; ELSE arfemale = 0; END; ARROFF = INPUT(ARR_OFF, OFF.); IF (arroff = 90) THEN mur_arr = 1; ELSE mur_arr = 0; IF (arroff = 110) THEN rap_arr = 1; ELSE rap_arr = 0; IF (arroff = 120) THEN rob_arr = 1; ELSE rob_arr = 0; IF (arroff = 130) THEN asl_arr = 1; ELSE asl_arr = 0; IF (arroff = 140) THEN bur_arr = 1; ELSE bur_arr = 0; IF (arroff >= 160 and arroff le 167) THEN lar_arr = 1; ELSE lar_arr = 0; IF (arroff = 150) THEN mvt_arr = 1; ELSE mvt_arr = 0; IF (arroff IN(171, 172)) THEN oasl_arr = 1; ELSE oasl_arr = 0; ARR_CNT = 1; FORMAT ARROFF OFFENSE.; RUN; PROC SORT DATA=PERM.ARRESTEEGRPB_SEGMENT; BY ORI INC_NUM; RUN; PROC SUMMARY DATA=PERM.ARRESTEEGRPB_SEGMENT ; VAR ARR_CNT ARR65 ARR1017 ARR1524 ARR0509 ARRADULT ARRMALE ARFEMALE MUR_ARR RAP_ARR ROB_ARR ASL_ARR BUR_ARR LAR_ARR MVT_ARR OASL_ARR; BY ORI INC_NUM; OUTPUT OUT=INCIDENT_07(DROP=_TYPE_ _FREQ_) SUM=; RUN; DATA PERM.INCIDENT_LEVEL_FILE; MERGE INCIDENT_01(IN=IN1) INCIDENT_02(IN=IN2) INCIDENT_04(IN=IN3) INCIDENT_05(IN=IN4) INCIDENT_06(IN=IN5); BY ORI INC_NUM; RUN;