THE FBI'S CRIME IN THE UNITED STATES 2000 SECTION V ANALYSIS OF MOTOR VEHICLE THEFT USING SURVIVAL MODEL


The following code replicates the tables produced by the FBI.  When using this code, be sure to insert the path and the file name of the data file to be used, as well as the directory and file name for saving.  If you need any assistance working with the syntax provided, please contact us.

The assumptions for the following example of code are:
  1. The NIBRS data file was obtained on tapes from the FBI in ASCII format.
  2. The NIBRS data segments that comprise a single incident report can be linked by a combination of the ORI data field plus the incident number data field (incident numbers are encrypted).
  3. The anticipated data analysis will include only the Offense Group "A" data segments. In addition to summary level counts to describe incidents, this example identifies juvenile victims and offenders, older victims and offenders, and multiple offender incidents.
  4. The data file was created as described in "Reading A Multi-Level Data File."

 

This RECODE changes the alphanumeric variable type for incident offense into a numeric type and assigns the new values to the new variable called OFFENSE. Alphanumeric types require more disk space. The new values assigned coincide with the FBI hierarchical offense structure for Part I offenses. In this RECODE, the lower the value, the greater the seriousness of the offense.

GET FILE = 'Directory:\Path\FBI data.sav'.

recode 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)into offense.

VALUE LABELS assigns a descriptive label to the values of the variable OFFENSE.

value labels 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 'Kidnaping/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'.

The following blocks of code create new variables for motor vehicle theft (MVT), and arrested for motor vehicle theft (MVT_ARR), and clearance [by arrest (CLR_ARR) or exceptional clearance (CLR_EXCP)]. Each occurrence is assigned a value of 1 so that a count can be obtained when the AGGREGATE command is executed.         

Compute mvt = 0.
IF (offense = 150)mvt = 1.
compute mvt_arr = 0.
if (arr_off = '150')mvt_arr = 1.

if (tot_aseg ge 1)clr_arr = 1.
if (excp_clr = 'A'
 or excp_clr = 'B'
 or excp_clr = 'C'
 or excp_clr = 'D'
 or excp_clr = 'E')CLR_EXCP = 1.

The following COMPUTE/IF commands create a dummy (0,1) variable which will be used in the aggregate command for counting the number of offenders (OFF_CNT), victims (VIC_CNT), arrests (ARR_CNT), and offenses (OFNS_CNT).

COMPUTE off_cnt = 0.
COMPUTE vic_cnt = 0.
COMPUTE arr_cnt = 0.
COMPUTE ofns_cnt = 0.

IF (ibr_rec = '02')ofns_cnt = 1.
IF (ibr_rec = '04')vic_cnt = 1.
IF (ibr_rec = '05')off_cnt = 1.
IF (ibr_rec = '06')arr_cnt = 1.

The RECODE of offense location (OFF_LOC) assigns a missing value for records with no value for that variable and converts the alphanumeric variable type to a numeric variable type called INC_LOC. Records with no value for the attempted/completed variable (ATT_COMP) are assigned a missing value. When occurrences are counted, missing values will be excluded.

RECODE off_loc ('  ' = sysmis)(convert) into inc_loc.
missing values att_comp (' ').

The SELECT IF selects cases only for the incident year 1999.  The cases are sorted by ORI and INC_NUM so that the AGGREGATE command can be executed.

select if (inc_yr = 1999).
sort cases by ori inc_num.

The AGGREGATE command restructures the data into an incident unit of analysis. The OUTFILE subcommand creates a new system file so that the original file remains unchanged. Each unique incident record (ORI+ incident number) [see /BREAK=ori inc_num] will consist of variables that describe the incident and variables that allow counts. Some of these variables existed in the original FBI ASCII file and others were created.

AGGREGATE
  /OUTFILE= 'Directory\Path\MVT Incident 1999.sav'
  /PRESORTED
  /BREAK=ori inc_num
  /inc_yr = FIRST(inc_yr)
  /inc_mo = FIRST(inc_mo)
  /inc_dy = FIRST(inc_dy)
  /inc_hr = FIRST(inc_hr)
  /rptdate = first(rptdate)
  /inc_loc 'Incident location' = first(inc_loc)
  /CLR_EXCP 'Incident was cleared exceptionally' = first(CLR_EXCP)
  /CLR_ARR 'Incident was cleared by an arrest' = first(CLR_ARR)
  /ofns_cnt 'Count of offenses in incident' = sum(ofns_cnt)
  /off_cnt  'Count of offenders in incident' = sum(off_cnt)
  /vic_cnt 'Count of victims in incident' = sum(vic_cnt)
  /arr_cnt  'Count of arrests for incident' = sum(arr_cnt)
  /att_comp 'Completed or attempted' = first(att_comp)
  /mvt 'Motor vehicle theft offense in incident' = sum(mvt)
  /mvt_arr 'Count of arrests for motor vehicle theft in incident' = sum(mvt_arr)
  /mvt_num 'Number of stolen motor vehicles' = sum(mvt_num)
  /mvt_reco 'Number of recovered stolen motor vehicles' = sum(mvt_reco).

This block of code uses various IF and COMPUTE statements to ready the file to recreate several FBI motor vehicle tables. 

GET  FILE= 'Directory\Path \MVT Incident 1999.sav'.

SELECT IF ( inc_yr = 1999 and ofns_cnt = 1 and mvt = 1 and mvt_num = 1).
COMPUTE cleared = 2.
IF (clr_arr = 1 OR clr_excp = 1)cleared = 1.
IF (SYSMIS(mvt_reco) or mvt_reco = 0)mvt_reco = 2.

VALUE LABELS mvt_reco 1 'Recovered' 2 'Not Recovered' /
  cleared  1 'Cleared' 2 'Not cleared'.

SET TLook ' Directory\Path\MVT TableLooks.tlo' TFit Labels.

Table 5.1 Percent Distribution of Motor Vehicle Theft Incidents by Day of Week. 

The COMPUTE creates the variable dyofweek.  The DATE.DMY puts the variables inc_dy, inc_mo, inc_yr into a day/month/year format (The data were set up with an incident’s day, month, and year as separate variables).  XDATE.WKDAY then extracts the weekday of the incident from the day/month/year format.  VALUE LABELS then assigns a descriptive label to each of the values of the variable dyofweek.  The output is defined as a table displaying the percent distribution of motor vehicle theft incidents by day of the week.

COMPUTE dyofweek = XDATE.WKDAY(DATE.DMY(inc_dy,inc_mo,inc_yr)) .
VARIABLE LABELS dyofweek 'Day'.
VALUE LABELS dyofweek
  1 'Sunday'
  2 'Monday'
  3 'Tuesday'
  4 'Wednesday'
  5 'Thursday'
  6 'Friday'
  7 'Saturday'.

TABLES
  /FORMAT BLANK MISSING('.')
  /GBASE=CASES
  /FTOTAL= $t000001 "Total"
  /TABLE=dyofweek + $t000001  BY (STATISTICS)
  /STATISTICS cpct( dyofweek( F5.2 ) 'NIBRS')
/TITLE  'Table 5.1' 'Percent Distribution of Motor Vehicle Theft Incidents' 'by Day of Week'.

Table 5.2 Percent Distribution of Motor Vehicle Theft Incidents by Month. 

VALUE LABELS assigns a descriptive label to the values of the variable inc_mo.  The output is defined as a table displaying the percent distribution of motor vehicle theft incidents by month.

VALUE LABELS inc_mo
   1 'January'
   2 'February'
   3 'March'
   4 'April'
   5 'May'
   6 'June'
   7 'July'
   8 'August'
   9 'September'
  10 'October'
  11 'November'
  12 'December'.

TABLES
  /FORMAT BLANK MISSING('.')
  /GBASE=CASES
  /FTOTAL= $t000001 "Total"
  /TABLE=inc_mo + $t000001  BY (STATISTICS)
  /STATISTICS cpct( inc_mo( F5.2 ) 'Percent')
  /TITLE  'Table 5.2' 'Percent Distribution of Motor Vehicle Theft' 'Incidents by Month'.

Table 5.3 Percent Distribution of Motor Vehicle Theft Incidents by Location. 

This RECODE restructures the variable inc_loc into a new variable inc_loc2 to conform to the ordering used by the FBI in it's analysis. VALUE LABELS then assigns a descriptive label to the values of  the new variable inc_loc2.  This output can be defined as a table displaying the percent distribution of motor vehicle theft incidents by location.

RECODE inc_loc
  (20 = 1)
  (19 = 2)
  (13 = 3)
  (25 = 4)
  (5 = 5)
  (3 = 6)
  (24 = 7)
  (23 = 8)
  (14 = 9)
  (7 = 10)
  (else = 11)INTO inc_loc2.

VALUE LABELS inc_loc2
  1 'Residence/Home'
  2 'Rental Storage Facility'
  3 'Highway/Road/Alley'
  4 'Unknown Location'
  5 'Commercial Office Building'
  6 'Bar/Night Club'
  7 'Specialty Store'
  8 'Service/Gas Station'
  9 'Hotel/Motel'
  10 'Convenience Store'
  11 'All Others'.

TABLES
  /FORMAT BLANK MISSING('.')
  /GBASE=CASES
  /FTOTAL= $t000001 "Total"
  /TABLE=inc_loc2 + $t000001  BY (STATISTICS)
  /STATISTICS cpct( inc_loc2 ( F5.2 ) 'Percent')
  /TITLE  'Table 5.3' 'Percent Distribution of Motor Vehicle Theft' 'Incidents by Location'.

Table 5.4 Recovery of Stolen Motor Vehicles by Day of Week. 

The USEALL defines a USE range starting with the first observation and ending with the last observation in the series.  This COMPUTE illustrates the use of a filter to limit the analysis to only those incidents that involved the recovery of a stolen vehicle.  The output is defined as a table displaying the number of recovered stolen motor vehicles by day of the week.

USE ALL.
COMPUTE filter_$=(mvt_reco = 1).
VARIABLE LABEL filter_$ 'mvt_reco = 1 (FILTER)'.
VALUE LABELS filter_$  0 'Not Selected' 1 'Selected'.
FORMAT filter_$ (f1.0).
FILTER BY filter_$.

TABLES
  /FORMAT BLANK MISSING('.')
  /GBASE=CASES
  /FTOTAL= $t000001 "Total Recovered"
  /TABLE=dyofweek + $t000001  BY (STATISTICS)
  /STATISTICS cpct( dyofweek( F5.2 ) 'NIBRS')
  /TITLE  'Table 5.4' 'Recovery of Stolen Motor Vehicles by Day of Week'.

Table 5.5 Recovery of Stolen Motor Vehicles by Month. 

The data do not need to be restructured in any way to produce the following table.  The output is defined as a table displaying the percent of recovered stolen motor vehicles by month.

TABLES
  /FORMAT BLANK MISSING('.')
  /GBASE=CASES
  /FTOTAL= $t000001 "Total Recovered"
  /TABLE=inc_mo + $t000001  BY (STATISTICS)
  /STATISTICS cpct( inc_mo( F5.2 ) 'Percent')
  /TITLE  'Table 5.5' 'Recovery of Stolen Motor Vehicles by Month'.

Table 5.6 Percent of Clearances for Motor Vehicle Thefts by Recovery Status. 

The FILTER used to produce Table 5.4 and 5.5 is turned OFF.  The USEALL defines a USE range starting with the first observation and ending with the last observation in the series.  The output is defined as a table displaying the percent of clearances for motor vehicle theft by recovery status.

FILTER OFF.
USE ALL.
TEMPORARY.
  VARIABLE LABELS mvt_reco '' cleared '' .

TABLES
  /FORMAT BLANK MISSING('.')
  /GBASE=CASES
  /FTOTAL= $t000001 "Total" $t000002 "Total"
  /TABLE=mvt_reco + $t000001  BY cleared + $t000002
  /STATISTICS
  cpct( cleared( PCT5.1 ) '':mvt_reco )
  /TITLE  'Table 5.6' 'Percent of Clearances for Motor Vehicle Theft' 'by Recovery Status'.

* Table 5.7 Age, Sex, and Race Composition of Motor Vehicle Theft Arrestees. 

To complete Table 5.7, the US 1999 arrestee segment must be merged with the MVT Incident 1999 file. The MATCH command uses a one-to-many match. The structure of NIBRS allows for only one incident record per incident, but there can be multiple arrestee records per incident. The arrestees' age and race are RECODEd into a new variables to match the categories used by the FBI. A TABLES procedure is used to produce Table 5.7.

SORT CASES BY ori (A) inc_num (A) .
SAVE OUTFILE=' Directory\Path\MVT Incident 1999.sav'
  /COMPRESSED.
GET FILE='Directory\Path\US99 arrestee segment.sav'.
SORT CASES BY ori (A) inc_num (A) .
SAVE OUTFILE=' Directory\Path\US99 arrestee segment.sav'
  /COMPRESSED.

MATCH FILES /FILE=*
 /TABLE='Directory\Path\MVT Incident 1999.sav'
 /BY ori inc_num
 /DROP= arr_clr arr_disp arr_dy arr_mo arr_off arr_res arr_type arr_wpn1
        arr_wpn2 arr_yr arroff arrseq atr ibr_rec inc_date msg st_code.
SELECT IF (mvt = 1).

RECODE arr_age (6 thru 11 = 1)
   (12 thru 17 = 2)
   (18 thru 24 = 3)
   (25 thru 29 = 4)
   (30 thru 34 = 5)
   (35 thru 39 = 6)
   (40 thru 44 = 7)
   (45 thru 49 = 8)
   (50 thru 54 = 9)
   (55 thru 59 = 10)
   (60 thru 64 = 11)
   (65 thru 98 = 12)
   (else = 13)into agegrp.

VALUE LABELS agegrp
  1 '6-11'
  2 '12-17'
  3 '18-24'
  4 '25-29'
  5 '30-34'
  6 '35-39'
  7 '40-44'
  8 '45-49'
  9 '50-54'
  10 '55-59'
  11 '60-64'
  12 '65+'
  13 'U'.

RECODE arr_race ('A' = 4)
  ('B' = 2)
  ('W' = 1)
  ('I' = 3)
  ('U' = 5)INTO race.

VALUE LABELS race 1 'W'
   2 'B'
   3 'I'
   4 'A'
   5 'U'.

RECODE arr_sex ('F' = 2)
   ('M' = 1) into sex.

VALUE LABELS sex 1 'Male' 2 'Female'.

* General Tables.

TEMPORARY.
  VARIABLE LABELS agegrp '' sex '' race '' .

TABLES
  /FORMAT BLANK MISSING('.')
  /GBASE=CASES
  /FTOTAL= $t000002 "Total" $t000001 "Total"
  /TABLE=agegrp + $t000002  BY (sex > (STATISTICS) > race > (STATISTICS)) +
  $t000001 
 
/STATISTICS
  count( agegrp( F5.0 ) '')
  /TITLE  'Table 5.7' 'Age, Sex, and Race Composition of Motor Vehicle Theft Arrestees'.

Survival Estimates

Tables 5.8 through 5.11. 

Calculating the survival estimates for Tables 5.8 through 5.11 required using both SPSS and spreadsheet software. For this example, Microsoft Excel is used. The survival estimates are basic percentage tables which are much easier to create using a spreadsheet software like Excel. Prior to creating the percentage tables, the data in SPSS must be merged with the property segment. A variable calculating the time between the incident and recovery of the stolen vehicle is created. A SELECT IF command limits the cases for the FREQUENCY procedure to only those cases where the value of dupe = 1. The input to the Excel table is a FREQUENCY of the number of recovered vehicles for each time period.  

GET FILE=' Directory\Path\MVT Analysis\MVT Incident 1999.sav'.
SORT CASES BY ori (A) inc_num (A) .
SAVE OUTFILE=' Directory\Path\MVT Analysis\MVT Incident 1999.sav'
  /COMPRESSED.
GET FILE=' Directory\Path\US99 property segment.sav'.
SORT CASES BY ori (A) inc_num (A) .
SAVE OUTFILE=' Directory\Path\US99 property segment.sav'
  /COMPRESSED.

MATCH FILES /FILE=*
 /TABLE=' Directory\Path\MVT Incident 1999.sav'
 /BY ori inc_num
 /KEEP = ori inc_num mvt inc_yr inc_mo inc_dy p_date.
SELECT IF (mvt = 1 and inc_yr = 1999).
SAVE OUTFILE = ' Directory\Path\MVT Analysis\mvt recovery time.sav'/KEEP =
  ori inc_num inc_yr inc_mo inc_dy p_date.

COMPUTE recov_yr = TRUNC(p_date/10000).
COMPUTE recov_mo = TRUNC((MOD(p_date,10000))/100).
COMPUTE recov_dy = (MOD(p_date,100)).
COMPUTE fleedays = (YRMODA(recov_yr,recov_mo,recov_dy) -
                    YRMODA(inc_yr,inc_mo,inc_dy)).

RECODE fleedays (0 thru 1 = 1)
   (2 thru 6 = 2)
   (7 thru 20 = 3)
   (21 thru 50 = 4)
   (51 thru 140 = 5)
   (141 thru 320 = 6)
   (321 thru 680 = 7)
   (681 thru hi = 8)INTO time.

VALUE LABELS time
  1 '0-1'
  2 '2-6'
  3 '7-20'
  4 '21-50'
  5 '51-140'
  6 '141-320'
  7 '321-680'
  8 'over 680'.

COMPUTE dupe = 1.
IF (ori = LAG(ori) and
    inc_num = LAG(inc_num))dupe = LAG(dupe) + 1.
SELECT IF (dupe = 1).
FREQUENCIES  VARIABLES=time
  /ORDER=  ANALYSIS .

SAVE OUTFILE = 'Directory\Path\mvt recovery time.sav'
  /KEEP =  ori inc_num inc_yr inc_mo inc_dy p_date.