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:
- The NIBRS data file was obtained on tapes from the FBI in ASCII format.
- 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).
- 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.
- 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 incidents 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.
|