Document ID: EPA-HQ-OW-2002-0033-0254
Agency: epa
Document Type: Supporting & Related Material
Title: 
Posted Date: 2003-04-14T04:00Z

Economic,
Environmental,
and
Benefits
Analysis
of
the
Final
Metal
Products
and
Machinery
Rule
Programs
and
Output
Tables
for
the
Directs
+
All
to
433
Upgrade
Option
February
14,
2003
Prepared
for:
U.
S.
Environmental
Protection
Agency
Office
of
Science
and
Technology
Engineering
and
Analysis
Division
401
M
Street,
S.
W.
Washington,
D.
C.
20460
Dr.
Lynne
Tudor
Task
Manager
1
Directs
+
All
to
433
Upgrade
Option
Benefits
MP&
M
Benefits
Programs
and
Data
Sets
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
Estimating
MP&
M
Discharge
Loadings
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
10
"
Master
Benefits
Preferred
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11
"
Generate
Discharge
Events
(
Sub
1).
sas"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
17
"
Tally
Loadings
(
Sub
13)
pref.
sas"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
24
"
Toxic
Weight
Loadings
(
Sub
18)
pref.
sas"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
34
Human
Health
Benefits
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
39
Cancer
from
Fish
Consumption
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
40
"
Generate
Discharge
Events
(
Sub1).
sas"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
41
"
Human
Health
AWQC
Exceedences
(
Sub
2).
sas"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
42
"
Cancer­
fish
(
Sub
4).
sas"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
59
Cancer
from
Drinking
Water
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
78
"
Data
for
Brad
preferred.
sas"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
79
Water
Quality
Modeling
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
83
"
Drinking
Water
Cancer
(
Sub
6).
sas"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
84
Systemic
Risk
from
Fish
Consumption
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
95
"
Generate
Discharge
Events
(
Sub1).
sas"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
96
"
Human
Health
AWQC
Exceedences
(
Sub
2).
sas"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
97
"
Systemic
Cancer
(
Sub
5).
sas"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
98
"
Hazard
ratio
Tables.
sas"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
108
Systemic
Risk
from
Drinking
Water
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
118
"
Data
for
Brad
preferred.
sas"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
119
Water
Quality
Modeling
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
120
"
Systemic
Cancer
Assoc
DW
(
Sub
14).
sas"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
121
"
Hazard
ratio
Tables.
sas"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
127
Lead
Benefits
for
Adults
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
128
"
Cancer­
fish
(
Sub
4).
sas"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
129
"
Lead
Benefits
(
Sub
12).
sas"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
130
"
Subsistence
Lead
Benefits
(
Sub
17).
sas"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
149
Lead
Benefits
for
Children
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
169
"
Cancer­
fish
(
Sub
4).
sas"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
170
"
NeoNatal
Mortality
Benefits
(
Sub
15).
sas"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
171
Integrated
Exposure
Uptake
Biokinetic
Model
(
IEUBK)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
178
"
Gen4.
txt"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
179
"
Create
Lookup
Table.
sas"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
180
"
Ublook4.
sd2"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
182
"
Cnc_
fmt3.
sas"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
183
"
Child
Lead
Benefits
(
Sub
16).
sas"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
184
2
Recreational
Benefits
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
194
Recreational
Fishing
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
195
"
Human
Health
AWQC
Exceedences
(
Sub
2).
sas"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
196
"
Aquatic
Life
AWQC
Exceedences
(
Sub
3).
sas"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
197
"
Fishing
Recreation
(
Sub
7).
sas"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
214
Near­
water
Activity
and
Boating
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
224
"
Human
Health
AWQC
Exceedences
(
Sub
2).
sas"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
225
"
Aquatic
Life
AWQC
Exceedences
(
Sub
3).
sas"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
226
"
Other
Recreation
(
Sub
8).
sas"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
227
POTW
Benefits
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
240
POTW
Inhibitions
from
MP&
M
Facilities
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
241
"
Generate
Discharge
Events
(
Sub1).
sas"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
242
"
POTW
Inhibitions
(
Sub
9).
sas"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
243
Sludge
Benefits
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
253
"
POTW
Inhibitions
(
Sub
9).
sas"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
254
"
Sldg
MP&
M
Based
(
Sub
10).
sas"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
255
3
MP&
M
Benefits
Programs
and
Data
Sets
Programs
Used
in
the
National
Benefits
Run
Program
Name
Dataset
DCN
Description
"
Master
Benefits
Preferred.
sas"
Data
utilized
td_
pf.
sd2
ERG
Baseline
and
post­
compliance
pollutant
loadings
for
MP&
M
facilities.

baseclos.
sd2
37725
Facility
closures
in
the
baseline
and
post­
compliance.

poll2cas.
sd2
37726
Crosswalk
between
the
pollutant
code
index
and
the
pollutant
CAS
number.

Data
created
None
"
Generate
Discharge
Events
(
Sub
1).
sas"
Data
utilized
fac_
info.
sd2
37727
MP&
M
facility
and
discharge
RF1
reach
information.

facsize.
sd2
37728
MP&
M
facility
size
(
small,
medium,
or
large)
based
on
discharge
flow.

twf_
remr.
sd2
37729
MP&
M
pollutant
toxic
weighting
factors
and
POTW
removal
percentages.

Data
created
potw_
in.
sd2
MP&
M
pollutant
discharges
to
POTWs
prior
to
POTW
removals.

event_
ld.
sd2
MP&
M
pollutant
discharge
events
to
RF1
reaches
from
direct
dischargers
and
POTWs
(
post
removal).

"
Tally
Loadings
(
Sub
13)
pref.
sas"
Data
utilized
td_
pf.
sd2
ERG
Baseline
and
post­
compliance
pollutant
loadings
for
MP&
M
facilities.

baseclos.
sd2
37725
Facility
closures
in
the
baseline
and
post­
compliance.

twf_
remr.
sd2
37729
MP&
M
pollutant
toxic
weighting
factors
and
POTW
removal
percentages.

chemdata.
sd2
37732
MP&
M
pollutant
data
(
e.
g.,
awqc
values,
reference
dose,
cancer
slope
factor).

Data
created
None
Programs
Used
in
the
National
Benefits
Run
Program
Name
Dataset
DCN
Description
4
"
Toxic
Weight
Loadings
(
Sub
18)
pref.
sas"
Data
utilized
td_
pf.
sd2
ERG
Baseline
and
post­
compliance
pollutant
loadings
for
MP&
M
facilities.

baseclos.
sd2
37725
Facility
closures
in
the
baseline
and
post­
compliance.

twf_
remr.
sd2
37729
MP&
M
pollutant
toxic
weighting
factors
and
POTW
removal
percentages.

chemdata.
sd2
37732
MP&
M
pollutant
data
(
e.
g.,
awqc
values,
reference
dose,
cancer
slope
factor).

Data
created
None
"
Human
Health
AWQC
Exceedences
(
Sub
2).
sas"
Data
utilized
event_
ld.
sd2
MP&
M
pollutant
discharge
events
to
RF1
reaches
from
direct
dischargers
and
POTWs
(
post
removal).

chemdata.
sd2
37732
MP&
M
pollutant
data
(
e.
g.,
awqc
values,
reference
dose,
cancer
slope
factor).

Data
created
cnc_
hh.
sd2
MP&
M
pollutant
in­
stream
concentrations
for
each
RF1
reach.

rec_
hh.
sd2
Human
health
AWQC
exceedences
for
affected
RF1
reaches.

"
Aquatic
Life
AWQC
Exceedences
(
Sub
3).
sas"
Data
utilized
event_
ld.
sd2
MP&
M
pollutant
discharge
events
to
RF1
reaches
from
direct
dischargers
and
POTWs
(
post
removal).

chemdata.
sd2
37732
MP&
M
pollutant
data
(
e.
g.,
awqc
values,
reference
dose,
cancer
slope
factor).

Data
created
rec_
al.
sd2
Aquatic
life
AWQC
exceedences
for
affected
RF1
reaches.

"
Cancer­
fish
(
Sub
4).
sas"
Data
utilized
fish_
lic.
sd2
37733
County
level
fishing
license
data
for
the
United
States.

fac_
info.
sd2
37727
MP&
M
facility
and
discharge
RF1
reach
information.
Programs
Used
in
the
National
Benefits
Run
Program
Name
Dataset
DCN
Description
5
shoremi.
sd2
37734
Number
of
river
and
ocean
shore
miles
by
state.

fishadv1.
sd2
37735
Fishing
advisory
data
by
RF1
reach.

us_
rchmi.
sd2
37736
Number
of
river
miles
by
county.

cnc_
hh.
sd2
MP&
M
pollutant
in­
stream
concentrations
for
each
RF1
reach.

chemdata.
sd2
37732
MP&
M
pollutant
data
(
e.
g.,
awqc
values,
reference
dose,
cancer
slope
factor).

Data
created
lead.
sd2
MP&
M
in­
stream
concentrations
for
Lead
on
affected
RF1
reaches.

"
Systemic
Cancer
(
Sub
5).
sas"
Data
utilized
fish_
lic.
sd2
37733
County
level
fishing
license
data
for
the
United
States.

fac_
info.
sd2
37727
MP&
M
facility
and
discharge
RF1
reach
information.

fishadv1.
sd2
37735
Fishing
advisory
data
by
RF1
reach.

us_
rchmi.
sd2
37736
Number
of
river
miles
by
county.

cnc_
hh.
sd2
MP&
M
pollutant
in­
stream
concentrations
for
each
RF1
reach.

chemdata.
sd2
37732
MP&
M
pollutant
data
(
e.
g.,
awqc
values,
reference
dose,
cancer
slope
factor).

Data
created
hazrats.
sd2
Estimated
systemic
hazard
ratio
for
affected
RF1
reaches.

"
Drinking
Water
Cancer
(
Sub
6).
sas"
Data
utilized
bradout.
sd2
In­
stream
concentrations
for
six
carcinogens
on
affected
RF1
reaches
with
drinking
water
intakes
and
populations
exposed.

chemdata.
sd2
37732
MP&
M
pollutant
data
(
e.
g.,
awqc
values,
reference
dose,
cancer
slope
factor).
Programs
Used
in
the
National
Benefits
Run
Program
Name
Dataset
DCN
Description
6
Data
created
None
"
Systemic
Cancer
Assoc
DW
(
Sub
14).
sas"
Data
utilized
bradout.
sd2
In­
stream
concentrations
for
six
carcinogens
on
affected
RF1
reaches
with
drinking
water
intakes
and
populations
exposed.

chemdata.
sd2
37732
MP&
M
pollutant
data
(
e.
g.,
awqc
values,
reference
dose,
cancer
slope
factor).

Data
created
dwhazrat.
sd2
Systemic
hazard
ratios
associated
with
drinking
water
for
affected
RF1
reaches.

"
Fishing
Recreation
(
Sub
7).
sas"
Data
utilized
fish_
lic.
sd2
37733
County
level
fishing
license
data
for
the
United
States.

fac_
info.
sd2
37727
MP&
M
facility
and
discharge
RF1
reach
information.

us_
rchmi.
sd2
37736
Number
of
river
miles
by
county.

rchstate.
sd2
37737
Crosswalk
of
RF1
reach
numbers
and
the
state
in
which
the
reach
resides.

avgdfish.
sd2
37738
Average
number
of
seasonal
fishing
days
for
freshwater
and
saltwater
fishing
by
state.

rec_
hh.
sd2
Human
health
AWQC
exceedences
for
affected
RF1
reaches.

rec_
al.
sd2
Aquatic
life
AWQC
exceedences
for
affected
RF1
reaches.

Data
created
None
"
Other
Recreation
(
Sub
8).
sas"
Data
utilized
fac_
info.
sd2
37727
MP&
M
facility
and
discharge
RF1
reach
information.

us_
rchmi.
sd2
37736
Number
of
river
miles
by
county.

cntypop.
sd2
37739
Population
by
county.
Programs
Used
in
the
National
Benefits
Run
Program
Name
Dataset
DCN
Description
7
rchstate.
sd2
37737
Crosswalk
of
RF1
reach
numbers
and
the
state
in
which
the
reach
resides.

recpcts.
sd2
37740
Number
of
boating
and
nearwater
recreation
days
per
season
and
participation
percentages
by
state.

rec_
hh.
sd2
Human
health
AWQC
exceedences
for
affected
RF1
reaches.

rec_
al.
sd2
Aquatic
life
AWQC
exceedences
for
affected
RF1
reaches.

Data
created
exlrec.
xls
37745
Program
output
for
recreational
benefits.

"
POTW
Inhibitions
(
Sub
9).
sas"
Data
utilized
potw_
in.
sd2
MP&
M
pollutant
discharges
to
POTWs
prior
to
POTW
removals.

facsize.
sd2
37728
MP&
M
facility
size
(
small,
medium,
or
large)
based
on
discharge
flow.

potwevnt.
sd2
MP&
M
pollutant
discharge
events
to
POTWs.

chemdata.
sd2
37732
MP&
M
pollutant
data
(
e.
g.,
awqc
values,
reference
dose,
cancer
slope
factor).

Data
created
potwevnt.
sd2
MP&
M
pollutant
discharge
events
to
POTWs.

"
Sldg
MP&
M
Based
(
Sub
10).
sas"
Data
utilized
potwevnt.
sd2
MP&
M
pollutant
discharge
events
to
POTWs.

sldg_
cri.
sd2
37741
Sewage
sludge
criteria
for
the
eight
MP&
M
sludge
pollutants.

twf_
remr.
sd2
37729
MP&
M
pollutant
toxic
weighting
factors
and
POTW
removal
percentages.

Data
created
None
Programs
Used
in
the
National
Benefits
Run
Program
Name
Dataset
DCN
Description
8
"
Lead
Benefits
(
Sub
12).
sas"
Data
utilized
lead.
sd2
MP&
M
in­
stream
concentrations
for
Lead
on
affected
RF1
reaches.

Data
created
None
"
Subsistence
Lead
Benefits
(
Sub
17).
sas"
Data
utilized
lead.
sd2
MP&
M
in­
stream
concentrations
for
Lead
on
affected
RF1
reaches.

Data
created
exlleadw.
xls
37743
Program
output
for
adult
lead
benefits.

"
NeoNatal
Mortality
Benefits
(
Sub
15).
sas"
Data
utilized
lead.
sd2
MP&
M
in­
stream
concentrations
for
Lead
on
affected
RF1
reaches.

Data
created
None
"
Create
Lookup
Table.
sas"
Data
utilized
Gen4.
txt
37746
Output
dataset
from
the
IEUBK
model
run.

Data
created
ublook4.
sd2
37742
Crosswalk
of
lead
concentrations
in
fish
tissue
and
resulting
child
blood
lead
levels.

Cnc_
fmt3.
sas
20479
SAS
program
file
which
will
generate
a
custom
format
for
SAS.
This
format
equates
a
lead
concentration
in
fish
tissue
with
the
correct
row
in
the
ublook4
table
of
resulting
blood
lead
levels.

"
Cnc_
fmt3.
sas"
Data
utilized
none
Data
created
custom
SAS
format
The
custom
format
`
cnc_
fmt'
is
created
and
placed
in
the
formats
library.

"
Child
Lead
Benefits
(
Sub
16).
sas"
Data
utilized
lead.
sd2
MP&
M
in­
stream
concentrations
for
Lead
on
affected
RF1
reaches.

ublook4.
sd2
37742
Crosswalk
of
lead
concentrations
in
fish
tissue
and
resulting
child
blood
lead
levels.

Data
created
exlchld.
xls
37744
Program
output
for
child
lead
benefits.
Programs
Used
in
the
National
Benefits
Run
Program
Name
Dataset
DCN
Description
9
"
Hazard
Ratio
Tables.
sas"
Data
utilized
hazrats.
sd2
Estimated
systemic
hazard
ratio
for
affected
RF1
reaches.

dwhazrat.
sd2
Systemic
hazard
ratios
associated
with
drinking
water
for
affected
RF1
reaches.

Data
created
None
10
Estimating
MP&
M
Discharge
Loadings
11
"
Master
Benefits
preferred.
sas"
This
program
calls
on
all
sub­
programs
and
executes
their
code.
12
/*
Program:
Master
Benefits
Preferred.
sas
Author:
Stuart
Smith
Date:
09/
26/
2000
Updated:
3/
17/
2002
This
is
the
master
benefits
program
for
MP&
M
benefits
calculations
under
the
baseline
and
the
Preferred
Option.
This
program
calls
on
all
of
the
sub­
programs
and
executes
their
code.
This
allows
for
the
running
of
one
program
to
accomplish
the
estimation
of
each
of
the
subroutines.
*/

/*****************************************************************************/
/*****************************************************************************/
/*
Administrative
Requirements
*/
/*****************************************************************************/
/*****************************************************************************/

/*
Static
Library
*/
libname
mpm2
'
H:\
ENVR\
Triton05
MP&
M\
Benefits\
MP&
M
Phase
2
Analysis\
Data\
SAS
Sets
for
Analysis\';
/*
Static
Data
Sets
*/

/*
Run
Specific
Library
*/
libname
rundat
'
H:\
ENVR\
Triton05
MP&
M\
Benefits\
MP&
M
Phase
2
Analysis\
Data\
Runs\
td\
Prefered\';

/*
Run
Specific
LOADINGS
file
in
SAS
format
*/
data
load;
set
rundat.
td_
pf;
run;

/*
Set
the
Overall
Title
for
Output
*/
title
'
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)';

/*****************************************************************************/
/*****************************************************************************/
/*
Read
in
Loadings
Data
*/
/*
*/
/*
This
is
the
main
set
of
loadings
from
the
Access
DB.
All
cutoffs
and
*/
/*
various
other
option
settings
have
been
done
in
Access.
*/
/*****************************************************************************/
/*****************************************************************************/

/*
CALCULATE
LOADINGS
PER
DAY
IN
UG/
DAY,
LOADINGS
GIVEN
IN
LBS/
YEAR
CONVERSION
FACTOR
UG/
KG
is
10**
9
CONVERSION
FACTOR
LB/
KG
is
0.4535924
EVENT
FREQUENCY
FOR
HUMAN
HEALTH
IS
365
DAYS
Grab
indirect
and
direct
dischargers
only
I
=
indirect
(
always
included)
D
=
direct
(
always
included)
CH
=
contract
hauling
(
currently
excluded,
only
1
facility)
Z
=
zero
discharge
(
never
included)
R
=
recycled
(
never
included)

Baseline
closures
are
accounted
for
by
including
the
baseclos
dataset.
If
13
base
=
1
then
the
facility
is
open
in
the
baseline
and
is
included
in
the
analysis.
Incremental
closures
are
also
included
by
testing
to
see
if
opt5
variable
is
equal
to
1.
If
equal
to
1,
the
facility
closes
due
to
the
regulation
and
its
loadings
are
set
to
0.
*/

proc
sql;
create
table
loads
as
select
siteid,
casnum
as
casno,
((
loads0/
365)
*
0.4535924
*
10**
9)
as
base,
case
when
loads5
is
missing
then
((
loads0/
365)
*
0.4535924
*
10**
9)
when
loads5
<
0
or
opt5
=
1
then
0
else
((
loads5/
365)
*
0.4535924
*
10**
9)
end
as
treat1,
0
as
treat2,
sitedest,
weights
from
load,
mpm2.
poll2cas,
mpm2.
baseclos
where
loads0
is
not
missing
and
pollcode=
polluta1
and
sitedest
in
('
I','
D')
and
load.
siteid
=
baseclos.
sid
and
base
=
1
order
by
siteid;
quit;

/*
Table
Loads
is
now
the
base
loadings
table
for
use
in
the
analysis.
It
contains
all
necessary
loadings
information
for
included
facilities
both
indirect
and
direct
dischargers.
*/

/*****************************************************************************/
/*****************************************************************************/
/*
Sub
1:
Generate
the
Discharge
Events
*/
/*****************************************************************************/
/*****************************************************************************/

/*
Full
name:
Generate
Discharge
Events
(
Sub
1).
sas
*/
%
include
'
H:\
ENVR\
Triton05
MP&
M\
Benefits\
MP&
M
Phase
2
Analysis\
Programs\
subroutines\
Generate
Discharge
Events
(
Sub
1).
sas'
/
source2;

/*****************************************************************************/
/*****************************************************************************/
/*
Sub
2:
Human
Health
AWQC
Exceedences
*/
/*****************************************************************************/
/*****************************************************************************/

/*
Full
name:
Human
Health
AQWC
(
Sub
2).
sas
*/
%
include
'
H:\
ENVR\
Triton05
MP&
M\
Benefits\
MP&
M
Phase
2
Analysis\
Programs\
subroutines\
Human
Health
AWQC
(
Sub
2).
sas'
/
source2;

/*****************************************************************************/
/*****************************************************************************/
/*
Sub
3:
Aquatic
Life
AWQC
Exceedences
*/
/*****************************************************************************/
/*****************************************************************************/
14
/*
Full
name:
Aquatic
Life
AQWC
(
Sub
3).
sas
*/
%
include
'
H:\
ENVR\
Triton05
MP&
M\
Benefits\
MP&
M
Phase
2
Analysis\
Programs\
subroutines\
Aquatic
Life
AWQC
(
Sub
3).
sas'
/
source2;

/*****************************************************************************/
/*****************************************************************************/
/*
Sub
4:
Cancer
from
Fish
Consumption
*/
/*****************************************************************************/
/*****************************************************************************/

/*
Full
name:
Cancer­
Fish
(
Sub
4).
sas
*/
%
include
'
H:\
ENVR\
Triton05
MP&
M\
Benefits\
MP&
M
Phase
2
Analysis\
Programs\
subroutines\
Cancer­
fish
(
Sub
4).
sas'
/
source2;

/*****************************************************************************/
/*****************************************************************************/
/*
Sub
5:
Systemic
Cancer
from
Fish
Consumption
*/
/*****************************************************************************/
/*****************************************************************************/

/*
Full
name:
Systemic
Cancer
(
Sub
5).
sas
*/
%
include
'
H:\
ENVR\
Triton05
MP&
M\
Benefits\
MP&
M
Phase
2
Analysis\
Programs\
subroutines\
Systemic
Cancer
(
Sub
5).
sas'
/
source2;

/*****************************************************************************/
/*****************************************************************************/
/*
Sub
6:
Drinking
Water
Cancer
*/
/*****************************************************************************/
/*****************************************************************************/

/*
Full
name:
Drinking
Water
Cancer
(
Sub
6).
sas
*/
%
include
'
H:\
ENVR\
Triton05
MP&
M\
Benefits\
MP&
M
Phase
2
Analysis\
Programs\
subroutines\
Drinking
Water
Cancer
(
Sub
6).
sas'
/
source2;

/*****************************************************************************/
/*****************************************************************************/
/*
Sub
14:
Systemic
Cancer
from
Drinking
Water
*/
/*****************************************************************************/
/*****************************************************************************/

/*
Full
name:
Systemic
Cancer
Assoc
DW
(
Sub
14).
sas
*/
%
include
'
H:\
ENVR\
Triton05
MP&
M\
Benefits\
MP&
M
Phase
2
Analysis\
Programs\
subroutines\
Systemic
Cancer
Assoc
DW
(
Sub
14).
sas'
/
source2;

/*****************************************************************************/
/*****************************************************************************/
/*
Sub
7:
Fishing
Recreation
*/
/*****************************************************************************/
/*****************************************************************************/

/*
Full
name:
Fishing
Recreation
(
Sub
7).
sas
*/
%
include
'
H:\
ENVR\
Triton05
MP&
M\
Benefits\
MP&
M
Phase
2
Analysis\
Programs\
subroutines\
Fishing
Recreation
(
Sub
7).
sas'
/
source2;
15
/*****************************************************************************/
/*****************************************************************************/
/*
Sub
8:
Other
Recreation
*/
/*****************************************************************************/
/*****************************************************************************/

/*
Full
name:
Other
Recreation
(
Sub
8).
sas
*/
%
include
'
H:\
ENVR\
Triton05
MP&
M\
Benefits\
MP&
M
Phase
2
Analysis\
Programs\
subroutines\
Other
Recreation
(
Sub
8).
sas'
/
source2;

/*****************************************************************************/
/*****************************************************************************/
/*
Sub
9:
POTW
Inhibitions
*/
/*****************************************************************************/
/*****************************************************************************/

/*
Full
name:
POTW
Inhibitions
(
Sub
9).
sas
*/
%
include
'
H:\
ENVR\
Triton05
MP&
M\
Benefits\
MP&
M
Phase
2
Analysis\
Programs\
subroutines\
POTW
Inhibitions
(
Sub
9).
sas'
/
source2;

/*****************************************************************************/
/*****************************************************************************/
/*
Sub
10:
Sludge
­
MP&
M
Based
*/
/*****************************************************************************/
/*****************************************************************************/

/*
Full
name:
Sldg
MP&
M
Based
(
Sub
10).
sas
*/
%
include
'
H:\
ENVR\
Triton05
MP&
M\
Benefits\
MP&
M
Phase
2
Analysis\
Programs\
subroutines\
Sldg
MP&
M
Based
(
Sub
10).
sas'
/
source2;

/*****************************************************************************/
/*****************************************************************************/
/*
Sub
12:
Lead
Benefits
­
Recreational
Fishers
*/
/*****************************************************************************/
/*****************************************************************************/

/*
Full
name:
Lead
Benefits
(
Sub
12).
sas
*/
%
include
'
H:\
ENVR\
Triton05
MP&
M\
Benefits\
MP&
M
Phase
2
Analysis\
Programs\
subroutines\
Lead
Benefits
(
Sub
12).
sas'
/
source2;

/*****************************************************************************/
/*****************************************************************************/
/*
Sub
17:
Lead
Benefits
­
Subsistence
Fishers
*/
/*****************************************************************************/
/*****************************************************************************/

/*
Full
name:
Subsistence
Lead
Benefits
(
Sub
17).
sas
*/
%
include
'
H:\
ENVR\
Triton05
MP&
M\
Benefits\
MP&
M
Phase
2
Analysis\
Programs\
subroutines\
Subsistence
Lead
Benefits
(
Sub
17).
sas'
/
source2;

/*****************************************************************************/
/*****************************************************************************/
/*
Sub
15:
NeoNatal
Mortality
Benefits
*/
16
/*****************************************************************************/
/*****************************************************************************/

/*
Full
name:
NeoNatal
Mortality
Benefits
(
Sub
15).
sas
*/
%
include
'
H:\
ENVR\
Triton05
MP&
M\
Benefits\
MP&
M
Phase
2
Analysis\
Programs\
subroutines\
NeoNatal
Mortality
Benefits
(
Sub
15).
sas'
/
source2;

/*****************************************************************************/
/*****************************************************************************/
/*
Sub
16:
Child
Lead
Benefits
*/
/*****************************************************************************/
/*****************************************************************************/

/*
Full
name:
Child
Lead
Benefits
(
Sub
16).
sas
*/
%
include
'
H:\
ENVR\
Triton05
MP&
M\
Benefits\
MP&
M
Phase
2
Analysis\
Programs\
subroutines\
Child
Lead
Benefits
(
Sub
16).
sas'
/
source2;

/*****************************************************************************/
/*****************************************************************************/
/*
Sub
13:
Tally
Loadings
by
Chemical
Groups
*/
/*****************************************************************************/
/*****************************************************************************/

/*
Full
name:
Tally
Loadings
(
Sub
13)
pref.
sas
*/
%
include
'
H:\
ENVR\
Triton05
MP&
M\
Benefits\
MP&
M
Phase
2
Analysis\
Programs\
subroutines\
Tally
Loadings
(
Sub
13)
pref.
sas'
/
source2;

/*****************************************************************************/
/*****************************************************************************/
/*
Sub
18:
Toxic
Weighted
Loadings
for
Lead
Only
*/
/*****************************************************************************/
/*****************************************************************************/

/*
Full
name:
Toxic
Weight
Loadings
(
Sub
18)
pref.
sas
*/
%
include
'
H:\
ENVR\
Triton05
MP&
M\
Benefits\
MP&
M
Phase
2
Analysis\
Programs\
subroutines\
Toxic
Weight
Loadings
(
Sub
18)
pref.
sas'
/
source2;

quit;

/*
End
Master
Benefits
Preferred.
sas
*/
17
"
Generate
Discharge
Events
(
Sub
1).
sas"
Using
the
generated
set
of
MP&
M
facility
loadings,
a
data
set
of
pollutant
loading
events
and
their
corresponding
weights
for
each
RF1
reach
receiving
MP&
M
discharges
is
created.
18
/*
Program:
Generate
Discharge
Events
(
Sub
1).
sas
Author:
Abt
Associates
Inc.;
Stuart
Smith
based
on
Event1.
sas
by
Rob
Sartain
Date:
04/
21/
2000
Updated:
09/
04/
2002
This
subroutine
calculates
the
number
of
discharge
events
per
reach
based
on
loadings
and
sample
facility
weights.
An
event
is
a
combination
of
direct
discharge
facilities
and
indirect
facilities
total
discharges
to
a
given
POTW
for
each
pollutant
on
a
given
reach.
Event
weights
are
assigned
per
Appendix
C
of
the
MP&
M
Phase
1
analysis.

SAMPLE
BASED
ANALYSIS
­
If
the
run
is
doing
a
sample
based
analysis
rather
than
the
national
analysis,
the
weights
for
the
facilities
will
have
been
set
to
1
in
the
Master
benefits
program.
Thus,
only
one
event
exists
per
potw/
chemical/
reach
combination
and
the
resulting
events
data
set
will
not
contain
multiple
events
for
a
given
chemical
reach
as
would
occur
if
facility
weights
other
than
1
were
used.
*/

title2
'
Generation
of
Discharge
Events
Program
Output
(
Sub
1)';

/*
MERGE
FACILITY
AND
LOADINGS
TO
CREATE
THREE
FILES.

1.
INDIRECT
DISCHARGERS
2.
DIRECT
DISCHARGERS
3.
FACILITIES
WITH
NO
REACH
INFORMATION
(
REACHNMB)
*/

data
facs;
set
mpm2.
fac_
info;
run;

proc
sort
data=
facs;
by
siteid;
quit;
proc
sort
data=
mpm2.
facsize;
by
siteid;
quit;

data
facsze;
set
mpm2.
facsize;
keep
siteid
facflow;
run;

data
facs2;
merge
facs
facsze;
by
siteid;

/*
Correct
for
missing
POTW
flow
data.
Average
Flow
substituted
for
missing
values,
calculated
based
on
flows
for
POTW
dischargers
that
are
classified
as
non­
major
in
PCS
database.
Flow
is
in
million
of
gallons
per
year
*/
if
potwflow
=
.
or
potwflow
=
0
then
potwflow
=
171.404;

/*
End
correction
for
missing
POTW
flow
data
*/
19
/*
Correction
for
missing
facility
flow
data
for
direct
dischargers
*/

if
facflow=.
or
facflow
=
0
then
facflow
=
10216483.2862;
/*
gal/
year
*/

/*
End
correction
for
missing
Facility
flow
data
*/

poflow
=
(
potwflow/
365)
*
10**
6
*
3.875;/*
Convert
from
mln/
gal/
yr
to
L/
day*/
fac_
flow
=
(
facflow/
365)
*
3.875;
/*
Convert
from
gal/
yr
to
L/
day
*/

npdes
=
potw_
npd;
keep
siteid
fac_
flow
poflow
reachnmb
npdes
segl
mnflo
svten
acute
chronic
dcp
wbtype
surface
drainage
volume;
run;

proc
sql;

/*
Merge
loadings
and
facility
data
*/
create
table
loads3
as
select
loads.
siteid,
casno,
base,
treat1,
treat2,
sitedest,
weights,
reachnmb,
fac_
flow,
poflow,
npdes,
segl,
mnflo,
svten,
acute,
chronic,
dcp,
wbtype,
surface,
drainage,
volume
from
loads,
facs2
where
loads.
siteid
=
facs2.
siteid
order
by
reachnmb,
casno;

/*
Account
for
POTW
removals
for
indirect
dischargers
*/
create
table
loads4
as
select
reachnmb,
casno,
weights,
sitedest,
npdes,
fac_
flow,
poflow,
case
when
sitedest
=
'
I'
then
(
case
when
potw_
rem
is
missing
then
base
else
base*(
1­(
potw_
rem/
100))
end)
else
base
end
as
base_
rm,
case
when
sitedest
=
'
I'
then
(
case
when
potw_
rem
is
missing
then
treat1
else
treat1*(
1­(
potw_
rem/
100))
end)
else
treat1
end
as
treat1rm,
case
when
sitedest
=
'
I'
then
(
case
when
potw_
rem
is
missing
then
treat2
else
treat2*(
1­(
potw_
rem/
100))
end)
else
treat2
end
as
treat2rm,
siteid,
segl,
mnflo,
svten,
acute,
chronic,
dcp,
wbtype,
surface,
drainage,
volume
from
loads3,
mpm2.
twf_
remr
where
loads3.
casno
=
twf_
remr.
cas
order
by
reachnmb,
casno,
weights;
quit;

data
evntflo1;
set
loads3;
run;

proc
sort
data=
evntflo1;
by
reachnmb
npdes
siteid;
quit;
20
/*
Pull
out
the
flow
to
a
given
reach
from
a
facility
or
the
POTW
to
which
it
discharges
*/

data
evntflo2;
set
evntflo1;
by
reachnmb
npdes
siteid;

if
sitedest
=
'
I'
and
not
first.
npdes
then
delete;
if
sitedest
=
'
D'
and
not
first.
siteid
then
delete;

if
sitedest
=
'
I'
then
flow
=
poflow;
else
flow
=
fac_
flow;

keep
reachnmb
flow;
run;

proc
sql;

/*
Sum
the
loadings
for
each
pollutant
to
a
given
reach
to
obtain
the
total
loadings
discharged
to
the
reach
*/

create
table
loads5
as
select
loads4.
reachnmb,
loads4.
casno,
weights,
sitedest,
npdes,
fac_
flow,
case
when
sitedest
=
'
I'
then
poflow
else
0
end
as
potflow,
base_
rm,
treat1rm,
treat2rm,
siteid,
sum(
base_
rm)
as
tot_
base,
sum(
treat1rm)
as
tot_
trt1,
sum(
treat2rm)
as
tot_
trt2,
segl,
mnflo,
svten,
acute,
chronic,
dcp,
wbtype,
surface,
drainage,
volume
from
loads4
group
by
reachnmb,
casno
order
by
reachnmb,
casno,
weights;

/*
Indirects:
Sum
the
loadings
for
each
pollutant
on
a
reach
by
POTW
and
sample
weight
*/

create
table
loads5a
as
select
reachnmb,
casno,
weights,
min(
sitedest)
as
sitedest,
npdes,
min(
fac_
flow)
as
fac_
flow,
min(
potflow)
as
potflow,
min(
tot_
base)
as
tot_
base,
min(
tot_
trt1)
as
tot_
trt1,
min(
tot_
trt2)
as
tot_
trt2,
min(
segl)
as
segl,
min(
mnflo)
as
mnflo,
min(
svten)
as
svten,
min(
acute)
as
acute,
min(
chronic)
as
chronic,
min(
dcp)
as
dcp,
min(
wbtype)
as
wbtype,
min(
surface)
as
surface,
min(
drainage)
as
drainage,
min(
volume)
as
volume,
sum(
base_
rm)
as
base,
sum(
treat1rm)
as
treat1,
sum(
treat2rm)
as
treat2
from
loads5
where
sitedest
=
'
I'
group
by
reachnmb,
casno,
npdes,
weights
order
by
reachnmb,
casno,
weights;

/*
Pull
out
the
Direct
discharge
facilities
only
*/
21
create
table
loads5b
as
select
reachnmb,
casno,
weights,
sitedest,
npdes,
fac_
flow,
potflow,
tot_
base,
tot_
trt1,
tot_
trt2,
segl,
mnflo,
svten,
acute,
chronic,
dcp,
wbtype,
surface,
drainage,
volume,
base_
rm
as
base,
treat1rm
as
treat1,
treat2rm
as
treat2
from
loads5
where
sitedest
=
'
D'
order
by
reachnmb,
casno,
weights;

/*
Pull
together
the
Indirects
and
Directs
back
into
one
table
*/

create
table
loads5c
as
select
*
from
loads5a
union
corresponding
select
*
from
loads5b
order
by
reachnmb,
casno,
weights;

/*
Determine
the
total
flow
for
events
on
a
given
reach
*/

create
table
evntflo3
as
select
reachnmb,
sum(
flow)
as
evnt_
flo
from
evntflo2
group
by
reachnmb
order
by
reachnmb;

/*
Merge
in
the
event
flow
data
by
reach
with
the
loadings
data
*/

create
table
loads6
as
select
loads5c.*,
evnt_
flo
from
loads5c,
evntflo3
where
loads5c.
reachnmb
=
evntflo3.
reachnmb
order
by
loads5c.
reachnmb,
casno,
weights,
sitedest;
quit;

/*
OUTPUT
THE
INDIRECT
TABLE
FOR
USE
IN
THE
POTW
INHIBITION
PROGRAM
*/

data
rundat.
potw_
in;
set
loads3;

if
reachnmb
=
.
then
delete;
if
sitedest
^=
'
I'
then
delete;
/*
keep
only
indirects
*/
run;

/*
CALCULATE
THE
EVENTS
AND
LOADINGS
*/

Data
events;
set
loads6;
by
reachnmb
casno
weights;
keep
outreach
outcas
outload0
outload1
outload2
outflow
outwt
segl
mnflo
svten
acute
chronic
dcp
wbtype
surface
drainage
volume;
retain
oldreach
oldcas
oldload0
oldload1
oldload2
oldflow
oldwt
oldnpdes
oldpoflo
prevwt;
22
if
first.
casno
then
do;
oldnpdes
=
npdes;
oldpoflo
=
potflow;
oldreach
=
reachnmb;
oldcas
=
casno;
oldload0
=
tot_
base;
oldload1
=
tot_
trt1;
oldload2
=
tot_
trt2;
oldflow
=
evnt_
flo;
oldwt
=
weights;
prevwt
=
0;

if
last.
casno
then
do;
/*
SINGLE
DISCHARGE
EVENT
*/
outreach
=
oldreach;
outcas
=
oldcas;
outflow
=
oldflow;
outload0
=
oldload0;
outload1
=
oldload1;
outload2
=
oldload2;
outwt
=
oldwt;
output;
return;
end;
end;

/*
MULTIPLE
EVENTS
*/
/*
OUTPUT
THE
CURRENT
EVENT
*/
outreach
=
oldreach;
outcas
=
oldcas;
if
sitedest
=
'
I'
then
do;
/*
indirect
discharger
*/
if
oldnpdes
^=
npdes
then
outflow
=
oldflow
­
oldpoflo;
else
outflow
=
oldflow;
end;
else
do;
/*
direct
discharger
*/
if
last.
casno
then
outflow
=
fac_
flow;
else
outflow
=
oldflow;
end;
outload0
=
oldload0;
outload1
=
oldload1;
outload2
=
oldload2;
outwt
=
weights
­
prevwt;
if
outwt
=
0
then
outwt
=
weights;
output;

/*
SUBTRACT
CURRENT
LOADS
FROM
TOTAL
*/
oldnpdes
=
npdes;
oldpoflo
=
potflow;
oldreach
=
reachnmb;
oldcas
=
casno;
oldload0
=
oldload0
­
base;
oldload1
=
oldload1
­
treat1;
oldload2
=
oldload2
­
treat2;
if
sitedest
=
'
D'
then
23
oldflow
=
outflow
­
fac_
flow;
else
oldflow
=
outflow;
oldwt
=
outwt;
prevwt
=
outwt;
run;

/*
Output
the
results
to
the
event
loadings
dataset
to
be
used
by
other
subroutines.
*/

Data
rundat.
event_
ld;
set
events;

if
outreach
=
.
then
delete;
/*
delete
obs
for
which
reach
is
unknown
*/
if
outload0
=
.
then
delete;
/*
delete
obs
with
no
base
loadings
*/

if
outflow
<
0
then
outflow
=
0;
if
outload1
<
0
then
outload1
=
0;
if
outload2
<
0
then
outload2
=
0;

rename
outreach
=
reachnmb
outcas
=
casno
outload0
=
base
outload1
=
treat1
outload2
=
treat2
outflow
=
evnt_
flo
outwt
=
event_
wt;

label
outreach
=
'
RF1
Reach
Identifier'
outcas
=
'
CAS
Chemical
Identifier'
outload0
=
'
Base
loadings
in
ug/
L'
outload1
=
'
Treated
loadings
in
ug/
L
Option
1'
outload2
=
'
Treated
loadings
in
ug/
L
Option
2'
outflow
=
'
Event
Flow
rate
in
L/
day'
outwt
=
'
Event
Weight';
run;

proc
sort
data=
rundat.
event_
ld
nodupkey;
by
reachnmb
casno
event_
wt;
quit;

title3
'
Events
and
Loadings
(
Sample
of
10
obs.)';
Proc
print
data
=
rundat.
event_
ld(
firstobs=
1
obs=
10);
quit;

/*
End
Generate
Discharge
Events
(
Sub
1).
sas
*/
24
"
Tally
Loadings
(
Sub
13)
pref.
sas"
Using
the
generated
set
of
MP&
M
facility
loadings,
aggregate
discharge
loads
for
various
pollutants
is
estimated.
25
/*
Program:
Tally
Loadings
(
Sub
13)
pref.
sas
Author:
Stuart
Smith
(
from
Load_
fnl.
sas
Elena
Besedin,
Ron
Sartain)
Date
Modified:
07/
15/
2002
*/

title2
'
Tally
Loadings
Preferred
(
Sub
13)';

/*
Run
Specific
LOADINGS
file
in
SAS
format
*/
data
load;
set
rundat.
td_
pf;
run;

/*
Get
loadings
for
sample
facilities*/

/*
reset
loadings
for
different
cutoffs
*/

proc
sql;
create
table
facload
as
select
siteid,
casnum
as
casno,
weights
as
weight,
loads0
as
baseload,
case
when
loads5
<
0
or
opt5
=
1
then
0
else
loads5
end
as
treat1,
0
as
treat2,
sitedest,
potw_
rem
from
load,
mpm2.
baseclos,
mpm2.
twf_
remr
where
load.
siteid
=
baseclos.
sid
and
base
=
1
and
load.
casnum
=
twf_
remr.
cas
order
by
siteid,
casno;
quit;

/*
POTW
Removals
for
Indirects
*/

data
facloads;
set
facload;

if
sitedest
=
'
I'
then
do;
baseload
=
baseload*(
1­(
potw_
rem/
100));
treat1
=
treat1*(
1­(
potw_
rem/
100));
treat2
=
treat2*(
1­(
potw_
rem/
100));
end;
run;

proc
sql;

/*
calculate
total
loadings
from
MP&
M
Facilities
nationwide
*/

/*
Loads
from
indirects
without
POTW
removals
*/
create
table
indload
as
select
sum(
baseload*
weight)
as
baseld,
sum(
treat1*
weight)
as
newld1,
sum(
treat2*
weight)
as
newld2,
sum(
baseload)
as
sample_
b,
sum(
treat1)
as
sample_
1,
sum(
treat2)
as
sample_
2,
count(
distinct
casno)
as
pollts
from
facload
where
sitedest
=
'
I'
and
casno
not
in
('
C010','
C003');
/*
remove
TDS
and
BOD*/
26
/*
Loads
from
indirects
*/
create
table
ntlload
as
select
sum(
baseload*
weight)
as
baseld,
sum(
treat1*
weight)
as
newld1,
sum(
treat2*
weight)
as
newld2,
sum(
baseload)
as
sample_
b,
sum(
treat1)
as
sample_
1,
sum(
treat2)
as
sample_
2,
count(
distinct
casno)
as
pollts
from
facloads
where
sitedest
=
'
I'
and
casno
not
in
('
C010','
C003');
/*
remove
TDS
and
BOD*/

/*
Loads
from
directs
*/
create
table
ntlloadd
as
select
sum(
baseload*
weight)
as
baseld,
sum(
treat1*
weight)
as
newld1,
sum(
treat2*
weight)
as
newld2,
sum(
baseload)
as
sample_
b,
sum(
treat1)
as
sample_
1,
sum(
treat2)
as
sample_
2,
count(
distinct
casno)
as
pollts
from
facloads
where
sitedest
=
'
D'
and
casno
not
in
('
C010','
C003');/*
remove
TDS
and
BOD*/

/*
Inihibition
*/
create
table
inhval
as
select
sum(
baseload*
weight)
as
baseld,
sum(
treat1*
weight)
as
newld1,
sum(
treat2*
weight)
as
newld2,
sum(
baseload)
as
sample_
b,
sum(
treat1)
as
sample_
1,
sum(
treat2)
as
sample_
2,
count(
distinct
facloads.
casno)
as
pollts,
count(
distinct
chemdata.
casno)
as
chems
from
facloads,
mpm2.
chemdata
where
facloads.
casno=
chemdata.
casno
and
inhibit
is
not
missing;

/*
Aquatic
toxicity
chronic
*/
create
table
aqtox_
c
as
select
sum(
baseload*
weight)
as
baseld,
sum(
treat1*
weight)
as
newld1,
sum(
treat2*
weight)
as
newld2,
sum(
baseload)
as
sample_
b,
sum(
treat1)
as
sample_
1,
sum(
treat2)
as
sample_
2,
count(
distinct
facloads.
casno)
as
pollts,
count(
distinct
chemdata.
casno)
as
chems
from
facloads,
mpm2.
chemdata
where
facloads.
casno=
chemdata.
casno
and
fcval__
i
is
not
missing;

/*
Aquatic
toxicity
acute
*/
create
table
aqtox_
a
as
select
sum(
baseload*
weight)
as
baseld,
sum(
treat1*
weight)
as
newld1,
sum(
treat2*
weight)
as
newld2,
sum(
baseload)
as
sample_
b,
sum(
treat1)
as
sample_
1,
sum(
treat2)
as
sample_
2,
count(
distinct
facloads.
casno)
as
pollts,
count(
distinct
chemdata.
casno)
as
chems
from
facloads,
mpm2.
chemdata
where
facloads.
casno=
chemdata.
casno
and
faval__
i
is
not
missing;

/*
Sludge
biosolids
*/
create
table
biosol
as
select
sum(
baseload*
weight)
as
baseld,
sum(
treat1*
weight)
as
newld1,
sum(
treat2*
weight)
as
newld2,
sum(
baseload)
as
sample_
b,
sum(
treat1)
as
sample_
1,
sum(
treat2)
as
27
sample_
2,
count(
distinct
facloads.
casno)
as
pollts
from
facloads
where
casno='
7440382'
or
casno='
7439976'
or
casno='
7782492'
or
casno='
7439921'
or
casno='
7440020'
or
casno='
7440439'
or
casno='
7440508'
or
casno='
7440666';

/*
Human
health
carcinogens
*/
create
table
hh_
car
as
select
sum(
baseload*
weight)
as
baseld,
sum(
treat1*
weight)
as
newld1,
sum(
treat2*
weight)
as
newld2,
sum(
baseload)
as
sample_
b,
sum(
treat1)
as
sample_
1,
sum(
treat2)
as
sample_
2,
count(
distinct
facloads.
casno)
as
pollts,
count(
distinct
chemdata.
casno)
as
chems
from
facloads,
mpm2.
chemdata
where
facloads.
casno=
chemdata.
casno
and
slope_
fa
is
not
missing;

/*
Human
health
systemic
*/
create
table
hh_
sys
as
select
sum(
baseload*
weight)
as
baseld,
sum(
treat1*
weight)
as
newld1,
sum(
treat2*
weight)
as
newld2,
sum(
baseload)
as
sample_
b,
sum(
treat1)
as
sample_
1,
sum(
treat2)
as
sample_
2,
count(
distinct
facloads.
casno)
as
pollts,
count(
distinct
chemdata.
casno)
as
chems
from
facloads,
mpm2.
chemdata
where
facloads.
casno=
chemdata.
casno
and
referenc
is
not
missing;

/*
Hazardous
air
pollutants
*/
create
table
haps
as
select
sum(
baseload*
weight)
as
baseld,
sum(
treat1*
weight)
as
newld1,
sum(
treat2*
weight)
as
newld2,
sum(
baseload)
as
sample_
b,
sum(
treat1)
as
sample_
1,
sum(
treat2)
as
sample_
2,
count(
distinct
facloads.
casno)
as
pollts,
count(
distinct
chemdata.
casno)
as
chems
from
facloads,
mpm2.
chemdata
where
facloads.
casno=
chemdata.
casno
and
hazardou
=
1;

/*
Priority
pollutants
*/
create
table
pps
as
select
sum(
baseload*
weight)
as
baseld,
sum(
treat1*
weight)
as
newld1,
sum(
treat2*
weight)
as
newld2,
sum(
baseload)
as
sample_
b,
sum(
treat1)
as
sample_
1,
sum(
treat2)
as
sample_
2,
count(
distinct
facloads.
casno)
as
pollts,
count(
distinct
chemdata.
casno)
as
chems
from
facloads,
mpm2.
chemdata
where
facloads.
casno=
chemdata.
casno
and
priority
=
1;

/*
Conventional
pollutants
*/
create
table
convp
as
select
facloads.
casno,
sum(
baseload*
weight)
as
baseld,
sum(
treat1*
weight)
as
newld1,
sum(
treat2*
weight)
as
newld2,
sum(
baseload)
as
sample_
b,
sum(
treat1)
as
sample_
1,
sum(
treat2)
as
sample_
2,
count(
distinct
facloads.
casno)
as
pollts,
count(
distinct
28
chemdata.
casno)
as
chems
from
facloads,
mpm2.
chemdata
where
facloads.
casno=
chemdata.
casno
and
(
conventi=
1
or
facloads.
casno='
C037'
or
facloads.
casno='
C036'
or
facloads.
casno='
C021'
or
facloads.
casno='
C004')
group
by
facloads.
casno
order
by
casno;

/*
Other
pollutants
(
non­
conventional
non­
priority)
*/
create
table
otherp
as
select
sum(
baseload*
weight)
as
baseld,
sum(
treat1*
weight)
as
newld1,
sum(
treat2*
weight)
as
newld2,
sum(
baseload)
as
sample_
b,
sum(
treat1)
as
sample_
1,
sum(
treat2)
as
sample_
2,
count(
distinct
facloads.
casno)
as
pollts,
count(
distinct
chemdata.
casno)
as
chems
from
facloads,
mpm2.
chemdata
where
facloads.
casno=
chemdata.
casno
and
other_
po
=
1;

/*
Lead
only
*/
create
table
leadp
as
select
sum(
baseload*
weight)
as
baseld,
sum(
treat1*
weight)
as
newld1,
sum(
treat2*
weight)
as
newld2,
sum(
baseload)
as
sample_
b,
sum(
treat1)
as
sample_
1,
sum(
treat2)
as
sample_
2,
count(
distinct
facloads.
casno)
as
pollts,
count(
distinct
chemdata.
casno)
as
chems
from
facloads,
mpm2.
chemdata
where
facloads.
casno=
chemdata.
casno
and
facloads.
casno
=
'
7439921';

/*
Generate
an
output
table
of
all
values
*/

create
table
master
as
select
'
Sludge
Inhibition'
as
cat,
baseld
as
base,
newld1
as
opt2,
newld2
as
opt4,
chems
as
poll
from
inhval;
insert
into
master
select
'
Biosolids'
as
cat,
baseld
as
base,
newld1
as
opt2,
newld2
as
opt4,
8
as
poll
from
biosol;
insert
into
master
select
'
HAPs'
as
cat,
baseld
as
base,
newld1
as
opt2,
newld2
as
opt4,
chems
as
poll
from
haps;
insert
into
master
select
'
Acute
Toxics'
as
cat,
baseld
as
base,
newld1
as
opt2,
newld2
as
opt4,
chems
as
poll
from
aqtox_
a;
insert
into
master
select
'
Chronic
Toxics'
as
cat,
baseld
as
base,
newld1
as
opt2,
newld2
as
opt4,
chems
as
poll
from
aqtox_
c;
insert
into
master
select
'
Carcinogens'
as
cat,
baseld
as
base,
newld1
as
opt2,
newld2
as
opt4,
chems
as
poll
from
hh_
car;
insert
into
master
29
select
'
Systemic'
as
cat,
baseld
as
base,
newld1
as
opt2,
newld2
as
opt4,
chems
as
poll
from
hh_
sys;
quit;

proc
transpose
data=
master
out=
master2;
id
cat;
quit;

/*
Generate
an
output
table
of
all
Sample
values
*/
proc
sql;
create
table
sample
as
select
'
Sludge
Inhibition'
as
cat,
sample_
b
as
base,
sample_
1
as
opt2,
sample_
2
as
opt4,
chems
as
poll
from
inhval;
insert
into
sample
select
'
Biosolids'
as
cat,
sample_
b
as
base,
sample_
1
as
opt2,
sample_
2
as
opt4,
8
as
poll
from
biosol;
insert
into
sample
select
'
HAPs'
as
cat,
sample_
b
as
base,
sample_
1
as
opt2,
sample_
2
as
opt4,
chems
as
poll
from
haps;
insert
into
sample
select
'
Acute
Toxics'
as
cat,
sample_
b
as
base,
sample_
1
as
opt2,
sample_
2
as
opt4,
chems
as
poll
from
aqtox_
a;
insert
into
sample
select
'
Chronic
Toxics'
as
cat,
sample_
b
as
base,
sample_
1
as
opt2,
sample_
2
as
opt4,
chems
as
poll
from
aqtox_
c;
insert
into
sample
select
'
Carcinogens'
as
cat,
sample_
b
as
base,
sample_
1
as
opt2,
sample_
2
as
opt4,
chems
as
poll
from
hh_
car;
insert
into
sample
select
'
Systemic'
as
cat,
sample_
b
as
base,
sample_
1
as
opt2,
sample_
2
as
opt4,
chems
as
poll
from
hh_
sys;
quit;

proc
transpose
data=
sample
out=
sample2;
id
cat;
quit;

proc
print
data=
indload;
title3
'
National
Loads
to
POTWs
(
Indirects)';
title4
'(
minus
TDS
and
BOD)
­
No
POTW
Removal';
quit;
proc
print
data=
ntlload;
title3
'
National
Loads
From
Indirects)';
title4
'(
minus
TDS
and
BOD)
with
POTW
Removals';
quit;
30
proc
print
data=
ntlloadd;
title3
'
National
Loads
(
Direct
Dischargers)';
title4
'(
minus
TDS
and
BOD)';
quit;
proc
print
data=
master2;
title3
'
Master
List
for
Table
(
National)';
quit;
proc
print
data=
sample2;
title3
'
Master
List
for
Table
(
Sample)';
quit;
proc
print
data=
pps;
title3
'
Priority
Pollutants';
quit;
proc
print
data=
convp;
title3
'
Conventional
Pollutants';
quit;
proc
print
data=
otherp;
title3
'
Other
Pollutants';
quit;
proc
print
data=
leadp;
title3
'
Lead
Only';
quit;

/*
End
Tally
Loadings
(
Sub
13)
pref.
sas
*/
31
Program
Output
32
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
100
Tally
Loadings
Preferred
(
Sub
13)
10:
59
Friday,
February
7,
2003
National
Loads
to
POTWs
(
Indirects)
(
minus
TDS
and
BOD)
­
No
POTW
Removal
Obs
baseld
newld1
newld2
sample_
b
sample_
1
sample_
2
pollts
1
52828607.49
43893629.99
0
4806475.48
4075637.71
0
125
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
101
Tally
Loadings
Preferred
(
Sub
13)
10:
59
Friday,
February
7,
2003
National
Loads
From
Indirects)
(
minus
TDS
and
BOD)
with
POTW
Removals
Obs
baseld
newld1
newld2
sample_
b
sample_
1
sample_
2
pollts
1
10077218.72
8528356.68
0
913924.42
791702.15
0
125
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
102
Tally
Loadings
Preferred
(
Sub
13)
10:
59
Friday,
February
7,
2003
National
Loads
(
Direct
Dischargers)
(
minus
TDS
and
BOD)

Obs
baseld
newld1
newld2
sample_
b
sample_
1
sample_
2
pollts
1
6189635.41
776824.53
0
600976.17
15415.79
0
125
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
103
Tally
Loadings
Preferred
(
Sub
13)
10:
59
Friday,
February
7,
2003
Master
List
for
Table
(
National)

Sludge_
Acute_
Chronic_
Obs
_
NAME_
Inhibition
Biosolids
HAPs
Toxics
Toxics
Carcinogens
Systemic
1
base
1085041.35
252515.38
3077.40
867670.02
1153994.55
757.409
664914.91
2
opt2
534491.30
142700.00
2965.46
514371.22
577817.85
738.310
278042.76
3
opt4
0.00
0.00
0.00
0.00
0.00
0.000
0.00
4
poll
86.00
8.00
35.00
106.00
113.00
13.000
76.00
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
104
Tally
Loadings
Preferred
(
Sub
13)
10:
59
Friday,
February
7,
2003
Master
List
for
Table
(
Sample)

Sludge_
Acute_
Chronic_
Obs
_
NAME_
Inhibition
Biosolids
HAPs
Toxics
Toxics
Carcinogens
Systemic
1
base
84715.54
25152.00
271.186
72949.56
90249.10
53.6325
54303.37
2
opt2
51071.84
16239.92
259.948
49734.32
55106.36
52.3170
29014.17
3
opt4
0.00
0.00
0.000
0.00
0.00
0.0000
0.00
4
poll
86.00
8.00
35.000
106.00
113.00
13.0000
76.00
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
105
Tally
Loadings
Preferred
(
Sub
13)
10:
59
Friday,
February
7,
2003
Priority
Pollutants
Obs
baseld
newld1
newld2
sample_
b
sample_
1
sample_
2
pollts
chems
1
203020.90
120049.23
0
20098.93
13396.02
0
42
42
33
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
106
Tally
Loadings
Preferred
(
Sub
13)
10:
59
Friday,
February
7,
2003
Conventional
Pollutants
Obs
casno
baseld
newld1
newld2
sample_
b
sample_
1
sample_
2
pollts
chems
1
C003
1100228.77
935139.49
0
86962.85
71845.21
0
1
1
2
C004
13292030.29
8274711.02
0
1293954.32
724425.23
0
1
1
3
C009
703343.95
105601.16
0
48447.82
6640.22
0
1
1
4
C021
227814.74
116073.15
0
16542.73
11318.60
0
1
1
5
C036
553480.52
63043.46
0
49088.27
7596.90
0
1
1
6
C037
67427.43
4898.02
0
5329.76
57.54
0
1
1
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
107
Tally
Loadings
Preferred
(
Sub
13)
10:
59
Friday,
February
7,
2003
Other
Pollutants
Obs
baseld
newld1
newld2
sample_
b
sample_
1
sample_
2
pollts
chems
1
14807008.76
9016487.37
0
1397265.57
779484.80
0
81
81
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
108
Tally
Loadings
Preferred
(
Sub
13)
10:
59
Friday,
February
7,
2003
Lead
Only
Obs
baseld
newld1
newld2
sample_
b
sample_
1
sample_
2
pollts
chems
1
9555.45
6186.03
0
992.696
709.574
0
1
1
34
"
Toxic
Weight
Loadings
(
Sub
18)
pref.
sas"
Using
the
generated
set
of
MP&
M
facility
loadings,
aggregate
toxic
weighted
discharge
loads
for
various
pollutants
is
estimated.
35
/*
Program:
Toxic
Weight
Loadings
(
Sub
18)
pref.
sas
Author:
Stuart
Smith
(
from
Load_
fnl.
sas
Elena
Besedin,
Ron
Sartain)
Date
Modified:
07/
15/
2002
*/

title2
'
Toxic
Weight
Loadings
Preferred
(
Sub
18)
pref';

/*
Run
Specific
LOADINGS
file
in
SAS
format
*/
data
load;
set
rundat.
td_
pf;
run;

/*
Get
loadings
for
sample
facilities
*/

/*
reset
loadings
for
different
cutoffs
*/

proc
sql;
create
table
facload
as
select
siteid,
casnum
as
casno,
weights
as
weight,
loads0
as
baseload,
case
when
loads5
<
0
or
opt5
=
1
then
0
else
loads5
end
as
treat1,
0
as
treat2,
sitedest,
twf,
potw_
rem
from
load,
mpm2.
baseclos,
mpm2.
twf_
remr
where
load.
siteid
=
baseclos.
sid
and
base
=
1
and
load.
casnum
=
twf_
remr.
cas
order
by
siteid,
casno;

quit;

/*
POTW
Removals
for
Indirects
*/

data
facloads;
set
facload;

if
sitedest
=
'
I'
then
do;
baseload
=
baseload*(
1­(
potw_
rem/
100));
treat1
=
treat1*(
1­(
potw_
rem/
100));
treat2
=
treat2*(
1­(
potw_
rem/
100));
end;
run;

proc
sql;

/*
Loads
from
indirects
*/
create
table
ntlload
as
select
sum(
baseload*
weight*
twf)
as
baseld,
sum(
treat1*
weight*
twf)
as
newld1,
sum(
treat2*
weight*
twf)
as
newld2,
sum(
baseload*
twf)
as
sample_
b,
sum(
treat1*
twf)
as
sample_
1,
sum(
treat2*
twf)
as
sample_
2,
count(
distinct
casno)
as
pollts
from
facloads
where
sitedest
=
'
I'
and
casno
not
in
('
C010','
C003');
/*
remove
TDS
and
BOD*/
36
/*
Loads
from
directs
*/
create
table
ntlloadd
as
select
sum(
baseload*
weight*
twf)
as
baseld,
sum(
treat1*
weight*
twf)
as
newld1,
sum(
treat2*
weight*
twf)
as
newld2,
sum(
baseload*
twf)
as
sample_
b,
sum(
treat1*
twf)
as
sample_
1,
sum(
treat2*
twf)
as
sample_
2,
count(
distinct
casno)
as
pollts
from
facloads
where
sitedest
=
'
D'
and
casno
not
in
('
C010','
C003');/*
remove
TDS
and
BOD*/

/*
Human
health
carcinogens
*/
create
table
hh_
car
as
select
sum(
baseload*
weight*
twf)
as
baseld,
sum(
treat1*
weight*
twf)
as
newld1,
sum(
treat2*
weight*
twf)
as
newld2,
sum(
baseload*
twf)
as
sample_
b,
sum(
treat1*
twf)
as
sample_
1,
sum(
treat2*
twf)
as
sample_
2,
count(
distinct
facloads.
casno)
as
pollts,
count(
distinct
chemdata.
casno)
as
chems
from
facloads,
mpm2.
chemdata
where
facloads.
casno=
chemdata.
casno
and
slope_
fa
is
not
missing;

/*
Generate
lead
loadings
*/
create
table
leadp
as
select
sum(
baseload*
weight*
twf)
as
baseld,
sum(
treat1*
weight*
twf)
as
newld1,
sum(
treat2*
weight*
twf)
as
newld2,
sum(
baseload*
twf)
as
sample_
b,
sum(
treat1*
twf)
as
sample_
1,
sum(
treat2*
twf)
as
sample_
2,
count(
distinct
facloads.
casno)
as
pollts,
count(
distinct
chemdata.
casno)
as
chems
from
facloads,
mpm2.
chemdata
where
facloads.
casno=
chemdata.
casno
and
facloads.
casno
=
'
7439921';
quit;

proc
print
data=
ntlload;
title3
'
Toxic
Wght
National
Loads
to
POTWs
(
Indirects)';
title4
'(
minus
TDS
and
BOD)';
quit;

proc
print
data=
ntlloadd;
title3
'
Toxic
Wght
National
Loads
(
Direct
Dischargers)';
title4
'(
minus
TDS
and
BOD)';
quit;

proc
print
data=
hh_
car;
title3
'
Toxic
Wght
Carcinogens
Only';
quit;

proc
print
data=
leadp;
title3
'
Toxic
Wght
Lead
Only';
quit;

/*
End
Toxic
Weight
Loadings
(
sub18)
pref.
sas
*/
37
Program
Output
38
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
109
Toxic
Weight
Loadings
Preferred
(
Sub
18)
pref
Toxic
Wght
National
Loads
to
POTWs
(
Indirects)
(
minus
TDS
and
BOD)
10:
59
Friday,
February
7,
2003
Obs
baseld
newld1
newld2
sample_
b
sample_
1
sample_
2
pollts
1
173881.13
87237.62
0
17292.04
10363.93
0
125
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
110
Toxic
Weight
Loadings
Preferred
(
Sub
18)
pref
Toxic
Wght
National
Loads
(
Direct
Dischargers)
(
minus
TDS
and
BOD)
10:
59
Friday,
February
7,
2003
Obs
baseld
newld1
newld2
sample_
b
sample_
1
sample_
2
pollts
1
3351.06
667.698
0
296.557
13.5975
0
125
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
111
Toxic
Weight
Loadings
Preferred
(
Sub
18)
pref
Toxic
Wght
Carcinogens
Only
10:
59
Friday,
February
7,
2003
Obs
baseld
newld1
newld2
sample_
b
sample_
1
sample_
2
pollts
chems
1
948.160
942.029
0
79.5478
78.7230
0
13
13
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
112
Toxic
Weight
Loadings
Preferred
(
Sub
18)
pref
Toxic
Wght
Lead
Only
10:
59
Friday,
February
7,
2003
Obs
baseld
newld1
newld2
sample_
b
sample_
1
sample_
2
pollts
chems
1
21022.00
13609.27
0
2183.93
1561.06
0
1
1
39
Human
Health
Benefits
40
Cancer
from
Fish
Consumption
41
"
Generate
Discharge
Events
(
Sub1).
sas"
Generates
a
data
set
of
pollutant
loading
events
and
their
corresponding
weights
for
each
RF1
reach
receiving
MP&
M
discharges.
See
Estimating
MP&
M
Discharge
Loadings
for
program
code.
42
"
Human
Health
AWQC
Exceedences
(
Sub
2).
sas"
Calculates
in­
stream
pollutant
concentrations
and
generates
a
data
set
of
pollutant
concentrations
for
each
RF1
reach.
43
/*
Program:
Human
Health
AWQC
Exceedences
(
Sub
2).
sas
Authors:
Abt
Associates
Inc.;
Elena
Besedin,
Rob
Sartain,
Stuart
Smith
Date:
04/
21/
2000
Updated:
10/
31/
2002
Modified
By:
Stuart
Smith,
Abt.
Associates,
Inc.

This
subroutine
calculates
AWQC
exceedences
for
Human
Health.
*/

title2
'
Human
Health
AWQC
Exceedences
Program
Output
(
Sub
2)';

/*
DISCHARGE
EVENTS,
ASSOCIATED
LOADINGS
AND
WEIGHTS
HAVE
BEEN
CALCULATED
BY
ANOTHER
PROGRAM.
ALL
UNIT
CONVERSIONS
HAVE
OCCURRED.
SEE
"
Generate
Discharge
Events
and
Loadings
(
Sub
1).
sas"
FOR
SPECIFIC
PROGRAM
INFORMATION.
*/

/*
PULL
TOGETHER
THE
EVENTS
AND
CHEMICAL
SPECIFIC
PARAMETERS
*/

Proc
sort
data
=
mpm2.
chemdata;
by
casno;
quit;

Proc
sql;
create
table
stream
as
select
reachnmb,
event_
ld.
casno,
evnt_
flo,
base,
treat1,
treat2,
event_
wt,
segl,
mnflo
as
mean_
flo,
svten
as
flo7q10,
acute
as
adf,
chronic
as
cdf,
dcp,
wbtype,
biodegre
as
decay,
surface,
drainage,
volume
from
rundat.
event_
ld,
mpm2.
chemdata
where
event_
ld.
casno
=
chemdata.
casno
order
by
reachnmb,
casno;
quit;

/******************************************************************************/
/*
*/
/*
FRESHWATER
REACHES
­
CONCENTRATIONS
AND
AWQC
EXCEEDENCES
*/
/*
*/
/******************************************************************************/

/*
CALCULATE
POLLUTANT
CONCENTRATIONS
IN
LAKES
FOR
WHICH
DILUTION
FACTORS
ARE
AVAILABLE
*/

data
lakes_
dl;
set
stream;
if
wbtype
=
'
glake';

if
cdf
^=
.
then
do;
cnc_
base
=
base/(
evnt_
flo*
cdf);
cnc_
trt1
=
treat1/(
evnt_
flo*
cdf);
cnc_
trt2
=
treat2/(
evnt_
flo*
cdf);
end;
else
if
dcp
^=.
then
do;
benchld
=
10000*
907.2;/*
BENCHMARK
LOAD,
907.2
IS
CONVERSION
FROM
KG
TO
TONS
*/
cnc_
base
=
((
base/
10**
9)*
365*
dcp)/
benchld;
cnc_
trt1
=
((
treat1/
10**
9)*
365*
dcp)/
benchld;
cnc_
trt2
=
((
treat2/
10**
9)*
365*
dcp)/
benchld;
end;
44
else
do;
cnc_
base
=
.;
cnc_
trt1
=
.;
cnc_
trt2
=
.;
end;

if
cnc_
base=.
then
delete;
keep
reachnmb
casno
cnc_
base
cnc_
trt1
cnc_
trt2
event_
wt;
run;

/*
CALCULATE
POLLUTANT
CONCENTRATIONS
IN
LAKES
FOR
WHICH
DILUTION
FACTORS
ARE
NOT
AVAILABLE
BASED
ON
RESIDENCE
TIME
AND
CHEMICAL
DECAY
RATE.
*/

data
lakes;
set
stream;
if
wbtype
=
'
lake';
if
decay;

/*
drainage
area
and
surface
area
available
*/
if
surface
^=
.
and
drainage
^=
.
then
do;
num
=
drainage;
/*
drainage
area
in
sq.
miles
*/
denom
=
surface*
0.0015625;
/*
convert
surface
area
from
acres
to
sq.
miles
*/
logdays
=
4.077
­
(
1.177*
log10(
num/
denom));
restime
=
10**
logdays;
time1
=
restime*
24;
/*
CONVERT
HYDRAULIC
TIME
FROM
DAYS
INTO
HOURS
*/
cnc_
base
=
(
base/
evnt_
flo)/(
1+
time1*
decay);
cnc_
trt1
=
(
treat1/
evnt_
flo)/(
1+
time1*
decay);
cnc_
trt2
=
(
treat2/
evnt_
flo)/(
1+
time1*
decay);
good
=
1;
end;

/*
missing
area
measure(
s),
do
end­
of­
pipe
value
=
loadings/
flow
*/
else
do;
cnc_
base
=
base/
evnt_
flo;
cnc_
trt1
=
treat1/
evnt_
flo;
cnc_
trt2
=
treat2/
evnt_
flo;
end;

keep
reachnmb
casno
cnc_
base
cnc_
trt1
cnc_
trt2
event_
wt;
run;

/*
CALCULATE
POLLUTANT
CONCENTRATIONS
(
UG/
L)
BASED
ON
HARMONIC
MEAN.
POLLUTANT
LOADINGS
ARE
GIVEN
IN
UG.
FLOW
CHARACTERISTICS
ARE
GIVEN
IN
MLN
L.
*/

data
stream1;
set
stream;
if
wbtype
=
'
stream';

/*
Account
for
missing
7q10
data
*/
if
flo7q10
=
.
or
flo7q10
=
0
then
flo7q10
=
909.7836;
if
mean_
flo
=
.
or
mean_
flo
=
0
then
mean_
flo
=
6711.2411;

/*
CALCULATE
HARMONIC
MEAN
AS
A
FUNCTION
OF
MEAN
FLOW
AND
7Q10
45
Flow
rates
in
ft**
3
per
second
1
FT3/
Sec
=
2446576
L/
Day
*/
harm1
=
(
1.194*
mean_
flo**
0.473*
flo7q10**
0.552)*
2446576;

cnc_
base
=
base/(
evnt_
flo+
harm1);
cnc_
trt1
=
treat1/(
evnt_
flo+
harm1);
cnc_
trt2
=
treat2/(
evnt_
flo+
harm1);

keep
reachnmb
casno
cnc_
base
cnc_
trt1
cnc_
trt2
event_
wt;
run;

/*
COMBINE
THE
FRESHWATER
REACHES
*/

data
freshwat;
set
stream1
lakes_
dl
lakes;
run;

proc
sort
data=
freshwat;
by
reachnmb
casno;

/*
OBTAIN
HUMAN
HEALTH
CRITERIA
FOR
FRESHWATER
REACHES
*/

proc
sql;

/*
Merge
in
the
human
health
freshwater
awqc
values
by
pollutant
*/

create
table
frshwtr2
as
select
reachnmb,
freshwat.
casno,
cnc_
base,
cnc_
trt1,
cnc_
trt2,
hhval__
i
as
hhval,
hhorg_
in
as
hhorg,
chemical,
event_
wt
from
freshwat,
mpm2.
chemdata
where
freshwat.
casno
=
chemdata.
casno
order
by
reachnmb,
casno;
quit;

/*
Compare
concentrations
to
awqc
limits
and
determine
exceedences
*/

data
frshwtr3;
set
frshwtr2;

if
cnc_
base
>
hhval
and
hhval
>
0
then
orgh2o_
b=
1;
if
cnc_
trt1
>
hhval
and
hhval
>
0
then
orgh2ot1=
1;
if
cnc_
trt2
>
hhval
and
hhval
>
0
then
orgh2ot2=
1;
if
cnc_
base
>
hhorg
and
hhorg
>
0
then
org_
b=
1;
if
cnc_
trt1
>
hhorg
and
hhorg
>
0
then
org_
t1=
1;
if
cnc_
trt2
>
hhorg
and
hhorg
>
0
then
org_
t2=
1;

if
orgh2o_
b
>
0
or
org_
b
>
0
then
humanb=
1;
if
orgh2ot1
>
0
or
org_
t1
>
0
then
humant1=
1;
if
orgh2ot2
>
0
or
org_
t2
>
0
then
humant2=
1;

keep
reachnmb
casno
chemical
orgh2o_
b
orgh2ot1
orgh2ot2
org_
b
org_
t1
org_
t2
humanb
humant1
humant2
event_
wt;
run;
46
/***********************************************************************/
/*
END
FRESHWATER
REACHES
*/
/***********************************************************************/

/*****************************************************************************/
/*
*/
/*
SALTWATER
REACHES
­
CONCENTRATIONS
AND
AWQC
EXCEEDENCES
*/
/*
*/
/*****************************************************************************/

/*
CALCULATE
POLLUTANT
CONCENTRATIONS
IN
BAYS,
OCEANS,
AND
ESTUARIES
*/

data
saltwtr;
set
stream;
if
wbtype
=
'
bay';

if
cdf
^=.
then
do;
cnc_
base
=
base/(
evnt_
flo*
cdf);
cnc_
trt1
=
treat1/(
evnt_
flo*
cdf);
cnc_
trt2
=
treat2/(
evnt_
flo*
cdf);
end;
else
if
dcp
^=.
then
do;
benchld
=
10000*
907.2;/*
BENCHMARK
LOAD,
907.2
IS
CONVERSION
FROM
KG
TO
TONS
*/
cnc_
base
=
((
base/
10**
9)*
365*
dcp)/
benchld;
cnc_
trt1
=
((
treat1/
10**
9)*
365*
dcp)/
benchld;
cnc_
trt2
=
((
treat2/
10**
9)*
365*
dcp)/
benchld;
end;
else
do;
cnc_
base
=
.;
cnc_
trt1
=
.;
cnc_
trt2
=
.;
end;

if
cnc_
base=.
then
delete;
keep
reachnmb
casno
cnc_
base
cnc_
trt1
cnc_
trt2
event_
wt;
run;

/*
OBTAIN
HUMAN
HEALTH
CRITERIA
FOR
SALTWATER
REACHES
*/

proc
sql;

/*
Merge
in
the
human
health
saltwater
awqc
values
by
pollutant
*/

create
table
saltwtr2
as
select
reachnmb,
saltwtr.
casno,
chemical,
cnc_
base,
cnc_
trt1,
cnc_
trt2,
hhval__
i
as
hhval,
hhorg_
in
as
hhorg,
event_
wt
from
saltwtr,
mpm2.
chemdata
where
saltwtr.
casno
=
chemdata.
casno
order
by
reachnmb,
casno;
quit;

/*
Compare
concentrations
to
awqc
limits
and
determine
exceedences
*/
47
data
saltwtr3;
set
saltwtr2;

/*
SALTWATER
NOT
USED
AS
DRINKING
WATER
*/

orgh2o_
b=
0;
orgh2ot1=
0;
orgh2ot2=
0;
if
cnc_
base
>
hhorg
and
hhorg
>
0
then
org_
b=
1;
if
cnc_
trt1
>
hhorg
and
hhorg
>
0
then
org_
t1=
1;
if
cnc_
trt2
>
hhorg
and
hhorg
>
0
then
org_
t2=
1;

if
orgh2o_
b
>
0
or
org_
b
>
0
then
humanb=
1;
if
orgh2ot1
>
0
or
org_
t1
>
0
then
humant1=
1;
if
orgh2ot2
>
0
or
org_
t2
>
0
then
humant2=
1;

keep
reachnmb
casno
chemical
orgh2o_
b
orgh2ot1
orgh2ot2
org_
b
org_
t1
org_
t2
humanb
humant1
humant2
event_
wt;
run;

/***********************************************************************/
/*
END
SALTWATER
REACHES
*/
/***********************************************************************/

/*
OUTPUT
THE
ESTIMATED
POLLUTANT
CONCENTRATIONS
FOR
FRESH
AND
SALT
WATER
REACHES.
CNC_
HH
IS
USED
IN
THE
CANCER
ANALYSIS
PROGRAM.
*/

data
rundat.
cnc_
hh;
set
freshwat
saltwtr;
run;

data
allreach;
set
frshwtr3
saltwtr3;
awt=
1;
/*
weight
used
later,
set
to
1
for
now
*/
keep
reachnmb
casno
chemical
orgh2o_
b
orgh2ot1
orgh2ot2
org_
b
org_
t1
org_
t2
humanb
humant1
humant2
event_
wt
awt;
run;

/*
IDENTIFY
REACHES
IN
WHICH
POLLUTANT
CONCENTRATIONS
EXCEED
THE
HUMAN
HEALTH
BASED
AWQC
LIMITS
AND
CALCULATE
THE
NUMBER
OF
EXCEEDENCE
EVENTS.
*/

proc
sql;

create
table
h_
awqc
as
select
reachnmb,
chemical,
orgh2o_
b,
orgh2ot1,
orgh2ot2,
org_
b,
org_
t1,
org_
t2,
event_
wt
from
allreach
where
humanb
>
0
order
by
reachnmb,
chemical;

/*
awt
replaced
with
a
1
*/
create
table
hh_
awqc
as
select
reachnmb,
sum(
orgh2o_
b)
as
testb1,
sum(
orgh2ot1)
as
testt1_
1,
48
sum(
orgh2ot2)
as
testt2_
1,
sum(
org_
b)
as
testb2,
sum(
org_
t1)
as
testt1_
2,
sum(
org_
t2)
as
testt2_
2,
sum(
orgh2o_
b*
event_
wt*
1)
as
natexb1,
sum(
orgh2ot1*
event_
wt*
1)
as
natex1_
1,
sum(
orgh2ot2*
event_
wt*
1)
as
natex2_
1,
sum(
org_
b*
event_
wt*
1)
as
natexb2,
sum(
org_
t1*
event_
wt*
1)
as
natex1_
2,
sum(
org_
t2*
event_
wt*
1)
as
natex2_
2,
sum(
event_
wt)
as
reachwt,
case
when
sum(
orgh2o_
b)
>=
1
then
1
else
0
end
as
rchb,
case
when
sum(
orgh2ot1)
>=
1
then
1
else
0
end
as
rch1,
case
when
sum(
orgh2ot2)
>=
1
then
1
else
0
end
as
rch2,
case
when
sum(
org_
b)
>=
1
then
1
else
0
end
as
orgb,
case
when
sum(
org_
t1)
>=
1
then
1
else
0
end
as
org1,
case
when
sum(
org_
t2)
>=
1
then
1
else
0
end
as
org2
from
h_
awqc
group
by
reachnmb
order
by
reachnmb;

/*
CALCULATE
THE
TOTAL
NUMBER
OF
AFFECTED
REACHES
ON
A
NATIONAL
BASIS
awt
replaced
with
a
1
*/
create
table
rch1
as
select
sum(
distinct
event_
wt)
as
wght1,
reachnmb,
chemical
from
h_
awqc
where
orgh2o_
b
>
0
group
by
reachnmb,
chemical
order
by
reachnmb,
chemical;

create
table
base1
as
select
max(
wght1)
as
t_
ntlb1,
reachnmb
from
rch1
group
by
reachnmb
order
by
reachnmb;

create
table
rch2
as
select
sum(
distinct
event_
wt)
as
wght2,
reachnmb,
chemical
from
h_
awqc
where
org_
b
>
0
group
by
reachnmb,
chemical
order
by
reachnmb,
chemical;

create
table
base2
as
select
max(
wght2)
as
t_
ntlb2,
reachnmb
from
rch2
group
by
reachnmb
order
by
reachnmb;

create
table
rch3
as
select
sum(
distinct
event_
wt)
as
wght3,
reachnmb,
chemical
from
h_
awqc
49
where
orgh2ot1
>
0
group
by
reachnmb,
chemical
order
by
reachnmb,
chemical;

create
table
testt1_
1
as
select
max(
wght3)
as
t1_
ntlt1,
reachnmb
from
rch3
group
by
reachnmb
order
by
reachnmb;

create
table
rch4
as
select
sum(
distinct
event_
wt)
as
wght4,
reachnmb,
chemical
from
h_
awqc
where
org_
t1
>
0
group
by
reachnmb,
chemical
order
by
reachnmb,
chemical;

create
table
testt1_
2
as
select
max(
wght4)
as
t1_
ntlt2,
reachnmb
from
rch4
group
by
reachnmb
order
by
reachnmb;

create
table
rch5
as
select
sum(
distinct
event_
wt)
as
wght5,
reachnmb,
chemical
from
h_
awqc
where
orgh2ot2
>
0
group
by
reachnmb,
chemical
order
by
reachnmb,
chemical;

create
table
testt2_
1
as
select
max(
wght5)
as
t2_
ntlt1,
reachnmb
from
rch5
group
by
reachnmb
order
by
reachnmb;

create
table
rch6
as
select
sum(
distinct
event_
wt)
as
wght6,
reachnmb,
chemical
from
h_
awqc
where
org_
t2
>
0
group
by
reachnmb,
chemical
order
by
reachnmb,
chemical;

create
table
testt2_
2
as
select
max(
wght6)
as
t2_
ntlt2,
reachnmb
from
rch6
group
by
reachnmb
order
by
reachnmb;

create
table
rch7
as
50
select
sum(
distinct
event_
wt)
as
wght7,
reachnmb,
chemical
from
h_
awqc
where
orgh2o_
b
>
0
or
org_
b
>
0
group
by
reachnmb,
chemical
order
by
reachnmb,
chemical;

create
table
multi_
b
as
select
max(
wght7)
as
multi_
b,
reachnmb
from
rch7
group
by
reachnmb
order
by
reachnmb;

create
table
rch8
as
select
sum(
distinct
event_
wt)
as
wght8,
reachnmb,
chemical
from
h_
awqc
where
orgh2ot1
>
0
or
org_
t1
>
0
group
by
reachnmb,
chemical
order
by
reachnmb,
chemical;

create
table
multi_
1
as
select
max(
wght8)
as
multi_
1,
reachnmb
from
rch8
group
by
reachnmb
order
by
reachnmb;

create
table
rch9
as
select
sum(
distinct
event_
wt)
as
wght9,
reachnmb,
chemical
from
h_
awqc
where
orgh2ot2
>
0
or
org_
t2
>
0
group
by
reachnmb,
chemical
order
by
reachnmb,
chemical;

create
table
multi_
2
as
select
max(
wght9)
as
multi_
2,
reachnmb
from
rch9
group
by
reachnmb
order
by
reachnmb;
quit;

data
rchwts;
merge
base1
base2
testt1_
1
testt1_
2
testt2_
1
testt2_
2
multi_
b
multi_
1
multi_
2;
by
reachnmb;

if
t_
ntlb1=.
then
t_
ntlb1=
0;
if
t_
ntlb2=.
then
t_
ntlb2=
0;
if
t1_
ntlt1=.
then
t1_
ntlt1=
0;
if
t1_
ntlt2=.
then
t1_
ntlt2=
0;
if
t2_
ntlt1=.
then
t2_
ntlt1=
0;
if
t2_
ntlt2=.
then
t2_
ntlt2=
0;
if
multi_
b=.
then
multi_
b=
0;
51
if
multi_
1=.
then
multi_
1=
0;
if
multi_
2=.
then
multi_
2=
0;
run;

/*
CALCULATE
THE
TOTAL
NUMBER
OF
AWQC
EXCEEDENCES
BY
CHEMICAL
ON
A
SAMPLE
AND
NATIONAL
BASIS.
*/

proc
sql;

create
table
chm_
awqc
as
select
chemical,
sum(
orgh2o_
b)
as
worgb,
sum(
orgh2ot1)
as
worgt1,
sum(
orgh2ot2)
as
worgt2,
sum(
org_
b)
as
orgb,
sum(
org_
t1)
as
orgt1,
sum(
org_
t2)
as
orgt2,
sum(
orgh2o_
b*
event_
wt*
awt)
as
ntlbw,
sum(
orgh2ot1*
event_
wt*
awt)
as
ntltw1,
sum(
orgh2ot2*
event_
wt*
awt)
as
ntltw2,
sum(
org_
b*
event_
wt*
awt)
as
ntlbo,
sum(
org_
t1*
event_
wt*
awt)
as
ntlto1,
sum(
org_
t2*
event_
wt*
awt)
as
ntlto2,
case
when
sum(
orgh2o_
b)
>=
1
then
1
else
0
end
as
chemb,
case
when
sum(
orgh2ot1)
>=
1
then
1
else
0
end
as
chem1,
case
when
sum(
orgh2ot2)
>=
1
then
1
else
0
end
as
chem2,
case
when
sum(
org_
b)
>=
1
then
1
else
0
end
as
chmorgb,
case
when
sum(
org_
t1)
>=
1
then
1
else
0
end
as
chmorg1,
case
when
sum(
org_
t2)
>=
1
then
1
else
0
end
as
chmorg2
from
allreach
where
humanb
>
0
group
by
chemical
order
by
chemical;
quit;

/*
Output
the
affected
reaches
for
the
recreational
benefits
programs
*/

data
rundat.
rec_
hh;
set
allreach;
if
orgh2o_
b
>
0
or
org_
b
>
0;
run;

/*
PRINT
OUT
RESULTS
*/

proc
means
sum
data=
hh_
awqc;
var
testb1
testt1_
1
testt2_
1
testb2
testt1_
2
testt2_
2
natexb1
natex1_
1
natex2_
1
natexb2
natex1_
2
natex2_
2
rchb
rch1
rch2
orgb
org1
org2;
label
reachnmb=
'
Reach
Id'
testb1
=
'
Exceed,
H20
and
Organisms
(
Smpl/
BL)'
testt1_
1
=
'
Exceed,
H2O
and
organisms
(
Smpl/
Opt
1)'
testt2_
1
=
'
Exceed,
H2O
and
organisms
(
Smpl/
Opt
2)'
testb2
=
'
Exceed,
organisms
only
(
Smpl/
BL)'
testt1_
2
=
'
Exceed,
organisms
only
(
Smpl/
Opt
1)'
testt2_
2
=
'
Exceed,
organisms
only
(
Smpl/
Opt
2)'
natexb1
=
'
Exceed,
H20
and
Organisms
(
Ntl/
BL)'
natex1_
1
=
'
Exceed,
H2O
and
organisms
(
Ntl/
Opt
1)'
52
natex2_
1
=
'
Exceed,
H2O
and
organisms
(
Ntl/
Opt
2)'
natexb2
=
'
Exceed,
organisms
only
(
Ntl/
BL)'
natex1_
2
='
Exceed,
organisms
only
(
Ntl/
Opt
1)'
natex2_
2
='
Exceed,
organisms
only
(
Ntl/
Opt
2)'
rchb
='
Number
of
h20
reaches
(
BL)'
rch1
='
Number
of
h20
reaches
(
Opt
1)'
rch2
='
Number
of
h20
reaches
(
Opt
2)'
orgb
='
Number
of
org
reaches
(
BL)'
org1
='
Number
of
org
reaches
(
Opt1)'
org2
='
Number
of
org
reaches
(
Opt2)';
title3
'
Exceedence
of
Human
Health
AWQC
Limits
by
Option
(
Sample,
National)';

proc
means
sum
data=
chm_
awqc;
var
worgb
worgt1
worgt2
orgb
orgt1
orgt2
ntlbw
ntltw1
ntltw2
ntlbo
ntlto1
ntlto2
chemb
chem1
chem2
chmorgb
chmorg1
chmorg2;
label
worgb
=
'
Exceed,
H20
and
Organisms
(
Smpl/
BL)'
worgt1
=
'
Exceed,
H2O
and
organisms
(
Smpl/
Opt
1)'
worgt2
=
'
Exceed,
H2O
and
organisms
(
Smpl/
Opt
2)'
orgb
=
'
Exceed,
organisms
only
(
Smpl/
BL)'
orgt1
=
'
Exceed,
organisms
only
(
Smpl/
Opt
1)'
orgt2
=
'
Exceed,
organisms
only
(
Smpl/
Opt
2)'
ntlbw
=
'
Exceed,
H20
and
Organisms
(
Ntl/
BL)'
ntltw1
=
'
Exceed,
H2O
and
organisms
(
Ntl/
Opt
1)'
ntltw2
=
'
Exceed,
H2O
and
organisms
(
Ntl/
Opt
2)'
ntlbo
=
'
Exceed,
organisms
only
(
Ntl/
BL)'
ntlto1
=
'
Exceed,
organisms
only
(
Ntl/
Opt
1)'
ntlto2
=
'
Exceed,
organisms
only
(
Ntl/
Opt
2)'
chemb
=
'
Number
of
h20/
org
poll
(
BL)'
chem1
=
'
Number
of
h20/
org
poll
(
Opt1)'
chem2
=
'
Number
of
h20/
org
poll
(
Opt2)'
chmorgb
=
'
Number
of
org
poll
(
BL)'
chmorg1
=
'
Number
of
org
poll
(
Opt1)'
chmorg2
=
'
Number
of
org
poll
(
Opt2)';
title3
'
Exceedence
of
Human
Health
AWQC
Limits
by
Pollutant
(
Sample,
National)';

proc
means
sum
data=
rchwts;
var
t_
ntlb1
t_
ntlb2
t1_
ntlt1
t1_
ntlt2
t2_
ntlt1
t2_
ntlt2
multi_
b
multi_
1
multi_
2;
label
t_
ntlb1
=
'
H20
and
Organisms
(
Ntl/
BL)'
t1_
ntlt1
=
'
H20
and
Organisms
(
Opt
1)'
t2_
ntlt1
=
'
H20
and
Organisms
(
Opt
2)'
t_
ntlb2
=
'
Organisms
Only
(
Ntl/
BL)'
t1_
ntlt2
=
'
Organisms
Only
(
Opt
1)'
t2_
ntlt2
=
'
Organisms
Only
(
Opt
2)'
multi_
b
=
'
Either
(
BL)'
multi_
1
=
'
Either
(
Opt
1)'
multi_
2
=
'
Either
(
Opt
2)';

title3
'
Total
Number
of
Reaches
Exceeding
AWQC
Limits
for
Consumption
of
Water';
title4
'
and
Organisms/
Organisms
only
on
a
National
Basis';
quit;
53
/*
Sum
the
number
of
exceedence
events
by
reach
and
event
weight
*/
proc
sql;
create
table
preme
as
select
reachnmb,
event_
wt,
sum(
orgh2o_
b)
as
testb1,
sum(
orgh2ot1)
as
test1_
1,
sum(
orgh2ot2)
as
test2_
1,
sum(
org_
b)
as
testb2,
sum(
org_
t1)
as
test1_
2,
sum(
org_
t2)
as
test2_
2
from
h_
awqc
group
by
reachnmb,
event_
wt
order
by
reachnmb,
event_
wt;
quit;

/*
Determine
the
number
of
reaches
which
eliminate
all
exceedences
and
the
number
of
reaches
which
only
partially
reduce
*/

data
reduc;
set
preme;
if
testb1=.
then
testb1=
0;
if
test1_
1=.
then
test1_
1=
0;
if
test2_
1=.
then
test2_
1=
0;
if
testb2=.
then
testb2=
0;
if
test1_
2=.
then
test1_
2=
0;
if
test2_
2=.
then
test2_
2=
0;

if
testb1
>=
1
and
test1_
1
=
0
then
elim1_
1
=
1;
else
elim1_
1=
0;
if
testb1
>=
1
and
test2_
1
=
0
then
elim2_
1
=
1;
else
elim2_
1=
0;
if
testb2
>=
1
and
test1_
2
=
0
then
elim1_
2
=
1;
else
elim1_
2=
0;
if
testb2
>=
1
and
test2_
2
=
0
then
elim2_
2
=
1;
else
elim2_
2=
0;

if
testb1
>=
1
and
test1_
1
<
testb1
and
elim1_
1
=
0
then
red1_
1
=
1;
else
red1_
1=
0;
if
testb1
>=
1
and
test2_
1
<
testb1
and
elim2_
1
=
0
then
red2_
1
=
1;
else
red2_
1=
0;
if
testb2
>=
1
and
test1_
2
<
testb2
and
elim1_
2
=
0
then
red1_
2
=
1;
else
red1_
2=
0;
if
testb2
>=
1
and
test2_
2
<
testb2
and
elim2_
2
=
0
then
red2_
2
=
1;
else
red2_
2=
0;

if
elim1_
1=
1
or
elim1_
2=
1
then
elim1
=
1;
else
elim1
=
0;
if
elim2_
1=
1
or
elim2_
2=
1
then
elim2
=
1;
else
elim2
=
0;
if
red1_
1
=
1
or
red1_
2
=
1
then
reduc1
=
1;
else
reduc1
=
0;
if
red2_
1
=
1
or
red2_
2
=
1
then
reduc2
=
1;
else
reduc2
=
0;
run;

/*
Print
out
the
results
*/

proc
means
sum
data=
reduc;
var
elim1_
1
elim2_
1
elim1_
2
elim2_
2
red1_
1
red2_
1
red1_
2
red2_
2
reduc1
reduc2;
label
elim1_
1
=
'
Elim.
H20
and
Organisms
(
Opt1)'
elim2_
1
=
'
Elim.
H20
and
Organisms
(
Opt2)'
elim1_
2
=
'
Elim.
Organisms
(
Opt1)'
54
elim2_
2
=
'
Elim.
Organisms
(
Opt2)'
red1_
1
=
'
Redu.
H20
and
Organisms
(
Opt1)'
red2_
1
=
'
Redu.
H20
and
Organisms
(
Opt2)'
red1_
2
=
'
Redu.
Organisms
(
Opt1)'
red2_
2
=
'
Redu.
Organisms
(
Opt2)'
reduc1
=
'
Total
Reaches
Reducing
(
Opt1)'
reduc2
=
'
Total
Reaches
Reducing
(
Opt2)';
title3
'
AWQC
Eliminations
and
Reductions
(
Sample)';
title4
'
Number
of
Sample
Reaches';
quit;

proc
means
sum
data=
reduc;
weight
event_
wt;
var
elim1_
1
elim2_
1
elim1_
2
elim2_
2
red1_
1
red2_
1
red1_
2
red2_
2
reduc1
reduc2;
label
elim1_
1
=
'
Elim.
H20
and
Organisms
(
Opt1)'
elim2_
1
=
'
Elim.
H20
and
Organisms
(
Opt2)'
elim1_
2
=
'
Elim.
Organisms
(
Opt1)'
elim2_
2
=
'
Elim.
Organisms
(
Opt2)'
red1_
1
=
'
Redu.
H20
and
Organisms
(
Opt1)'
red2_
1
=
'
Redu.
H20
and
Organisms
(
Opt2)'
red1_
2
=
'
Redu.
Organisms
(
Opt1)'
red2_
2
=
'
Redu.
Organisms
(
Opt2)'
reduc1
=
'
Total
Reaches
Reducing
(
Opt1)'
reduc2
=
'
Total
Reaches
Reducing
(
Opt2)';
title3
'
AWQC
Eliminations
and
Reductions
(
National)';
title4
'
Number
of
National
Reaches';
quit;

proc
print
data=
hh_
awqc;
quit;
proc
print
data=
chm_
awqc;
title3
'
Exceedences
by
Chemical';
quit;

/*
End
Human
Health
AWQC
(
Sub
2).
sas
*/
55
Program
Output
56
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
2
Human
Health
AWQC
Exceedences
Program
Output
(
Sub
2)
Exceedence
of
Human
Health
AWQC
Limits
by
Option
(
Sample,
National)
10:
59
Friday,
February
7,
2003
The
MEANS
Procedure
Variable
Label
Sum
                                                                  
testb1
Exceed,
H20
and
Organisms
(
Smpl/
BL)
11.0000000
testt1_
1
Exceed,
H2O
and
organisms
(
Smpl/
Opt
1)
9.0000000
testt2_
1
Exceed,
H2O
and
organisms
(
Smpl/
Opt
2)
.
testb2
Exceed,
organisms
only
(
Smpl/
BL)
1.0000000
testt1_
2
Exceed,
organisms
only
(
Smpl/
Opt
1)
.
testt2_
2
Exceed,
organisms
only
(
Smpl/
Opt
2)
.
natexb1
Exceed,
H20
and
Organisms
(
Ntl/
BL)
120.5318734
natex1_
1
Exceed,
H2O
and
organisms
(
Ntl/
Opt
1)
77.7679968
natex2_
1
Exceed,
H2O
and
organisms
(
Ntl/
Opt
2)
.
natexb2
Exceed,
organisms
only
(
Ntl/
BL)
21.3819383
natex1_
2
Exceed,
organisms
only
(
Ntl/
Opt
1)
.
natex2_
2
Exceed,
organisms
only
(
Ntl/
Opt
2)
.
rchb
Number
of
h20
reaches
(
BL)
6.0000000
rch1
Number
of
h20
reaches
(
Opt
1)
6.0000000
rch2
Number
of
h20
reaches
(
Opt
2)
0
orgb
Number
of
org
reaches
(
BL)
1.0000000
org1
Number
of
org
reaches
(
Opt1)
0
org2
Number
of
org
reaches
(
Opt2)
0
                                                                  
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
3
Human
Health
AWQC
Exceedences
Program
Output
(
Sub
2)
Exceedence
of
Human
Health
AWQC
Limits
by
Pollutant
(
Sample,
National)
10:
59
Friday,
February
7,
2003
The
MEANS
Procedure
Variable
Label
Sum
                                                                  
worgb
Exceed,
H20
and
Organisms
(
Smpl/
BL)
11.0000000
worgt1
Exceed,
H2O
and
organisms
(
Smpl/
Opt
1)
9.0000000
worgt2
Exceed,
H2O
and
organisms
(
Smpl/
Opt
2)
.
orgb
Exceed,
organisms
only
(
Smpl/
BL)
1.0000000
orgt1
Exceed,
organisms
only
(
Smpl/
Opt
1)
.
orgt2
Exceed,
organisms
only
(
Smpl/
Opt
2)
.
ntlbw
Exceed,
H20
and
Organisms
(
Ntl/
BL)
120.5318734
ntltw1
Exceed,
H2O
and
organisms
(
Ntl/
Opt
1)
77.7679968
ntltw2
Exceed,
H2O
and
organisms
(
Ntl/
Opt
2)
.
ntlbo
Exceed,
organisms
only
(
Ntl/
BL)
21.3819383
ntlto1
Exceed,
organisms
only
(
Ntl/
Opt
1)
.
ntlto2
Exceed,
organisms
only
(
Ntl/
Opt
2)
.
chemb
Number
of
h20/
org
poll
(
BL)
4.0000000
chem1
Number
of
h20/
org
poll
(
Opt1)
2.0000000
chem2
Number
of
h20/
org
poll
(
Opt2)
0
chmorgb
Number
of
org
poll
(
BL)
1.0000000
57
chmorg1
Number
of
org
poll
(
Opt1)
0
chmorg2
Number
of
org
poll
(
Opt2)
0
                                                                  
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
4
Human
Health
AWQC
Exceedences
Program
Output
(
Sub
2)
Total
Number
of
Reaches
Exceeding
AWQC
Limits
for
Consumption
of
Water
and
Organisms/
Organisms
only
on
a
National
Basis
10:
59
Friday,
February
7,
2003
The
MEANS
Procedure
Variable
Label
Sum
                                                      
t_
ntlb1
H20
and
Organisms
(
Ntl/
BL)
77.7679968
t_
ntlb2
Organisms
Only
(
Ntl/
BL)
21.3819383
t1_
ntlt1
H20
and
Organisms
(
Opt
1)
77.7679968
t1_
ntlt2
Organisms
Only
(
Opt
1)
0
t2_
ntlt1
H20
and
Organisms
(
Opt
2)
0
t2_
ntlt2
Organisms
Only
(
Opt
2)
0
multi_
b
Either
(
BL)
77.7679968
multi_
1
Either
(
Opt
1)
77.7679968
multi_
2
Either
(
Opt
2)
0
                                                      
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
6
Human
Health
AWQC
Exceedences
Program
Output
(
Sub
2)
AWQC
Eliminations
and
Reductions
(
National)
Number
of
National
Reaches
10:
59
Friday,
February
7,
2003
The
MEANS
Procedure
Variable
Label
Sum
                                                          
elim1_
1
Elim.
H20
and
Organisms
(
Opt1)
0
elim2_
1
Elim.
H20
and
Organisms
(
Opt2)
77.7679968
elim1_
2
Elim.
Organisms
(
Opt1)
21.3819383
elim2_
2
Elim.
Organisms
(
Opt2)
21.3819383
red1_
1
Redu.
H20
and
Organisms
(
Opt1)
21.3819383
red2_
1
Redu.
H20
and
Organisms
(
Opt2)
0
red1_
2
Redu.
Organisms
(
Opt1)
0
red2_
2
Redu.
Organisms
(
Opt2)
0
reduc1
Total
Reaches
Reducing
(
Opt1)
21.3819383
reduc2
Total
Reaches
Reducing
(
Opt2)
0
                                                          
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
8
Human
Health
AWQC
Exceedences
Program
Output
(
Sub
2)
Exceedences
by
Chemical
10:
59
Friday,
February
7,
2003
C
H
c
c
c
E
w
w
n
n
n
n
h
h
h
M
w
o
o
o
o
n
t
t
n
t
t
c
c
c
m
m
m
I
o
r
r
o
r
r
t
l
l
t
l
l
h
h
h
o
o
o
O
C
r
g
g
r
g
g
l
t
t
l
t
t
e
e
e
r
r
r
58
b
A
g
t
t
g
t
t
b
w
w
b
o
o
m
m
m
g
g
g
s
L
b
1
2
b
1
2
w
1
2
o
1
2
b
1
2
b
1
2
1
Arsenic
6
6
.
.
.
.
45.4603
45.4603
.
.
.
.
1
1
0
0
0
0
2
Iron
1
.
.
.
.
.
21.3819
.
.
.
.
.
1
0
0
0
0
0
3
Manganese
1
.
.
1
.
.
21.3819
.
.
21.3819
.
.
1
0
0
1
0
0
4
Nitrosodimethylamine,
N­
3
3
.
.
.
.
32.3077
32.3077
.
.
.
.
1
1
0
0
0
0
59
"
Cancer­
fish
(
Sub
4).
sas"
Uses
the
data
set
of
pollutant
concentrations
for
each
RF1
reach
with
pollutant
specific
cancer
slope
factors
to
determine
risk
of
cancer
on
a
chemical
basis.
The
computed
cancer
risk
is
then
applied
to
the
exposed
fishing
population
and
the
reduced
risk
of
cancer
is
translated
into
a
monetary
value.
60
/*
Program:
Cancer­
fish
Revised
(
Sub
4).
sas
Authors:
Abt
Associates,
Inc.;
Rob
Sartain,
Elena
Besedin,
Stuart
Smith
Date:
04/
21/
2000
Updated:
01/
10/
2003
This
program
calculates
cancer
incidents
due
to
fish
consumption
by
sport
and
subsistence
anglers
and
their
families.
Incidents
are
generated
for
all
reaches
for
which
data
is
available.
*/

title2
'
Cancer
from
Fish
Consumption
(
Sub
4)';

/*
COUNTY
LEVEL
FISHING
LICENSE
DATA
*/

/*
Load
fishing
license
data
here.
Sum
over
the
types
by
county.
Sum
over
the
counties
containing
a
given
reach.

Final
data
set
contains
reaches
with
the
total
possible
number
of
affected
anglers.
This
number
will
be
multiplied
by
the
ratio
of
reach
length
to
total
reach
miles
in
affected
counties
to
obtain
an
estimate
of
the
number
of
affected
anglers.
*/

data
licens;
set
mpm2.
fish_
lic;

fw_
lic
=
sum(
fw_
res,
fw_
reso,
fw_
sres,
fw_
smres,
fw_
dres,
trout,
fw_
life,
fw_
hunt1,
fw_
2hunt,
fw_
hunts,
fw_
hunt2,
fw_
salt1,
fw_
trout);
sw_
lic
=
sum(
fw_
salt1,
sw_
res,
sw_
dres);

if
fw_
lic=.
then
fw_
lic=
0;
if
sw_
lic=.
then
sw_
lic=
0;
cntyfip
=
fips;

keep
cntyfip
fw_
lic
sw_
lic;
run;

proc
sort
data=
licens;
by
cntyfip;
quit;

/*
DETERMINE
COUNTIES
AFFECTED
BY
REACH
*/
data
facs;
set
mpm2.
fac_
info;
run;

proc
sort
data=
facs;
by
siteid;
quit;

data
cnty;
set
facs;

cntyfip1=
stco1;
cntyfip2=
stco2;
cntyfip3=
stco3;
cntyfip4=
stco4;
cntyfip5=
stco5;
cntyfip6=
stco6;
cntyfip7=
stco7;
cntyfip8=
stco8;
61
keep
reachnmb
cntyfip1­
cntyfip8;
run;

proc
sort
nodupkey
data=
cnty;
by
reachnmb;
quit;

proc
transpose
data=
cnty
out=
cnty2;
by
reachnmb;
var
cntyfip1­
cntyfip8;
quit;

data
cnty3;
set
cnty2;
cntyfip
=
col1/
1;
if
cntyfip=.
then
delete;
keep
reachnmb
cntyfip;
run;

proc
sort
data=
cnty3;
by
cntyfip;
quit;

/*
OBTAIN
REACH
MILES
BY
COUNTY
*/

data
rchmile;
set
mpm2.
us_
rchmi;
cntyfip=
fips;
keep
countymi
cntyfip;
run;

proc
sort
data=
rchmile;
by
cntyfip;

/*
PULL
TOGETHER
OUR
REACHES
WITH
ASSOCIATED
COUNTIES
*/

data
tot_
mile;
merge
cnty3
rchmile;
by
cntyfip;

if
reachnmb=.
then
delete;
run;

proc
sort
data=
tot_
mile;
by
reachnmb
cntyfip;
quit;

/*
SUM
REACH
MILES
OVER
COUNTIES
CONTAINING
THE
SAME
REACH
FINISHED
DATA
SET
CONTAINS
TOTAL
NUMBER
OF
REACH
MILES
IN
COUNTIES
CONTAINING
A
GIVEN
REACH.
BRING
IN
THE
FISHING
LICENSE
DATA
BY
COUNTY.
*/

proc
sql;

create
table
miles
as
select
tot_
mile.
reachnmb,
sum(
countymi)
as
denom,
min(
segl)
as
leng,
sum(
fw_
lic)
as
fwlictot,
sum(
sw_
lic)
as
swlictot
from
tot_
mile,
facs,
licens
where
tot_
mile.
reachnmb
=
facs.
reachnmb
and
tot_
mile.
cntyfip
=
licens.
cntyfip
62
group
by
tot_
mile.
reachnmb
order
by
tot_
mile.
reachnmb;
quit;

proc
sort
data=
miles;
by
reachnmb;
quit;

/*
Merge
in
Fishing
Advisory
Data
with
County
mile
data
*/
proc
sort
data=
mpm2.
fishadv1;
by
reachnmb;
quit;

data
miles2;
merge
miles
mpm2.
fishadv1;
by
reachnmb;

/*
Hard­
Wire
Statewide
Advisories
*/
if
st
=
'
MI'
or
st
=
'
NJ'
or
st
=
'
RI'
or
st
=
'
MS'
then
advisory
=
'
yes';

/*
Multiplier
for
20%
reduction
in
fishermen
due
to
advisory
*/
if
advisory
=
'
yes'
or
advisory
=
'
A­
yes'
then
advmult
=
0.80;
else
advmult
=
1.00;
run;

/*
ESTIMATE
SPORT
AND
SUBSISTANCE
FISHING
POPULATIONS
*/

data
pops;
set
miles2;
by
reachnmb;
if
first.
reachnmb;

if
leng=.
then
fwspt
=
fwlictot*
0.06*
2.62*
advmult;
else
fwspt
=
fwlictot*(
leng/
denom)*
2.62*
advmult;
fwsub
=
0.05*
fwspt;

if
leng=.
then
swspt
=
swlictot*
0.06*
2.62*
advmult;
else
swspt
=
swlictot*(
leng/
denom)*
2.62*
advmult;
swsub
=
0.05*
swspt;

fwsptpop
=
round(
fwspt);
fwsubpop
=
round(
fwsub);
swsptpop
=
round(
swspt);
swsubpop
=
round(
swsub);

keep
reachnmb
fwsptpop
fwsubpop
swsptpop
swsubpop;
run;

proc
sort
data=
pops;
by
reachnmb;
quit;
proc
sort
data=
rundat.
cnc_
hh;
by
reachnmb;
quit;

/*
MERGE
CONCENTRATION
DATA
BY
REACH
WITH
THE
NUMBER
OF
SPORT
AND
SUBSISTENCE
ANGLERS
*/

data
canc;
merge
rundat.
cnc_
hh
pops;
by
reachnmb;
63
if
cnc_
base
=
.
then
delete;
if
fwsptpop=.
then
delete;
run;

proc
sort
data=
canc;
by
reachnmb
casno
event_
wt;
quit;

/*
Output
lead
concentrations
on
reaches
where
the
concentration
is
greater
than
1
ug/
l
*/

data
rundat.
lead;
set
canc;

if
casno
=
'
7439921';

if
cnc_
base=.
then
delete;
if
cnc_
base
<
1
then
delete;
run;

/*
BRING
IN
SLOPE
FACTOR,
REFERENCE
DOSE,
AND
BIOCONCENTRATION
FROM
CHEMDATA
*/

proc
sql;

create
table
canca
as
select
reachnmb,
canc.
casno,
cnc_
base
as
base,
cnc_
trt1
as
treat1,
cnc_
trt2
as
treat2,
fwsptpop,
fwsubpop,
swsptpop,
swsubpop,
slope_
fa
as
sf,
referenc
as
rfd,
bioconce
as
bcfval,
event_
wt
as
weight
from
canc,
mpm2.
chemdata
where
canc.
casno
=
chemdata.
casno
order
by
reachnmb,
canc.
casno,
weight;
quit;

/*
ESTIMATE
CANCER
EQUATIONS
AND
CALCULATE
CANCER
RISK
DUE
TO
FISH
CONSUMPTION
*/

data
canc2;
set
canca;
if
sf;

/*
DEFINE
CONSTANTS
*/

cf1
=
0.001;
/*
conversion
milligrams
per
microgram
*/
cf2
=
365;
/*
conversion
365
days
per
year
*/
cr1
=
0.007;
/*
consumption
rate
1
child
:
7.27
(
rec.)
grams/
day
*/
cr2
=
0.017;
/*
consumption
rate
2
adult:
17.5
(
rec.)
grams/
day
*/
cr3
=
0.061;
/*
consumption
rate
3
child:
60.58
(
sub.)
grams/
day
*/
cr4
=
0.142;
/*
consumption
rate
4
adult:
142.4
(
sub.)
grams/
day
*/
ef
=
365;
/*
exposure
frequency:
365
days
per
year
*/
ed1
=
18;
/*
exposure
duration
1
child:
18
years
(
rec.)
*/
ed2
=
52;
/*
exposure
duration
2
adult:
52
years
(
rec.)
*/
ed3
=
18;
/*
exposure
duration
3
child:
18
years
(
sub.)
*/
ed4
=
52;
/*
exposure
duration
4
adult:
52
years
(
sub.)
*/
64
bw1
=
30;
/*
body
weight
1
child:
30
kg
*/
bw2
=
70;
/*
body
weight
2
adult:
70
kg
*/
lt
=
70;
/*
lifetime:
70
years
*/

/*
CALCULATE
CANCER
RISK
*/

/*
base
values
*/
bsptrisk
=
(((
base
*
cf1
*
cr1
*
bcfval
*
ef
*
ed1)
/
(
bw1
*
lt
*
cf2))
+
((
base
*
cf1
*
cr2
*
bcfval
*
ef
*
ed2)
/
(
bw2
*
lt
*
cf2)))
*
sf;

bsubrisk
=
(((
base
*
cf1
*
cr3
*
bcfval
*
ef
*
ed3)
/
(
bw1
*
lt
*
cf2))
+
((
base
*
cf1
*
cr4
*
bcfval
*
ef
*
ed4)
/
(
bw2
*
lt
*
cf2)))
*
sf;

/*
treatment
values
*/
sptrisk1
=
(((
treat1
*
cf1
*
cr1
*
bcfval
*
ef
*
ed1)
/
(
bw1
*
lt
*
cf2))
+
((
treat1
*
cf1
*
cr2
*
bcfval
*
ef
*
ed2)
/
(
bw2
*
lt
*
cf2)))
*
sf;

subrisk1
=
(((
treat1
*
cf1
*
cr3
*
bcfval
*
ef
*
ed3)
/
(
bw1
*
lt
*
cf2))
+
((
treat1
*
cf1
*
cr4
*
bcfval
*
ef
*
ed4)
/
(
bw2
*
lt
*
cf2)))
*
sf;

sptrisk2
=
(((
treat2
*
cf1
*
cr1
*
bcfval
*
ef
*
ed1)
/
(
bw1
*
lt
*
cf2))
+
((
treat2
*
cf1
*
cr2
*
bcfval
*
ef
*
ed2)
/
(
bw2
*
lt
*
cf2)))
*
sf;

subrisk2
=
(((
treat2
*
cf1
*
cr3
*
bcfval
*
ef
*
ed3)
/
(
bw1
*
lt
*
cf2))
+
((
treat2
*
cf1
*
cr4
*
bcfval
*
ef
*
ed4)
/
(
bw2
*
lt
*
cf2)))
*
sf;
run;

/*
Sum
up
the
risks
over
the
pollutants
by
reach.
Keep
the
reach
statictics
*/
proc
sql;

create
table
sumrsk
as
select
reachnmb,
sum(
bsptrisk)
as
rsk_
bspt,
sum(
bsubrisk)
as
rsk_
bsub,
sum(
sptrisk1)
as
rsk_
1spt,
sum(
subrisk1)
as
rsk_
1sub,
sum(
sptrisk2)
as
rsk_
2spt,
sum(
subrisk2)
as
rsk_
2sub
from
canc2
group
by
reachnmb
order
by
reachnmb;

create
table
valspt
as
select
reachnmb,
rsk_
bspt,
rsk_
1spt,
rsk_
2spt
from
sumrsk
where
reachnmb
^=
4030203006;

create
table
valsub
as
select
reachnmb,
rsk_
bsub,
rsk_
1sub,
rsk_
2sub
from
sumrsk
where
reachnmb
^=
4030203006;
quit;

/*
Print
out
average
lifetime
risk
*/
proc
means
data=
valspt;
title3
'
Average
Lifetime
Cancer
Risk­
Recreational';
65
quit;

proc
means
data=
valsub;
title3
'
Average
Lifetime
Cancer
Risk­
Subsistance';
quit;

data
canc2a;
merge
canc2
sumrsk;
by
reachnmb;

lt
=
70;
/*
lifetime*/

/*
calc
annual
cancer
cases
*/
fwsptc_
b
=
(
bsptrisk
*
fwsptpop)/
lt;
fwsubc_
b
=
(
bsubrisk
*
fwsubpop)/
lt;
swsptc_
b
=
(
bsptrisk
*
swsptpop)/
lt;
swsubc_
b
=
(
bsubrisk
*
swsubpop)/
lt;
fwsptc_
1
=
(
sptrisk1
*
fwsptpop)/
lt;
fwsubc_
1
=
(
subrisk1
*
fwsubpop)/
lt;
swsptc_
1
=
(
sptrisk1
*
swsptpop)/
lt;
swsubc_
1
=
(
subrisk1
*
swsubpop)/
lt;
fwsptc_
2
=
(
sptrisk2
*
fwsptpop)/
lt;
fwsubc_
2
=
(
subrisk2
*
fwsubpop)/
lt;
swsptc_
2
=
(
sptrisk2
*
swsptpop)/
lt;
swsubc_
2
=
(
subrisk2
*
swsubpop)/
lt;

if
dropspt
=
1
then
do;
fwsptc_
b
=
0;
swsptc_
b
=
0;
fwsptc_
1
=
0;
swsptc_
1
=
0;
fwsptc_
2
=
0;
swsptc_
2
=
0;
end;

if
dropsub
=
1
then
do;
fwsubc_
b
=
0;
swsubc_
b
=
0;
fwsubc_
1
=
0;
swsubc_
1
=
0;
fwsubc_
2
=
0;
swsubc_
2
=
0;
end;

fwtotc_
b
=
fwsptc_
b
+
fwsubc_
b;
swtotc_
b
=
swsptc_
b
+
swsubc_
b;
fwtotc_
1
=
fwsptc_
1
+
fwsubc_
1;
swtotc_
1
=
swsptc_
1
+
swsubc_
1;
fwtotc_
2
=
fwsptc_
2
+
fwsubc_
2;
swtotc_
2
=
swsptc_
2
+
swsubc_
2;

fwtotpop
=
fwsptpop
+
fwsubpop;
swtotpop
=
swsptpop
+
swsubpop;
66
sptpop
=
fwsptpop
+
swsptpop;
subpop
=
fwsubpop
+
swsubpop;

totc_
b
=
fwtotc_
b
+
swtotc_
b;
totc_
1
=
fwtotc_
1
+
swtotc_
1;
totc_
2
=
fwtotc_
2
+
swtotc_
2;

totspt_
b
=
fwsptc_
b
+
swsptc_
b;
totsub_
b
=
fwsubc_
b
+
swsubc_
b;
totspt_
1
=
fwsptc_
1
+
swsptc_
1;
totsub_
1
=
fwsubc_
1
+
swsubc_
1;
totspt_
2
=
fwsptc_
2
+
swsptc_
2;
totsub_
2
=
fwsubc_
2
+
swsubc_
2;

format
bsptrisk
bsubrisk
sptrisk1
subrisk1
sptrisk2
subrisk2
e12.;

label
fwsptc_
b
=
'
Cancer
cases,
freshwater
sport
(
BL)'
fwsubc_
b
=
'
Cancer
cases,
freshwater
subsistence
(
BL)'
swsptc_
b
=
'
Cancer
cases,
saltwater
sport
(
BL)'
swsubc_
b
=
'
Cancer
cases,
saltwater
subsistence
(
BL)'
fwtotc_
b
=
'
Total
freshwater
cancer
cases
(
BL)'
swtotc_
b
=
'
Total
saltwater
cancer
cases
(
BL)'
fwsptc_
1
=
'
Cancer
cases,
freshwater
sport
(
Opt
1)'
fwsubc_
1
=
'
Cancer
cases,
freshwater
subsistence
(
Opt
1)'
swsptc_
1
=
'
Cancer
cases,
saltwater
sport
(
Opt
1)'
swsubc_
1
=
'
Cancer
cases,
saltwater
subsistence
(
Opt
1)'
fwtotc_
1
=
'
Total
freshwater
cancer
cases
(
Opt
1)'
swtotc_
1
=
'
Total
saltwater
cancer
cases
(
Opt
1)'
fwsptc_
2
=
'
Cancer
cases,
freshwater
sport
(
Opt
2)'
fwsubc_
2
=
'
Cancer
cases,
freshwater
subsistence
(
Opt
2)'
swsptc_
2
=
'
Cancer
cases,
saltwater
sport
(
Opt
2)'
swsubc_
2
=
'
Cancer
cases,
saltwater
subsistence
(
Opt
2)'
fwtotc_
2
=
'
Total
freshwater
cancer
cases
(
Opt
2)'
swtotc_
2
=
'
Total
saltwater
cancer
cases
(
Opt
2)'
fwsptpop
=
'
Freshwater
sport
population'
fwsubpop
=
'
Freshwater
subsistence
population'
swsptpop
=
'
Saltwater
sport
population'
swsubpop
=
'
Saltwater
subsistence
population'
totspt_
b
=
'
Total
Sport
Cases
(
BL)'
totsub_
b
=
'
Total
Subsistence
Cases
(
BL)'
totspt_
1
=
'
Total
Sport
Cases
(
Opt
1)'
totsub_
1
=
'
Total
Subsistence
Cases
(
Opt1
)'
totspt_
2
=
'
Total
Sport
Cases
(
Opt
2)'
totsub_
2
=
'
Total
Subsistence
Cases
(
Opt
2)'
totc_
b
=
'
Total
Cancer
Cases
(
BL)'
totc_
1
=
'
Total
Cancer
Cases
(
Opt
1)'
totc_
2
=
'
Total
Cancer
Cases
(
Opt
2)'
fwtotpop
=
'
Total
exposed
freshwater
population'
swtotpop
=
'
Total
exposed
saltwater
population'
sptpop
=
'
Exposed
Sport
Population'
subpop
=
'
Exposed
Subsistence
Population';
run;
67
proc
means
sum;
var
totspt_
b
totsub_
b
totspt_
1
totsub_
1
totspt_
2
totsub_
2
totc_
b
totc_
1
totc_
2
sptpop
subpop;
title3
'
SAMPLE
Cancer
estimates';
quit;

proc
means
sum;
weight
weight;
var
totspt_
b
totsub_
b
totspt_
1
totsub_
1
totspt_
2
totsub_
2
totc_
b
totc_
1
totc_
2
sptpop
subpop;
title3
'
NATIONAL
Cancer
estimates';
quit;

/*
Calculate
decrease
in
cancer
cases
under
the
options
and
the
monetized
benefit
based
on
the
value
of
a
statistical
life
(
in
$
2001)

lower
$
2.6
mln
­­
No
longer
used
upper
$
13.6
mln
­­
No
longer
used
mid
$
6.5
mln
*/

data
cancdiff;
set
canc2a;

fwsptd1
=
fwsptc_
b
­
fwsptc_
1;
fwsubd1
=
fwsubc_
b
­
fwsubc_
1;
swsptd1
=
swsptc_
b
­
swsptc_
1;
swsubd1
=
swsubc_
b
­
swsubc_
1;

fwsptd2
=
fwsptc_
b
­
fwsptc_
2;
fwsubd2
=
fwsubc_
b
­
fwsubc_
2;
swsptd2
=
swsptc_
b
­
swsptc_
2;
swsubd2
=
swsubc_
b
­
swsubc_
2;

fwtotd1
=
fwsptd1
+
fwsubd1;
swtotd1
=
swsptd1
+
swsubd1;
totd1
=
fwtotd1
+
swtotd1;

fwtotd2
=
fwsptd2
+
fwsubd2;
swtotd2
=
swsptd2
+
swsubd2;
totd2
=
fwtotd2
+
swtotd2;

fwb1_
lw
=
fwtotd1*
2500000;
fwb1_
hg
=
fwtotd1*
13600000;
swb1_
lw
=
swtotd1*
2500000;
swb1_
hg
=
swtotd1*
13600000;
fwmid1
=
fwtotd1*
6500000;
swmid1
=
swtotd1*
6500000;

fwb2_
lw
=
fwtotd2*
2500000;
fwb2_
hg
=
fwtotd2*
13600000;
swb2_
lw
=
swtotd2*
2500000;
swb2_
hg
=
swtotd2*
13600000;
fwmid2
=
fwtotd2*
6500000;
68
swmid2
=
swtotd2*
6500000;

totb1_
lw
=
fwb1_
lw
+
swb1_
lw;
totb1_
hg
=
fwb1_
hg
+
swb1_
hg;
totb2_
lw
=
fwb2_
lw
+
swb2_
lw;
totb2_
hg
=
fwb2_
hg
+
swb2_
hg;

mid1
=
fwmid1
+
swmid1;
mid2
=
fwmid2
+
swmid2;

run;

proc
means
sum;
var
totb1_
lw
totb1_
hg
totb2_
lw
totb2_
hg
mid1
mid2;
label
totb1_
lw
=
'
Total
Benefits
­
Low
(
Opt
1)'
totb1_
hg
=
'
Total
Benefits
­
High
(
Opt
1)'
totb2_
lw
=
'
Total
Benefits
­
Low
(
Opt
2)'
totb2_
hg
=
'
Total
Benefits
­
High
(
Opt
2)'
mid1
=
'
Mid
Benefits
(
Opt1)'
mid2
=
'
Mid
Benefits
(
Opt2)';
title3
'
Sample
Monetized
Benefits';
quit;

proc
means
sum;
weight
weight;
var
totb1_
lw
totb1_
hg
totb2_
lw
totb2_
hg
mid1
mid2;
label
totb1_
lw
=
'
Total
Benefits
­
Low
(
Opt
1)'
totb1_
hg
=
'
Total
Benefits
­
High
(
Opt
1)'
totb2_
lw
=
'
Total
Benefits
­
Low
(
Opt
2)'
totb2_
hg
=
'
Total
Benefits
­
High
(
Opt
2)'
mid1
=
'
Mid
Benefits
(
Opt1)'
mid2
=
'
Mid
Benefits
(
Opt2)';
title3
'
National
Monetized
Benefits';
quit;

proc
sort;
by
casno;
quit;

proc
means
sum;
by
casno;
var
totd1
totd2
totb1_
lw
totb1_
hg
totb2_
lw
totb2_
hg
mid1
mid2;
label
totb1_
lw
=
'
Total
Benefits
­
Low
(
Opt
1)'
totb1_
hg
=
'
Total
Benefits
­
High
(
Opt
1)'
totb2_
lw
=
'
Total
Benefits
­
Low
(
Opt
2)'
totb2_
hg
=
'
Total
Benefits
­
High
(
Opt
2)'
mid1
=
'
Mid
Benefits
(
Opt1)'
mid2
=
'
Mid
Benefits
(
Opt2)';
title3
'
Sample
Monetized
Benefits';
quit;

proc
means
sum;
weight
weight;
by
casno;
var
totd1
totd2
totb1_
lw
totb1_
hg
totb2_
lw
totb2_
hg
mid1
mid2;
label
69
totb1_
lw
=
'
Total
Benefits
­
Low
(
Opt
1)'
totb1_
hg
=
'
Total
Benefits
­
High
(
Opt
1)'
totb2_
lw
=
'
Total
Benefits
­
Low
(
Opt
2)'
totb2_
hg
=
'
Total
Benefits
­
High
(
Opt
2)'
mid1
=
'
Mid
Benefits
(
Opt1)'
mid2
=
'
Mid
Benefits
(
Opt2)';
title3
'
National
Monetized
Benefits';
quit;

proc
sql;
create
table
bychems
as
select
casno,
sum(
totd1)
as
diff1,
sum(
totd2)
as
diff2,
sum(
totb1_
lw)
as
ben1low,
sum(
totb1_
hg)
as
ben1hg,
sum(
totb2_
lw)
as
ben2low,
sum(
totb2_
hg)
as
ben2hg,
sum(
mid1)
as
midpt1,
sum(
mid2)
as
midpt2
from
cancdiff
group
by
casno
order
by
casno;

create
table
bychemn
as
select
casno,
sum(
totd1*
weight)
as
diff1,
sum(
totd2*
weight)
as
diff2,
sum(
totb1_
lw*
weight)
as
ben1low,
sum(
totb1_
hg*
weight)
as
ben1hg,
sum(
totb2_
lw*
weight)
as
ben2low,
sum(
totb2_
hg*
weight)
as
ben2hg,
sum(
mid1*
weight)
as
midpt1,
sum(
mid2*
weight)
as
midpt2
from
cancdiff
group
by
casno
order
by
casno;
quit;

proc
print
data=
bychems;
label
diff1
=
'
Saved
Cases
(
opt1)'
diff2
=
'
Saved
Cases
(
opt2)'
ben1low
=
'
Total
Benefits
­
Low
(
opt1)'
ben1hg
=
'
Total
Benefits
­
High
(
opt1)'
ben2low
=
'
Total
Benefits
­
Low
(
opt2)'
ben2hg
=
'
Total
Benefits
­
High
(
opt2)'
midpt1
=
'
Midpoint
Benefits
(
opt1)'
midpt2
=
'
Midpoint
Benefits
(
opt2)';
title3
'
Sample
by
Chemical
Casno';
quit;

proc
print
data=
bychemn;
label
diff1
=
'
Saved
Cases
(
opt1)'
diff2
=
'
Saved
Cases
(
opt2)'
ben1low
=
'
Total
Benefits
­
Low
(
opt1)'
ben1hg
=
'
Total
Benefits
­
High
(
opt1)'
ben2low
=
'
Total
Benefits
­
Low
(
opt2)'
ben2hg
=
'
Total
Benefits
­
High
(
opt2)'
midpt1
=
'
Midpoint
Benefits
(
opt1)'
midpt2
=
'
Midpoint
Benefits
(
opt2)';
title3
'
National
by
Chemical
Casno';
quit;
70
/*
End
Cancer­
fish
(
Sub
4).
sas
*/
71
Program
Output
72
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
16
Cancer
from
Fish
Consumption
(
Sub
4)
Average
Lifetime
Cancer
Risk­
Recreational
10:
59
Friday,
February
7,
2003
The
MEANS
Procedure
Variable
Label
N
Mean
Std
Dev
Minimum
Maximum
                                                                                                 
REACHNMB
RF1
Reach
Identifier
534
6557882456
5000460007
1020005061
18090208001
rsk_
bspt
534
2.3094277E­
8
3.3569284E­
7
0
7.3661387E­
6
rsk_
1spt
534
2.3041908E­
8
3.356779E­
7
0
7.3661386E­
6
rsk_
2spt
534
0
0
0
0
                                                                                                 
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
17
Cancer
from
Fish
Consumption
(
Sub
4)
Average
Lifetime
Cancer
Risk­
Subsistance
10:
59
Friday,
February
7,
2003
The
MEANS
Procedure
Variable
Label
N
Mean
Std
Dev
Minimum
Maximum
                                                                                                 
REACHNMB
RF1
Reach
Identifier
534
6557882456
5000460007
1020005061
18090208001
rsk_
bsub
534
1.9334106E­
7
2.8103589E­
6
0
0.000061668
rsk_
1sub
534
1.9290263E­
7
2.8102339E­
6
0
0.000061668
rsk_
2sub
534
0
0
0
0
                                                                                                 
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
19
Cancer
from
Fish
Consumption
(
Sub
4)
NATIONAL
Cancer
estimates
10:
59
Friday,
February
7,
2003
The
MEANS
Procedure
Variable
Label
Sum
                                                           
totspt_
b
Total
Sport
Cases
(
BL)
0.0236828
totsub_
b
Total
Subsistence
Cases
(
BL)
0.0099140
totspt_
1
Total
Sport
Cases
(
Opt
1)
0.0236644
totsub_
1
Total
Subsistence
Cases
(
Opt1
)
0.0099063
totspt_
2
Total
Sport
Cases
(
Opt
2)
0
totsub_
2
Total
Subsistence
Cases
(
Opt
2)
0
totc_
b
Total
Cancer
Cases
(
BL)
0.0335968
totc_
1
Total
Cancer
Cases
(
Opt
1)
0.0335708
totc_
2
Total
Cancer
Cases
(
Opt
2)
0
sptpop
Exposed
Sport
Population
3078238067
subpop
Exposed
Subsistence
Population
153948116
                                                           
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
21
Cancer
from
Fish
Consumption
(
Sub
4)
National
Monetized
Benefits
10:
59
Friday,
February
7,
2003
The
MEANS
Procedure
73
Variable
Label
Sum
                                                         
totb1_
lw
Total
Benefits
­
Low
(
Opt
1)
65.1248195
totb1_
hg
Total
Benefits
­
High
(
Opt
1)
354.2790183
totb2_
lw
Total
Benefits
­
Low
(
Opt
2)
83992.05
totb2_
hg
Total
Benefits
­
High
(
Opt
2)
456916.76
mid1
Mid
Benefits
(
Opt1)
169.3245308
mid2
Mid
Benefits
(
Opt2)
218379.33
                                                         
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
26
Cancer
from
Fish
Consumption
(
Sub
4)
National
Monetized
Benefits
10:
59
Friday,
February
7,
2003
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
CAS
Chemical
Identifier=
117817
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

The
MEANS
Procedure
Variable
Label
Sum
                                                         
totd1
3.859593E­
6
totd2
4.2594894E­
6
totb1_
lw
Total
Benefits
­
Low
(
Opt
1)
9.6489825
totb1_
hg
Total
Benefits
­
High
(
Opt
1)
52.4904650
totb2_
lw
Total
Benefits
­
Low
(
Opt
2)
10.6487236
totb2_
hg
Total
Benefits
­
High
(
Opt
2)
57.9290563
mid1
Mid
Benefits
(
Opt1)
25.0873546
mid2
Mid
Benefits
(
Opt2)
27.6866813
                                                         
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
CAS
Chemical
Identifier=
123911
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

Variable
Label
Sum
                                                         
totd1
5.1934298E­
9
totd2
1.7790932E­
8
totb1_
lw
Total
Benefits
­
Low
(
Opt
1)
0.0129836
totb1_
hg
Total
Benefits
­
High
(
Opt
1)
0.0706306
totb2_
lw
Total
Benefits
­
Low
(
Opt
2)
0.0444773
totb2_
hg
Total
Benefits
­
High
(
Opt
2)
0.2419567
mid1
Mid
Benefits
(
Opt1)
0.0337573
mid2
Mid
Benefits
(
Opt2)
0.1156411
                                                         
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
CAS
Chemical
Identifier=
127184
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

Variable
Label
Sum
                                                         
totd1
4.9093827E­
7
totd2
8.5448467E­
7
totb1_
lw
Total
Benefits
­
Low
(
Opt
1)
1.2273457
totb1_
hg
Total
Benefits
­
High
(
Opt
1)
6.6767605
74
totb2_
lw
Total
Benefits
­
Low
(
Opt
2)
2.1362117
totb2_
hg
Total
Benefits
­
High
(
Opt
2)
11.6209915
mid1
Mid
Benefits
(
Opt1)
3.1910988
mid2
Mid
Benefits
(
Opt2)
5.5541504
                                                         
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
CAS
Chemical
Identifier=
62533
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

Variable
Label
Sum
                                                         
totd1
3.4996929E­
8
totd2
1.211939E­
7
totb1_
lw
Total
Benefits
­
Low
(
Opt
1)
0.0874923
totb1_
hg
Total
Benefits
­
High
(
Opt
1)
0.4759582
totb2_
lw
Total
Benefits
­
Low
(
Opt
2)
0.3029847
totb2_
hg
Total
Benefits
­
High
(
Opt
2)
1.6482370
mid1
Mid
Benefits
(
Opt1)
0.2274800
mid2
Mid
Benefits
(
Opt2)
0.7877603
                                                         
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
27
Cancer
from
Fish
Consumption
(
Sub
4)
National
Monetized
Benefits
10:
59
Friday,
February
7,
2003
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
CAS
Chemical
Identifier=
62759
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

The
MEANS
Procedure
Variable
Label
Sum
                                                         
totd1
0
totd2
6.8674045E­
6
totb1_
lw
Total
Benefits
­
Low
(
Opt
1)
0
totb1_
hg
Total
Benefits
­
High
(
Opt
1)
0
totb2_
lw
Total
Benefits
­
Low
(
Opt
2)
17.1685114
totb2_
hg
Total
Benefits
­
High
(
Opt
2)
93.3967018
mid1
Mid
Benefits
(
Opt1)
0
mid2
Mid
Benefits
(
Opt2)
44.6381295
                                                         
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
CAS
Chemical
Identifier=
67663
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

Variable
Label
Sum
                                                         
totd1
7.0577004E­
9
totd2
1.2284023E­
8
totb1_
lw
Total
Benefits
­
Low
(
Opt
1)
0.0176443
totb1_
hg
Total
Benefits
­
High
(
Opt
1)
0.0959847
totb2_
lw
Total
Benefits
­
Low
(
Opt
2)
0.0307101
totb2_
hg
Total
Benefits
­
High
(
Opt
2)
0.1670627
75
mid1
Mid
Benefits
(
Opt1)
0.0458751
mid2
Mid
Benefits
(
Opt2)
0.0798461
                                                         
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
CAS
Chemical
Identifier=
7440382
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

Variable
Label
Sum
                                                         
totd1
0.000019350
totd2
0.0335808
totb1_
lw
Total
Benefits
­
Low
(
Opt
1)
48.3737510
totb1_
hg
Total
Benefits
­
High
(
Opt
1)
263.1532057
totb2_
lw
Total
Benefits
­
Low
(
Opt
2)
83952.03
totb2_
hg
Total
Benefits
­
High
(
Opt
2)
456699.02
mid1
Mid
Benefits
(
Opt1)
125.7717527
mid2
Mid
Benefits
(
Opt2)
218275.27
                                                         
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
CAS
Chemical
Identifier=
75003
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

Variable
Label
Sum
                                                         
totd1
4.5438914E­
8
totd2
5.2655964E­
8
totb1_
lw
Total
Benefits
­
Low
(
Opt
1)
0.1135973
totb1_
hg
Total
Benefits
­
High
(
Opt
1)
0.6179692
totb2_
lw
Total
Benefits
­
Low
(
Opt
2)
0.1316399
totb2_
hg
Total
Benefits
­
High
(
Opt
2)
0.7161211
mid1
Mid
Benefits
(
Opt1)
0.2953529
mid2
Mid
Benefits
(
Opt2)
0.3422638
                                                         
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
28
Cancer
from
Fish
Consumption
(
Sub
4)
National
Monetized
Benefits
10:
59
Friday,
February
7,
2003
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
CAS
Chemical
Identifier=
75092
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

The
MEANS
Procedure
Variable
Label
Sum
                                                         
totd1
2.1562044E­
9
totd2
5.3785951E­
7
totb1_
lw
Total
Benefits
­
Low
(
Opt
1)
0.0053905
totb1_
hg
Total
Benefits
­
High
(
Opt
1)
0.0293244
totb2_
lw
Total
Benefits
­
Low
(
Opt
2)
1.3446488
totb2_
hg
Total
Benefits
­
High
(
Opt
2)
7.3148893
mid1
Mid
Benefits
(
Opt1)
0.0140153
mid2
Mid
Benefits
(
Opt2)
3.4960868
76
                                                         
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
CAS
Chemical
Identifier=
75354
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

Variable
Label
Sum
                                                         
totd1
1.0366721E­
6
totd2
1.8043417E­
6
totb1_
lw
Total
Benefits
­
Low
(
Opt
1)
2.5916802
totb1_
hg
Total
Benefits
­
High
(
Opt
1)
14.0987401
totb2_
lw
Total
Benefits
­
Low
(
Opt
2)
4.5108542
totb2_
hg
Total
Benefits
­
High
(
Opt
2)
24.5390469
mid1
Mid
Benefits
(
Opt1)
6.7383684
mid2
Mid
Benefits
(
Opt2)
11.7282210
                                                         
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
CAS
Chemical
Identifier=
78591
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

Variable
Label
Sum
                                                         
totd1
3.1074473E­
9
totd2
4.4458063E­
9
totb1_
lw
Total
Benefits
­
Low
(
Opt
1)
0.0077686
totb1_
hg
Total
Benefits
­
High
(
Opt
1)
0.0422613
totb2_
lw
Total
Benefits
­
Low
(
Opt
2)
0.0111145
totb2_
hg
Total
Benefits
­
High
(
Opt
2)
0.0604630
mid1
Mid
Benefits
(
Opt1)
0.0201984
mid2
Mid
Benefits
(
Opt2)
0.0288977
                                                         
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
CAS
Chemical
Identifier=
79016
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

Variable
Label
Sum
                                                         
totd1
3.6777845E­
8
totd2
6.9316416E­
8
totb1_
lw
Total
Benefits
­
Low
(
Opt
1)
0.0919446
totb1_
hg
Total
Benefits
­
High
(
Opt
1)
0.5001787
totb2_
lw
Total
Benefits
­
Low
(
Opt
2)
0.1732910
totb2_
hg
Total
Benefits
­
High
(
Opt
2)
0.9427033
mid1
Mid
Benefits
(
Opt1)
0.2390560
mid2
Mid
Benefits
(
Opt2)
0.4505567
                                                         
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
29
Cancer
from
Fish
Consumption
(
Sub
4)
National
Monetized
Benefits
10:
59
Friday,
February
7,
2003
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
CAS
Chemical
Identifier=
86306
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
77
The
MEANS
Procedure
Variable
Label
Sum
                                                         
totd1
1.1784956E­
6
totd2
1.4088328E­
6
totb1_
lw
Total
Benefits
­
Low
(
Opt
1)
2.9462389
totb1_
hg
Total
Benefits
­
High
(
Opt
1)
16.0275399
totb2_
lw
Total
Benefits
­
Low
(
Opt
2)
3.5220820
totb2_
hg
Total
Benefits
­
High
(
Opt
2)
19.1601263
mid1
Mid
Benefits
(
Opt1)
7.6602213
mid2
Mid
Benefits
(
Opt2)
9.1574133
                                                         
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
31
Cancer
from
Fish
Consumption
(
Sub
4)
National
by
Chemical
Casno
10:
59
Friday,
February
7,
2003
Obs
CASNO
diff1
diff2
ben1low
ben1hg
ben2low
ben2hg
midpt1
midpt2
1
117817
.000003860
0.000004
9.6490
52.490
10.65
57.93
25.087
27.69
2
123911
.000000005
0.000000
0.0130
0.071
0.04
0.24
0.034
0.12
3
127184
.000000491
0.000001
1.2273
6.677
2.14
11.62
3.191
5.55
4
62533
.000000035
0.000000
0.0875
0.476
0.30
1.65
0.227
0.79
5
62759
0
0.000007
0.0000
0.000
17.17
93.40
0.000
44.64
6
67663
.000000007
0.000000
0.0176
0.096
0.03
0.17
0.046
0.08
7
7440382
.000019350
0.033581
48.3738
263.153
83952.03
456699.02
125.772
218275.27
8
75003
.000000045
0.000000
0.1136
0.618
0.13
0.72
0.295
0.34
9
75092
.000000002
0.000001
0.0054
0.029
1.34
7.31
0.014
3.50
10
75354
.000001037
0.000002
2.5917
14.099
4.51
24.54
6.738
11.73
11
78591
.000000003
0.000000
0.0078
0.042
0.01
0.06
0.020
0.03
12
79016
.000000037
0.000000
0.0919
0.500
0.17
0.94
0.239
0.45
13
86306
.000001178
0.000001
2.9462
16.028
3.52
19.16
7.660
9.16
78
Cancer
from
Drinking
Water
79
"
Data
for
Brad
preferred.
sas"
Generates
a
data
set
of
pollutant
loadings
discharged
to
RF1
reaches
from
direct
dischargers
and
POTWs
(
with
removals)
for
the
water
quality
modeling
program.
80
/*
Program:
Data
for
Brad.
sas
Author:
Stuart
Smith,
Abt
Associates
Inc.
Date:
03/
27/
2000
Updated:
07/
17/
2000
This
program
creates
a
data
file
for
several
carcinogens
to
be
used
in
estimating
downstream
concentrations
for
benefits
stemming
from
drinking
water.
*/

/*****************************************************************************/
/*****************************************************************************/
/*
Administrative
Requirements
*/
/*****************************************************************************/
/*****************************************************************************/

/*
Static
Library
*/
libname
mpm2
'
H:\
ENVR\
Triton05
MP&
M\
Benefits\
MP&
M
Phase
2
Analysis\
Data\
SAS
Sets
for
Analysis\';
/*
Static
Data
Sets
*/

/*
Run
Specific
Library
*/
libname
rundat
'
H:\
ENVR\
Triton05
MP&
M\
Benefits\
MP&
M
Phase
2
Analysis\
Data\
Runs\
td\
Prefered\';

/*
Run
Specific
LOADINGS
file
in
SAS
format
*/
data
load;
set
rundat.
td_
pf;
run;

/*
Set
the
Overall
Title
for
Output
*/
title
'
MP&
M
Benefits
Preferred
Option';

/*****************************************************************************/
/*****************************************************************************/
/*
Read
in
Loadings
Data
*/
/*
*/
/*
This
is
the
main
set
of
loadings
from
the
Access
DB.
All
cutoffs
and
*/
/*
various
other
option
settings
have
been
done
in
Access.
*/
/*****************************************************************************/
/*****************************************************************************/

/*
CALCULATE
LOADINGS
PER
DAY
IN
UG/
DAY,
LOADINGS
GIVEN
IN
LBS/
YEAR
CONVERSION
FACTOR
UG/
KG
is
10**
9
CONVERSION
FACTOR
LB/
KG
is
0.4535924
EVENT
FREQUENCY
FOR
HUMAN
HEALTH
IS
365
DAYS
Grab
indirect
and
direct
dischargers
only
I
=
indirect
(
always
included)
D
=
direct
(
always
included)
CH
=
contract
hauling
(
currently
excluded,
only
1
facility)
Z
=
zero
discharge
(
never
included)
R
=
recycled
(
never
included)

Baseline
closures
are
accounted
for
by
including
the
baseclos
dataset.
If
base
=
1
then
the
facility
is
open
in
the
baseline
and
is
included
in
the
81
analysis.
Incremental
closures
are
also
included
by
testing
to
see
if
the
opt5
variable
is
equal
to
1.
If
equal
to
1,
the
facility
closese
due
to
the
regulation
and
its
loadings
are
set
to
0.
*/

proc
sql;
create
table
loads
as
select
siteid,
casnum
as
casno,
((
loads0/
365)
*
0.4535924)
as
base,
case
when
loads5
is
missing
then
((
loads0/
365)
*
0.4535924)
when
loads5
<
0
or
opt5
=
1
then
0
else
((
loads5/
365)
*
0.4535924)
end
as
treat1,
0
as
treat2,
sitedest,
weights
from
load,
mpm2.
poll2cas,
mpm2.
baseclos
where
loads0
is
not
missing
and
pollcode=
polluta1
and
sitedest
in
('
I','
D')
and
load.
siteid
=
baseclos.
sid
and
base
=
1
order
by
siteid;
quit;

proc
sort
data=
loads;
by
siteid
casno;
quit;

/*
MERGE
FACILITY
AND
LOADINGS
TO
CREATE
THREE
FILES.

1.
INDIRECT
DISCHARGERS
2.
DIRECT
DISCHARGERS
3.
FACILITIES
WITH
NO
REACH
INFORMATION
(
REACHNMB)

*/

data
facs;
set
mpm2.
fac_
info;
run;

proc
sort
data=
facs;
by
siteid;
quit;

data
facs2;
merge
facs
loads(
keep
=
sitedest
siteid
casno
base
treat1
treat2
weights);
by
siteid;

if
casno
^=
'
62533'
and
casno
^=
'
62759'
and
casno
^=
'
75003'
and
casno
^=
'
78591'
and
casno
^=
'
79016'
and
casno
^=
'
86306'
and
casno
^=
'
123911'
then
delete;
run;

proc
sql;
create
table
datas
as
select
siteid,
reachnmb,
facs2.
casno,
case
when
sitedest
=
'
I'
then
base*(
1­(
potw_
rem/
100))
else
base
end
as
base,
82
case
when
sitedest
=
'
I'
then
treat1*(
1­(
potw_
rem/
100))
else
treat1
end
as
treat1,
case
when
sitedest
=
'
I'
then
treat2*(
1­(
potw_
rem/
100))
else
treat2
end
as
treat2,(
biodegre/
24)
as
decay,
weights
as
weight
from
facs2,
mpm2.
chemdata,
mpm2.
twf_
remr
where
facs2.
casno
=
chemdata.
casno
and
reachnmb
^=
.
and
facs2.
casno
=
twf_
remr.
cas;
quit;

data
rundat.
Brad_
pf;
set
datas;
label
siteid
=
'
Facility
Identification
Number'
reachnmb
=
'
Reach
RF1
Identifier'
casno
=
'
Chemical
Abstract
Number'
base
=
'
Baseline
Chemical
Loadings
in
kg/
day'
treat1
=
'
Preferred
Option
Chemical
Loadings
in
kg/
day'
treat2
=
'
EMPTY
PLACE
HOLDER
­
NOT
VALID
DATA'
decay
=
'
Decay
Rate
in
1/
hour'
weight
=
'
Sample
Weight';
run;

/*
End
Data
for
Brad
Preferred.
sas
*/
83
Water
Quality
Modeling
Pollutant
in­
stream
concentrations
on
RF1
reaches
containing
drinking
water
intakes
downstream
from
MP&
M
facilities
and
POTWs
are
estimated
for
six
carcinogens
not
covered
by
EPA
drinking
water
criteria.
The
water
quality
model
used
is
the
Risk­
Screening
Environmental
Indicators
developed
for
the
EPA
OPPT
(
See
DCN
37554).
84
"
Drinking
Water
Cancer
(
Sub
6).
sas"
Data
from
the
water
quality
modeling
is
used
to
estimate
cancer
risk
from
drinking
water
employing
reference
doses
for
the
six
carcinogens.
Reduced
cancer
risk
is
then
applied
to
the
exposed
populations
and
the
reduction
in
cancer
cases
is
determined
along
with
a
monetary
value.
85
/*
Program:
Drinking
Water
Cancer
Revised
(
Sub
6).
sas
Authors:
Abt
Associates
Inc.;
Rob
Sartain,
Elena
Besedin,
Stuart
Smith
Date:
04/
21/
2000
Updated:
01/
10/
2003
This
program
calculates
cancer
incidents
due
to
drinking
water
consumption
by
exposed
populations.
*/

title2
'
Drinking
Water
Cancer
(
Sub
6)';

/*
Load
concentration
data
from
Brad's
run.
*/

data
canc;
set
rundat.
bradout;
if
baseconc
>
0;
if
intakect
>
0;

keep
onreach
casno
dwpop
baseconc
t1conc
t2conc
weight;
run;

proc
sort
data=
canc;
by
onreach
casno
weight;
quit;

/*
BRING
IN
SLOPE
FACTOR,
REFERENCE
DOSE,
AND
BIOCONCENTRATION
FROM
CHEMDATA
*/

proc
sql;

create
table
canc1
as
select
onreach
as
reachnmb,
canc.
casno,
sum(
baseconc)
as
base,
sum(
t1conc)
as
treat1,
sum(
t2conc)
as
treat2,
avg(
dwpop)
as
pop,
avg(
slope_
fa)
as
sf,
avg(
referenc)
as
rfd,
weight
as
smplwt
from
canc,
mpm2.
chemdata
where
canc.
casno
=
chemdata.
casno
and
slope_
fa
is
not
missing
group
by
onreach,
canc.
casno,
weight
order
by
reachnmb,
canc.
casno,
smplwt;
quit;

/*
ESTIMATE
CANCER
EQUATIONS
AND
CALCULATE
CANCER
CASES
DUE
TO
DRINKING
WATER
CONSUMPTION
*/

data
canc2;
set
canc1;
if
sf;
if
smplwt
>
1000
then
delete;
/*
Drop
obs
with
extreme
sample
weights
*/
if
casno
=
'
79016'
then
delete;
/*
Has
DW
criterion,
so
don't
model
*/

/*
DEFINE
CONSTANTS
*/

cf1
=
0.001;
/*
conversion
milligrams
per
microgram
*/
cf2
=
365;
/*
conversion:
day
per
year
*/
cr
=
1.24;
/*
consumption
rate:
liters
of
water
per
day
*/
ef
=
350;
/*
exposure
frequency:
350
days
per
year
*/
86
ed
=
70;
/*
exposure
duration:
70
years
*/
bw
=
70;
/*
body
weight:
70
kg
*/
lt
=
70;
/*
lifetime:
70
years
*/

/*
CALCULATE
CANCER
RISK
*/

/*
base
values
*/
brisk
=
((
base
*
cf1
*
cr
*
ef
*
ed)
/
(
bw
*
lt
*
cf2))
*
sf;

/*
treatment
values
*/
risk1
=
((
treat1
*
cf1
*
cr
*
ef
*
ed)
/
(
bw
*
lt
*
cf2))
*
sf;

risk2
=
((
treat2
*
cf1
*
cr
*
ef
*
ed)
/
(
bw
*
lt
*
cf2))
*
sf;
run;

/*
Sum
up
the
risks
over
the
pollutants
by
reach.
Keep
the
reach
statictics
*/
proc
sql;

create
table
sumrsk
as
select
reachnmb,
sum(
brisk)
as
rsk_
b
,
sum(
risk1)
as
rsk_
1,
sum(
risk2)
as
rsk_
2
from
canc2
group
by
reachnmb
order
by
reachnmb;

/*
Print
out
average
lifetime
risk
*/
proc
means
data=
sumrsk;
title3
'
Average
Lifetime
Cancer
Risk';
quit;

data
canc2a;
merge
canc2
sumrsk;
by
reachnmb;

lt
=
70;
/*
lifetime
*/

/*
calc
cancer
cases
*/
canc_
b
=
(
brisk
*
pop)
/
lt;
canc_
1
=
(
risk1
*
pop)
/
lt;
canc_
2
=
(
risk2
*
pop)
/
lt;

totpop
=
pop;

format
brisk
risk1
risk2
e12.;

label
canc_
b
=
'
Cancer
cases
(
BL)'
canc_
1
=
'
Cancer
cases
(
Opt
1)'
canc_
2
=
'
Cancer
cases
(
Opt
2)'
totpop
=
'
Total
Exposed
Population';

if
canc_
b
>
0.65
then
delete;
/*
Drop
unreasonably
large
cancer
cases
(
outliers)
*/
87
run;

/*
Determine
the
exposed
population
and
sample
weight
*/

proc
sql;

create
table
smplpop
as
select
reachnmb,
avg(
totpop)
as
pop,
avg(
smplwt)
as
samplwt
from
canc2a
group
by
reachnmb
order
by
reachnmb;
quit;

proc
means
data=
canc2a
sum;
var
canc_
b
canc_
1
canc_
2;
title3
'
SAMPLE
Cancer
estimates';
quit;

proc
means
data=
smplpop
sum;
var
pop;
title3
'
SAMPLE
Cancer
Exposed
Population';
quit;

proc
means
data=
canc2a
sum;
weight
smplwt;
var
canc_
b
canc_
1
canc_
2;
title3
'
NATIONAL
Cancer
estimates';
quit;

proc
means
data=
smplpop
sum;
weight
samplwt;
var
pop;
title3
'
National
Cancer
Exposed
Population';
quit;

/*
Calculate
decrease
in
cancer
cases
under
the
options
and
the
monetized
benefit
based
on
the
value
of
a
statistical
life
(
in
$
2001)

lower
$
2.6
mln
­­
No
longer
used
upper
$
13.6
mln
­­
No
longer
used
mid
$
6.5
mln*/

data
cancdiff;
set
canc2a;

diff1
=
canc_
b
­
canc_
1;
diff2
=
canc_
b
­
canc_
2;

b1_
lw
=
diff1*
2500000;
b1_
hg
=
diff1*
13600000;
mid1
=
diff1*
6500000;

b2_
lw
=
diff2*
2500000;
b2_
hg
=
diff2*
13600000;
mid2
=
diff2*
6500000;
88
run;

proc
means
sum;
var
diff1
diff2
b1_
lw
b1_
hg
b2_
lw
b2_
hg
mid1
mid2;
title3
'
Sample
Monetized
Benefits';
label
b1_
lw
=
'
Benefits
­
Low
(
Opt
1)'
b1_
hg
=
'
Benefits
­
High
(
Opt
1)'
b2_
lw
=
'
Benefits
­
Low
(
Opt
2)'
b2_
hg
=
'
Benefits
­
High
(
Opt
2)'
mid1
=
'
Mid
Benefits
(
Opt1)'
mid2
=
'
Mid
Benefits
(
Opt2)';
quit;

proc
means
sum;
weight
smplwt;
var
diff1
diff2
b1_
lw
b1_
hg
b2_
lw
b2_
hg
mid1
mid2;
title3
'
National
Monetized
Benefits';
label
b1_
lw
=
'
Benefits
­
Low
(
Opt
1)'
b1_
hg
=
'
Benefits
­
High
(
Opt
1)'
b2_
lw
=
'
Benefits
­
Low
(
Opt
2)'
b2_
hg
=
'
Benefits
­
High
(
Opt
2)'
mid1
=
'
Mid
Benefits
(
Opt1)'
mid2
=
'
Mid
Benefits
(
Opt2)';
quit;

proc
sort;
by
casno;
quit;

proc
means
sum;
by
casno;
var
diff1
diff2
b1_
lw
b1_
hg
b2_
lw
b2_
hg
mid1
mid2;
title3
'
Sample
Monetized
Benefits';
label
b1_
lw
=
'
Benefits
­
Low
(
Opt
1)'
b1_
hg
=
'
Benefits
­
High
(
Opt
1)'
b2_
lw
=
'
Benefits
­
Low
(
Opt
2)'
b2_
hg
=
'
Benefits
­
High
(
Opt
2)'
mid1
=
'
Mid
Benefits
(
Opt1)'
mid2
=
'
Mid
Benefits
(
Opt2)';
quit;

proc
means
sum;
weight
smplwt;
by
casno;
var
diff1
diff2
b1_
lw
b1_
hg
b2_
lw
b2_
hg
mid1
mid2;
title3
'
National
Monetized
Benefits';
label
b1_
lw
=
'
Benefits
­
Low
(
Opt
1)'
b1_
hg
=
'
Benefits
­
High
(
Opt
1)'
b2_
lw
=
'
Benefits
­
Low
(
Opt
2)'
b2_
hg
=
'
Benefits
­
High
(
Opt
2)'
mid1
=
'
Mid
Benefits
(
Opt1)'
mid2
=
'
Mid
Benefits
(
Opt2)';
quit;

proc
sql;
89
create
table
bychems
as
select
casno,
sum(
diff1)
as
diff1a,
sum(
diff2)
as
diff2a,
sum(
b1_
lw)
as
ben1low,
sum(
b1_
hg)
as
ben1hg,
sum(
b2_
lw)
as
ben2low,
sum(
b2_
hg)
as
ben2hg,
sum(
mid1)
as
midpt1,
sum(
mid2)
as
midpt2
from
cancdiff
group
by
casno
order
by
casno;

create
table
bychemn
as
select
casno,
sum(
diff1*
smplwt)
as
diff1a,
sum(
diff2*
smplwt)
as
diff2a,
sum(
b1_
lw*
smplwt)
as
ben1low,
sum(
b1_
hg*
smplwt)
as
ben1hg,
sum(
b2_
lw*
smplwt)
as
ben2low,
sum(
b2_
hg*
smplwt)
as
ben2hg,
sum(
mid1*
smplwt)
as
midpt1,
sum(
mid2*
smplwt)
as
midpt2
from
cancdiff
group
by
casno
order
by
casno;
quit;

proc
print
data=
bychems;
label
diff1a
=
'
Saved
Cases
(
opt1)'
diff2a
=
'
Saved
Cases
(
opt2)'
ben1low
=
'
Total
Benefits
­
Low
(
opt1)'
ben1hg
=
'
Total
Benefits
­
High
(
opt1)'
ben2low
=
'
Total
Benefits
­
Low
(
opt2)'
ben2hg
=
'
Total
Benefits
­
High
(
opt2)'
midpt1
=
'
Midpoint
Benefits
(
opt1)'
midpt2
=
'
Midpoint
Benefits
(
opt2)';
title3
'
Sample
by
Chemical
Casno';
quit;

proc
print
data=
bychemn;
label
diff1a
=
'
Saved
Cases
(
opt1)'
diff2a
=
'
Saved
Cases
(
opt2)'
ben1low
=
'
Total
Benefits
­
Low
(
opt1)'
ben1hg
=
'
Total
Benefits
­
High
(
opt1)'
ben2low
=
'
Total
Benefits
­
Low
(
opt2)'
ben2hg
=
'
Total
Benefits
­
High
(
opt2)'
midpt1
=
'
Midpoint
Benefits
(
opt1)'
midpt2
=
'
Midpoint
Benefits
(
opt2)';
title3
'
National
by
Chemical
Casno';
quit;

/*
End
Drinking
Water
Cancer
(
Sub
6).
sas
*/
90
Program
Output
91
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
34
Drinking
Water
Cancer
(
Sub
6)
10:
59
Friday,
February
7,
2003
Average
Lifetime
Cancer
Risk
The
MEANS
Procedure
Variable
N
Mean
Std
Dev
Minimum
Maximum
                                                                              
reachnmb
38
6057476142
4302788226
2050107010
18070105001
rsk_
b
38
9.065142E­
11
4.485846E­
10
5.344196E­
22
2.7381714E­
9
rsk_
1
38
9.063968E­
11
4.48551E­
10
5.343966E­
22
2.7379907E­
9
rsk_
2
38
0
0
0
0
                                                                              
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
37
Drinking
Water
Cancer
(
Sub
6)
10:
59
Friday,
February
7,
2003
NATIONAL
Cancer
estimates
The
MEANS
Procedure
Variable
Label
Sum
                                                
canc_
b
Cancer
cases
(
BL)
5.7480886E­
6
canc_
1
Cancer
cases
(
Opt
1)
5.7465428E­
6
canc_
2
Cancer
cases
(
Opt
2)
0
                                                
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
38
Drinking
Water
Cancer
(
Sub
6)
10:
59
Friday,
February
7,
2003
National
Cancer
Exposed
Population
The
MEANS
Procedure
Analysis
Variable
:
pop
Sum
            
120643895
            
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
40
Drinking
Water
Cancer
(
Sub
6)
10:
59
Friday,
February
7,
2003
National
Monetized
Benefits
The
MEANS
Procedure
Variable
Label
Sum
                                                   
diff1
1.5458453E­
9
diff2
5.7480886E­
6
b1_
lw
Benefits
­
Low
(
Opt
1)
0.0038646
b1_
hg
Benefits
­
High
(
Opt
1)
0.0210235
b2_
lw
Benefits
­
Low
(
Opt
2)
14.3702215
b2_
hg
Benefits
­
High
(
Opt
2)
78.1740052
mid1
Mid
Benefits
(
Opt1)
0.0100480
mid2
Mid
Benefits
(
Opt2)
37.3625760
92
                                                   
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
43
Drinking
Water
Cancer
(
Sub
6)
10:
59
Friday,
February
7,
2003
National
Monetized
Benefits
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
CASNO=
123911
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

The
MEANS
Procedure
Variable
Label
Sum
                                                   
diff1
1.0666704E­
9
diff2
1.316445E­
9
b1_
lw
Benefits
­
Low
(
Opt
1)
0.0026667
b1_
hg
Benefits
­
High
(
Opt
1)
0.0145067
b2_
lw
Benefits
­
Low
(
Opt
2)
0.0032911
b2_
hg
Benefits
­
High
(
Opt
2)
0.0179037
mid1
Mid
Benefits
(
Opt1)
0.0069334
mid2
Mid
Benefits
(
Opt2)
0.0085569
                                                   
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
CASNO=
62533
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

Variable
Label
Sum
                                                   
diff1
6.62521E­
11
diff2
1.283883E­
10
b1_
lw
Benefits
­
Low
(
Opt
1)
0.000165630
b1_
hg
Benefits
­
High
(
Opt
1)
0.000901029
b2_
lw
Benefits
­
Low
(
Opt
2)
0.000320971
b2_
hg
Benefits
­
High
(
Opt
2)
0.0017461
mid1
Mid
Benefits
(
Opt1)
0.000430639
mid2
Mid
Benefits
(
Opt2)
0.000834524
                                                   
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
CASNO=
62759
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

Variable
Label
Sum
                                                   
diff1
0
diff2
5.7462073E­
6
b1_
lw
Benefits
­
Low
(
Opt
1)
0
b1_
hg
Benefits
­
High
(
Opt
1)
0
b2_
lw
Benefits
­
Low
(
Opt
2)
14.3655182
b2_
hg
Benefits
­
High
(
Opt
2)
78.1484188
mid1
Mid
Benefits
(
Opt1)
0
mid2
Mid
Benefits
(
Opt2)
37.3503472
                                                   
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
CASNO=
75003
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
93
Variable
Label
Sum
                                                   
diff1
1.865634E­
10
diff2
1.943843E­
10
b1_
lw
Benefits
­
Low
(
Opt
1)
0.000466409
b1_
hg
Benefits
­
High
(
Opt
1)
0.0025373
b2_
lw
Benefits
­
Low
(
Opt
2)
0.000485961
b2_
hg
Benefits
­
High
(
Opt
2)
0.0026436
mid1
Mid
Benefits
(
Opt1)
0.0012127
mid2
Mid
Benefits
(
Opt2)
0.0012635
                                                   
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
44
Drinking
Water
Cancer
(
Sub
6)
10:
59
Friday,
February
7,
2003
National
Monetized
Benefits
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
CASNO=
78591
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

The
MEANS
Procedure
Variable
Label
Sum
                                                   
diff1
1.883605E­
11
diff2
2.139805E­
11
b1_
lw
Benefits
­
Low
(
Opt
1)
0.000047090
b1_
hg
Benefits
­
High
(
Opt
1)
0.000256170
b2_
lw
Benefits
­
Low
(
Opt
2)
0.000053495
b2_
hg
Benefits
­
High
(
Opt
2)
0.000291014
mid1
Mid
Benefits
(
Opt1)
0.000122434
mid2
Mid
Benefits
(
Opt2)
0.000139087
                                                   
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
CASNO=
86306
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

Variable
Label
Sum
                                                   
diff1
2.075234E­
10
diff2
2.207379E­
10
b1_
lw
Benefits
­
Low
(
Opt
1)
0.000518808
b1_
hg
Benefits
­
High
(
Opt
1)
0.0028223
b2_
lw
Benefits
­
Low
(
Opt
2)
0.000551845
b2_
hg
Benefits
­
High
(
Opt
2)
0.0030020
mid1
Mid
Benefits
(
Opt1)
0.0013489
mid2
Mid
Benefits
(
Opt2)
0.0014348
                                                   
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
46
Drinking
Water
Cancer
(
Sub
6)
10:
59
Friday,
February
7,
2003
National
by
Chemical
Casno
Obs
CASNO
diff1a
diff2a
ben1low
ben1hg
ben2low
ben2hg
midpt1
midpt2
94
1
123911
1.06667E­
9
.000000001
.002666676
0.014507
0.0033
0.0179
.006933358
0.0086
2
62533
6.6252E­
11
1.2839E­
10
.000165630
0.000901
0.0003
0.0017
.000430639
0.0008
3
62759
0
.000005746
0
0.000000
14.3655
78.1484
0
37.3503
4
75003
1.8656E­
10
1.9438E­
10
.000466409
0.002537
0.0005
0.0026
.001212662
0.0013
5
78591
1.8836E­
11
2.1398E­
11
.000047090
0.000256
0.0001
0.0003
.000122434
0.0001
6
86306
2.0752E­
10
2.2074E­
10
.000518808
0.002822
0.0006
0.0030
.001348902
0.0014
95
Systemic
Risk
from
Fish
Consumption
96
"
Generate
Discharge
Events
(
Sub1).
sas"
Generates
a
data
set
of
pollutant
loading
events
and
their
corresponding
weights
for
each
RF1
reach
receiving
MP&
M
discharges.
See
Estimating
MP&
M
Discharge
Loadings
for
program
code.
97
"
Human
Health
AWQC
Exceedences
(
Sub
2).
sas"
Calculates
in­
stream
pollutant
concentrations
and
generates
a
data
set
of
pollutant
concentrations
for
each
RF1
reach.
See
Cancer
from
Fish
Consumption
for
program
code
and
output.
98
"
Systemic
Cancer
(
Sub
5).
sas"
Uses
the
data
set
of
pollutant
concentrations
for
each
RF1
reach
with
pollutant
specific
reference
doses
to
determine
systemic
risk.
The
overall
hazard
ratio
for
each
RF1
reach
is
then
estimated.
99
/*
Program:
Systemic
Cancer
(
Sub
5).
sas
Authors:
Abt
Associates,
Inc.;
Rob
Sartain,
Elena
Besedin,
Stuart
Smith
Date:
04/
21/
2000
Updated:
11/
08/
2002
This
program
calculates
systemic
hazard
scores
for
fish
consumption.
*/

title2
'
Systemic
Cancer
(
Sub
5)';

/*
COUNTY
LEVEL
FISHING
LICENSE
DATA
*/

/*
Load
fishing
license
data
here.
Sum
over
the
types
by
county.
Sum
over
the
counties
containing
a
given
reach.

Final
data
set
contains
reaches
with
the
total
possible
number
of
affected
anglers.
This
number
will
be
multiplied
by
the
ratio
of
reach
length
to
total
reach
miles
in
affected
counties
to
obtain
an
estimate
of
the
number
of
affected
anglers.
*/

data
licens;
set
mpm2.
fish_
lic;

fw_
lic
=
sum(
fw_
res,
fw_
reso,
fw_
sres,
fw_
smres,
fw_
dres,
trout,
fw_
life,
fw_
hunt1,
fw_
2hunt,
fw_
hunts,
fw_
hunt2,
fw_
salt1,
fw_
trout);
sw_
lic
=
sum(
fw_
salt1,
sw_
res,
sw_
dres);

if
fw_
lic=.
then
fw_
lic=
0;
if
sw_
lic=.
then
sw_
lic=
0;
cntyfip
=
fips;

keep
cntyfip
fw_
lic
sw_
lic;
run;

proc
sort
nodupkey
data=
licens;
by
cntyfip;
quit;

/*
DETERMINE
COUNTIES
AFFECTED
BY
REACH
*/
data
facs;
set
mpm2.
fac_
info;
run;

proc
sort
data=
facs;
by
siteid;
quit;

data
cnty;
set
facs;

cntyfip1=
stco1;
cntyfip2=
stco2;
cntyfip3=
stco3;
cntyfip4=
stco4;
cntyfip5=
stco5;
cntyfip6=
stco6;
cntyfip7=
stco7;
cntyfip8=
stco8;

keep
reachnmb
cntyfip1­
cntyfip8;
run;
100
proc
sort
nodupkey
data=
cnty;
by
reachnmb;
quit;

proc
transpose
data=
cnty
out=
cnty2;
by
reachnmb;
var
cntyfip1­
cntyfip8;
quit;

data
cnty3;
set
cnty2;
cntyfip
=
col1/
1;
if
cntyfip=.
then
delete;
keep
reachnmb
cntyfip;
run;

proc
sort
data=
cnty3;
by
cntyfip;
quit;

/*
OBTAIN
REACH
MILES
BY
COUNTY
*/

data
rchmile;
set
mpm2.
us_
rchmi;
cntyfip=
fips;
keep
countymi
cntyfip;
run;

proc
sort
data=
rchmile;
by
cntyfip;

/*
PULL
TOGETHER
OUR
REACHES
WITH
ASSOCIATED
COUNTIES
*/

data
tot_
mile;
merge
cnty3
rchmile;
by
cntyfip;

if
reachnmb=.
then
delete;
run;

proc
sort
data=
tot_
mile;
by
reachnmb
cntyfip;
quit;

/*
SUM
REACH
MILES
OVER
COUNTIES
CONTAINING
THE
SAME
REACH
FINISHED
DATA
SET
CONTAINS
TOTAL
NUMBER
OF
REACH
MILES
IN
COUNTIES
CONTAINING
A
GIVEN
REACH.
BRING
IN
THE
FISHING
LICNESE
DATA
BY
COUNTY.
*/

proc
sql;

create
table
miles
as
select
tot_
mile.
reachnmb,
sum(
countymi)
as
denom,
min(
segl)
as
leng,
sum(
fw_
lic)
as
fwlictot,
sum(
sw_
lic)
as
swlictot
from
tot_
mile,
facs,
licens
where
tot_
mile.
reachnmb
=
facs.
reachnmb
and
tot_
mile.
cntyfip
=
licens.
cntyfip
group
by
tot_
mile.
reachnmb
order
by
tot_
mile.
reachnmb;
quit;
101
proc
sort
data=
miles;
by
reachnmb;
quit;

/*
Merge
in
Fishing
Advisory
Data
with
County
mile
data
*/
proc
sort
data=
mpm2.
fishadv1;
by
reachnmb;
quit;

data
miles2;
merge
miles
mpm2.
fishadv1;
by
reachnmb;

/*
Hard­
Wire
Statewide
Advisories
*/
if
st
=
'
MI'
or
st
=
'
NJ'
or
st
=
'
RI'
or
st
=
'
MS'
then
advisory
=
'
yes';

/*
Multiplier
for
20%
reduction
in
fishermen
due
to
advisory
*/
if
advisory
=
'
yes'
or
advisory
=
'
A­
yes'
then
advmult
=
0.80;
else
advmult
=
1.00;
run;

/*
ESTIMATE
SPORT
AND
SUBSISTANCE
FISHING
POPULATIONS
*/

data
pops;
set
miles2;
by
reachnmb;
if
first.
reachnmb;

if
leng=.
then
fwspt
=
fwlictot*
0.06*
2.62*
advmult;
else
fwspt
=
fwlictot*(
leng/
denom)*
2.62*
advmult;
fwsub
=
0.05*
fwspt;

if
leng=.
then
swspt
=
swlictot*
0.06*
2.62*
advmult;
else
swspt
=
swlictot*(
leng/
denom)*
2.62*
advmult;
swsub
=
0.05*
swspt;

fwsptpop
=
round(
fwspt);
fwsubpop
=
round(
fwsub);
swsptpop
=
round(
swspt);
swsubpop
=
round(
swsub);

keep
reachnmb
fwsptpop
fwsubpop
swsptpop
swsubpop;
run;

proc
sort
data=
pops;
by
reachnmb;
quit;
proc
sort
data=
rundat.
cnc_
hh;
by
reachnmb;
quit;

/*
MERGE
CONCENTRATION
DATA
BY
REACH
WITH
THE
NUMBER
OF
SPORT
AND
SUBSISTENCE
ANGLERS
*/

data
canc;
merge
rundat.
cnc_
hh
pops;
by
reachnmb;

if
cnc_
base
=
.
or
cnc_
base
=
0
then
delete;
if
fwsptpop=.
then
delete;
run;
102
proc
sort
data=
canc;
by
reachnmb
casno
event_
wt;
quit;

/*
BRING
IN
SLOPE
FACTOR,
REFERENCE
DOSE,
AND
BIOCONCENTRATION
FROM
CHEMDATA
*/

proc
sql;

create
table
canc1
as
select
reachnmb,
canc.
casno,
cnc_
base
as
base,
cnc_
trt1
as
treat1,
cnc_
trt2
as
treat2,
fwsptpop,
fwsubpop,
swsptpop,
swsubpop,
slope_
fa
as
sf,
referenc
as
rfd,
bioconce
as
bcfval,
event_
wt
as
weight,
liver,
kidney,
eyes,
gastro,
bodywght,
central,
mort,
other
from
canc,
mpm2.
chemdata
where
canc.
casno
=
chemdata.
casno
order
by
reachnmb,
canc.
casno,
weight;
quit;

/*
ESTIMATE
SYSTEMIC
EQUATIONS
AND
CALCULATE
CANCER
RISK
DUE
TO
FISH
CONSUMPTION
*/

data
canc2;
set
canc1;
if
bcfval
and
rfd;

/*
DEFINE
CONSTANTS
*/

cf1
=
0.001;
/*
conversion
milligrams
per
microgram
*/
cf2
=
365;
/*
conversion
365
days
per
year
*/
cr1
=
0.007;
/*
consumption
rate
1
child
:
7.27
(
rec.)
grams/
day*/
cr2
=
0.017;
/*
consumption
rate
2
adult:
17.5
(
rec.)
grams/
day
*/
cr3
=
0.061;
/*
consumption
rate
3
child:
60.58
(
sub.)
grams/
day*/
cr4
=
0.142;
/*
consumption
rate
4
adult:
142.4
(
sub.)
grams/
day*/
ef
=
365;
/*
exposure
frequency:
365
days
per
year
*/
ed1
=
18;
/*
exposure
duration
1
child:
18
years
(
rec.)
*/
ed2
=
52;
/*
exposure
duration
2
adult:
52
years
(
rec.)
*/
ed3
=
18;
/*
exposure
duration
3
child:
18
years
(
sub.)
*/
ed4
=
52;
/*
exposure
duration
4
adult:
52
years
(
sub.)
*/
bw1
=
30;
/*
body
weight
1
child:
30
kg
*/
bw2
=
70;
/*
body
weight
2
adult:
70
kg
*/
lt
=
70;
/*
lifetime:
70
years
*/

/*
CALCULATE
SYSTEMIC
EFFECTS
*/

/*
base
values
*/
bsptrisk
=
(((
base
*
cf1
*
cr1
*
bcfval
*
ef
*
ed1)
/
(
bw1
*
lt
*
cf2))
+
((
base
*
cf1
*
cr2
*
bcfval
*
ef
*
ed2)
/
(
bw2
*
lt
*
cf2)))
/
rfd;

bsubrisk
=
(((
base
*
cf1
*
cr3
*
bcfval
*
ef
*
ed3)
/
(
bw1
*
lt
*
cf2))
+
((
base
*
cf1
*
cr4
*
bcfval
*
ef
*
ed4)
/
(
bw2
*
lt
*
cf2)))
/
rfd;

/*
treatment
values
*/
sptrisk1
=
(((
treat1
*
cf1
*
cr1
*
bcfval
*
ef
*
ed1)
/
(
bw1
*
lt
*
cf2))
+
103
((
treat1
*
cf1
*
cr2
*
bcfval
*
ef
*
ed2)
/
(
bw2
*
lt
*
cf2)))
/
rfd;

subrisk1
=
(((
treat1
*
cf1
*
cr3
*
bcfval
*
ef
*
ed3)
/
(
bw1
*
lt
*
cf2))
+
((
treat1
*
cf1
*
cr4
*
bcfval
*
ef
*
ed4)
/
(
bw2
*
lt
*
cf2)))
/
rfd;

sptrisk2
=
(((
treat2
*
cf1
*
cr1
*
bcfval
*
ef
*
ed1)
/
(
bw1
*
lt
*
cf2))
+
((
treat2
*
cf1
*
cr2
*
bcfval
*
ef
*
ed2)
/
(
bw2
*
lt
*
cf2)))
/
rfd;

subrisk2
=
(((
treat2
*
cf1
*
cr3
*
bcfval
*
ef
*
ed3)
/
(
bw1
*
lt
*
cf2))
+
((
treat2
*
cf1
*
cr4
*
bcfval
*
ef
*
ed4)
/
(
bw2
*
lt
*
cf2)))
/
rfd;

sptpop
=
fwsptpop
+
swsptpop;
subpop
=
fwsubpop
+
swsubpop;

format
bsptrisk
bsubrisk
sptrisk1
subrisk1
sptrisk2
subrisk2
e12.;
run;

data
rundat.
hz_
chem;
set
canc2;
run;

data
canc3;
set
canc2;

type1
=
"
Liver";
type2="
Kidney";
type3="
Eyes";
type4="
Gastrointenstinal";
type5="
Body
weight";
type6="
Central
Nervous
System";
type7="
Mortality";
type8="
Other
Systemic
health";

array
cats[
8]
liver
kidney
eyes
gastro
bodywght
central
mort
other;
array
cat_
text[
8]
type1
type2
type3
type4
type5
type6
type7
type8;

do
i
=
1
to
8;
spthaz_
b
=
bsptrisk*
cats[
i];
subhaz_
b
=
bsubrisk*
cats[
i];
spthaz_
1
=
sptrisk1*
cats[
i];
subhaz_
1
=
subrisk1*
cats[
i];
spthaz_
2
=
sptrisk2*
cats[
i];
subhaz_
2
=
subrisk2*
cats[
i];
hlth_
cat
=
cat_
text[
i];
output;
end;
run;

/*
sum
hazard
scores
by
reach
and
event_
wt*/

proc
sql;

create
table
hazard_
a
as
select
reachnmb,
min(
sptpop)
as
sptpopl,
min(
subpop)
as
subpopl,
weight
as
wght,
hlth_
cat,
sum(
spthaz_
b)
as
spthaz_
b,
sum(
subhaz_
b)
as
subhaz_
b,
sum(
spthaz_
1)
as
spthaz_
1,
sum(
subhaz_
1)
as
subhaz_
1,
sum(
spthaz_
2)
as
spthaz_
2,
sum(
subhaz_
2)
as
subhaz_
2
104
from
canc3
group
by
reachnmb,
weight,
hlth_
cat
order
by
reachnmb,
wght,
hlth_
cat;

create
table
hazard
as
select
reachnmb,
min(
sptpopl)
as
sptpopl,
min(
subpopl)
as
subpopl,
wght,
max(
spthaz_
b)
as
spthaz_
b,
max(
subhaz_
b)
as
subhaz_
b,
max(
spthaz_
1)
as
spthaz_
1,
max(
subhaz_
1)
as
subhaz_
1,
max(
spthaz_
2)
as
spthaz_
2,
max(
subhaz_
2)
as
subhaz_
2
from
hazard_
a
group
by
reachnmb,
wght
order
by
reachnmb,
wght;
quit;

data
haz1;
set
hazard;
format
spthaz_
b
subhaz_
b
spthaz_
1
subhaz_
1
spthaz_
2
subhaz_
2
e12.;
run;

/*
Keep
hazard
ratios
*/
data
rundat.
hazrats;
set
haz1;
run;

data
overb;
set
haz1;

if
spthaz_
b>
1
then
sptb
=
1;
else
sptb=
0;
if
subhaz_
b>
1
then
subb
=
1;
else
subb=
0;
if
spthaz_
1>
1
then
spt1
=
1;
else
spt1=
0;
if
subhaz_
1>
1
then
sub1
=
1;
else
sub1=
0;
if
spthaz_
2>
1
then
spt2
=
1;
else
spt2=
0;
if
subhaz_
2>
1
then
sub2
=
1;
else
sub2=
0;
run;

proc
means
sum
data=
overb;
var
sptb
subb
spt1
sub1
spt2
sub2;
title3
'
Sample
Number
of
Reaches
with
Ratios
>
1';
label
sptb
=
'
Sport
(
BL)'
subb
=
'
Subsistence
(
BL)'
spt1
=
'
Sport
(
Opt
1)'
sub1
=
'
Subsistence
(
Opt
1)'
spt2
=
'
Sport
(
Opt
2)'
sub2
=
'
Subsistence
(
Opt
2)';
quit;

proc
means
sum
data=
overb;
weight
wght;
var
sptb
subb
spt1
sub1
spt2
sub2;
title3
'
National
Number
of
Reaches
with
Ratios
>
1';
label
105
sptb
=
'
Sport
(
BL)'
subb
=
'
Subsistence
(
BL)'
spt1
=
'
Sport
(
Opt
1)'
sub1
=
'
Subsistence
(
Opt
1)'
spt2
=
'
Sport
(
Opt
2)'
sub2
=
'
Subsistence
(
Opt
2)';
quit;

proc
sql;
create
table
sportpop
as
select
distinct
reachnmb,
sptpopl,
wght
from
overb
where
sptb
>=
1;

create
table
subpop
as
select
distinct
reachnmb,
subpopl,
wght
from
overb
where
subb
>=
1;
quit;

proc
means
sum
data=
sportpop;
var
sptpopl;
title3
'
Exposed
Sport
Population';
title4
'
Sample';
quit;

proc
means
sum
data=
sportpop;
weight
wght;
var
sptpopl;
title3
'
Exposed
Sport
Population';
title4
'
National';
quit;

proc
means
sum
data=
subpop;
var
subpopl;
title3
'
Exposed
Subsistence
Population';
title4
'
Sample';
quit;

proc
means
sum
data=
subpop;
weight
wght;
var
subpopl;
title3
'
Exposed
Subsistence
Population';
title4
'
National';
quit;

/*
End
Systemic
Cancer
(
Sub
5).
sas
*/
106
Program
Output
107
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
33
Systemic
Cancer
(
Sub
5)
10:
59
Friday,
February
7,
2003
National
Number
of
Reaches
with
Ratios
>
1
The
MEANS
Procedure
Variable
Label
Sum
                                               
sptb
Sport
(
BL)
0
subb
Subsistence
(
BL)
0
spt1
Sport
(
Opt
1)
0
sub1
Subsistence
(
Opt
1)
0
spt2
Sport
(
Opt
2)
0
sub2
Subsistence
(
Opt
2)
0
                                               
108
"
Hazard
ratio
Tables.
sas"
Produces
tables
of
populations
exposed
to
varying
levels
of
systemic
health
risk
based
on
Fish
Consumption
and
Drinking
Water.
109
/*
Program:
Hazard
Ratio
Tables.
sas
Author:
Stuart
Smith
Date:
06/
26/
2000
This
program
takes
the
hazard
ratio
output
datasets
and
categorizes
the
ratios
into
ranges.
The
populations
within
these
ranges
are
summed
together
and
a
final
set
containing
the
populations
exposed
to
ratios
within
a
given
range
are
printed.

Hazard
Ratio
Range
Value
r
=
0
1
0
<
r
<=
10­
9
2
10­
9
<
r
<=
10­
8
3
10­
8
<
r
<=
10­
7
4
10­
7
<
r
<=
10­
6
5
10­
6
<
r
<=
10­
5
6
10­
5
<
r
<=
10­
4
7
10­
4
<
r
<=
10­
3
8
10­
3
<
r
<=
10­
2
9
10­
2
<
r
<=
10­
1
10
10­
1
<
r
<=
1
11
r
>
1
12
*/

*
Static
Library;
libname
mpm2
'
H:\
ENVR\
Triton05
MP&
M\
Benefits\
MP&
M
Phase
2
Analysis\
Data\
SAS
Sets
for
Analysis\';

*
Run
Specific
Library;
libname
rundat
'
H:\
ENVR\
Triton05
MP&
M\
Benefits\
MP&
M
Phase
2
Analysis\
Data\
Runs\
td\
Prefered\';

title
'
Fish
Consumption
Hazard
Ratios';
data
haz;
set
rundat.
hazrats;
run;

/*
MACRO
to
assign
a
ratio
to
a
range
*/
%
macro
asgnRng(
ratio=,
rnge=);
if
&
ratio
=
0
then
&
rnge=
1;
if
&
ratio
>
0
and
&
ratio
<=
10**­
9
then
&
rnge=
2;
if
&
ratio
>
10**­
9
and
&
ratio
<=
10**­
8
then
&
rnge=
3;
if
&
ratio
>
10**­
8
and
&
ratio
<=
10**­
7
then
&
rnge=
4;
if
&
ratio
>
10**­
7
and
&
ratio
<=
10**­
6
then
&
rnge=
5;
if
&
ratio
>
10**­
6
and
&
ratio
<=
10**­
5
then
&
rnge=
6;
if
&
ratio
>
10**­
5
and
&
ratio
<=
10**­
4
then
&
rnge=
7;
if
&
ratio
>
10**­
4
and
&
ratio
<=
10**­
3
then
&
rnge=
8;
if
&
ratio
>
10**­
3
and
&
ratio
<=
10**­
2
then
&
rnge=
9;
if
&
ratio
>
10**­
2
and
&
ratio
<=
10**­
1
then
&
rnge=
10;
if
&
ratio
>
10**­
1
and
&
ratio
<=
1
then
&
rnge=
11;
if
&
ratio
>
1
then
&
rnge=
12;
%
mend
asgnRng;

/*
MACRO
to
generate
a
summed
set
by
a
range
variable
*/
%
macro
prcSum(
theset=,
thevar=,
theout=,
outvar=);
proc
sort
data
=
&
theset;
by
&
thevar;
110
proc
means
noprint
sum
data=
&
theset;
by
&
thevar;
var
pop;
output
out
=
&
theout
sum=&
outvar;
quit;
data
&
theout;
set
&
theout;
rang
=
&
thevar;
keep
rang
&
outvar;
run;
%
mend
prcSum;

/*
Read
in
the
hazard
ratios
and
assign
range
values
*/
data
all;
set
haz;

%
asgnRng(
ratio=
spthaz_
b,
rnge=
sptb_
rng);
%
asgnRng(
ratio=
subhaz_
b,
rnge=
subb_
rng);
%
asgnRng(
ratio=
spthaz_
1,
rnge=
spt1_
rng);
%
asgnRng(
ratio=
subhaz_
1,
rnge=
sub1_
rng);
%
asgnRng(
ratio=
spthaz_
2,
rnge=
spt2_
rng);
%
asgnRng(
ratio=
subhaz_
2,
rnge=
sub2_
rng);

keep
reachnmb
sptpopl
subpopl
wght
sptb_
rng
subb_
rng
spt1_
rng
sub1_
rng
spt2_
rng
sub2_
rng;

run;

/*
Pull
the
sport
populations
and
ranges
into
a
set
*/
data
spt;
set
all;

pop
=
sptpopl;
rng_
b
=
sptb_
rng;
rng_
1
=
spt1_
rng;
rng_
2
=
spt2_
rng;
clas
=
'
sport';

keep
pop
rng_
b
rng_
1
rng_
2
clas;
run;

/*
Pull
the
subsistence
populations
and
ranges
into
a
set
*/
data
sub;
set
all;

pop
=
subpopl;
rng_
b
=
subb_
rng;
rng_
1
=
sub1_
rng;
rng_
2
=
sub2_
rng;
clas
=
'
subsis';

keep
pop
rng_
b
rng_
1
rng_
2
clas;
run;

/*
Combine
the
sport
and
subsistence
into
one
set,
stacked
*/
111
data
both;
set
spt
sub;
run;

/***********************************************************/
/*
Generate
output
datasets
for
combined
sport
and
sub
*/
/*
populations.
Create
set
for
base
and
selected
option
*/
/*
then
combine
into
one
set
and
print
out.
*/
/***********************************************************/

/*
Create
the
sets
*/
%
prcSum(
theset=
both,
thevar=
rng_
b,
theout=
all_
b,
outvar=
pop_
b);
%
prcSum(
theset=
both,
thevar=
rng_
1,
theout=
all_
1,
outvar=
pop_
1);
%
prcSum(
theset=
both,
thevar=
rng_
2,
theout=
all_
2,
outvar=
pop_
2);

/*
Merge
them
by
range
value
*/
data
totrng;
merge
all_
b
all_
1
all_
2;
by
rang;

if
pop_
b=.
then
pop_
b=
0;
if
pop_
1=.
then
pop_
1=
0;
if
pop_
2=.
then
pop_
2=
0;
run;

/*
Print
out
the
hazard
table
*/
proc
tabulate
data=
totrng;
class
rang;
var
pop_
b
pop_
1;
table
rang
all,
pop_
b
pctsum*
pop_
b='
'*
all
pop_
1
pctsum*
pop_
1='
'*
all;
keylabel
pctsum='
Percentage
of
Total';
label
pop_
b
=
'
Population
(
Base)'
pop_
1
=
'
Population
(
Pref)';
title2
'
Hazard
Ratio
Ranges
and
Populations';
title3
'
Combined
Sport
and
Subsistence';
run;

/***********************************************************/
/*
Generate
output
datasets
for
combined
sport
*/
/*
populations.
Create
set
for
base
and
selected
option
*/
/*
then
combine
into
one
set
and
print
out.
*/
/***********************************************************/

/*
Create
the
sets
*/
%
prcSum(
theset=
spt,
thevar=
rng_
b,
theout=
spt_
b,
outvar=
pop_
b);
%
prcSum(
theset=
spt,
thevar=
rng_
1,
theout=
spt_
1,
outvar=
pop_
1);
%
prcSum(
theset=
spt,
thevar=
rng_
2,
theout=
spt_
2,
outvar=
pop_
2);

/*
Merge
them
by
range
value
*/
data
sptrng;
merge
spt_
b
spt_
1
spt_
2;
by
rang;
112
if
pop_
b=.
then
pop_
b=
0;
if
pop_
1=.
then
pop_
1=
0;
if
pop_
2=.
then
pop_
2=
0;
run;

/*
Print
out
the
hazard
table
*/
proc
tabulate
data=
sptrng;
class
rang;
var
pop_
b
pop_
1;
table
rang
all,
pop_
b
pctsum*
pop_
b='
'*
all
pop_
1
pctsum*
pop_
1='
'*
all;
keylabel
pctsum='
Percentage
of
Total';
label
pop_
b
=
'
Population
(
Base)'
pop_
1
=
'
Population
(
Pref)';
title2
'
Hazard
Ratio
Ranges
and
Populations';
title3
'
Sport
ONLY';
run;

/***********************************************************/
/*
Generate
output
datasets
for
combined
sport
*/
/*
populations.
Create
set
for
base
and
selected
option
*/
/*
then
combine
into
one
set
and
print
out.
*/
/***********************************************************/

/*
Create
the
sets
*/
%
prcSum(
theset=
sub,
thevar=
rng_
b,
theout=
sub_
b,
outvar=
pop_
b);
%
prcSum(
theset=
sub,
thevar=
rng_
1,
theout=
sub_
1,
outvar=
pop_
1);
%
prcSum(
theset=
sub,
thevar=
rng_
2,
theout=
sub_
2,
outvar=
pop_
2);

/*
Merge
them
by
range
value
*/
data
subrng;
merge
sub_
b
sub_
1
sub_
2;
by
rang;

if
pop_
b=.
then
pop_
b=
0;
if
pop_
1=.
then
pop_
1=
0;
if
pop_
2=.
then
pop_
2=
0;
run;

/*
Print
out
the
hazard
table
*/
proc
tabulate
data=
subrng;
class
rang;
var
pop_
b
pop_
1;
table
rang
all,
pop_
b
pctsum*
pop_
b='
'*
all
pop_
1
pctsum*
pop_
1='
'*
all;
keylabel
pctsum='
Percentage
of
Total';
label
pop_
b
=
'
Population
(
Base)'
pop_
1
=
'
Population
(
Pref)';
title2
'
Hazard
Ratio
Ranges
and
Populations';
title3
'
Subsistence
ONLY';
run;

/***************************************************/
113
/*
DRINKING
WATER
*/
/***************************************************/

title
'
Drinking
Water
Hazard
Ratios';
data
dw;
set
rundat.
dwhazrat;
run;

/*
Read
in
the
hazard
ratios
and
assign
range
values
*/
data
alldw;
set
dw;

%
asgnRng(
ratio=
haz_
b,
rnge=
rng_
b);
%
asgnRng(
ratio=
haz_
1,
rnge=
rng_
1);
%
asgnRng(
ratio=
haz_
2,
rnge=
rng_
2);

keep
reachnmb
pop
wght
rng_
b
rng_
1
rng_
2;

run;

/*
Create
the
sets
*/
%
prcSum(
theset=
alldw,
thevar=
rng_
b,
theout=
dw_
b,
outvar=
pop_
b);
%
prcSum(
theset=
alldw,
thevar=
rng_
1,
theout=
dw_
1,
outvar=
pop_
1);
%
prcSum(
theset=
alldw,
thevar=
rng_
2,
theout=
dw_
2,
outvar=
pop_
2);

/*
Merge
them
by
range
value
*/
data
totdw;
merge
dw_
b
dw_
1
dw_
2;
by
rang;

if
pop_
b=.
then
pop_
b=
0;
if
pop_
1=.
then
pop_
1=
0;
if
pop_
2=.
then
pop_
2=
0;
run;

/*
Print
out
the
hazard
table
*/
proc
tabulate
data=
totdw;
class
rang;
var
pop_
b
pop_
1;
table
rang
all,
pop_
b
pctsum*
pop_
b='
'*
all
pop_
1
pctsum*
pop_
1='
'*
all;
keylabel
pctsum='
Percentage
of
Total';
label
pop_
b
=
'
Population
(
Base)'
pop_
1
=
'
Population
(
Pref)';
title2
'
Hazard
Ratio
Ranges
and
Populations';
title3
'
Drinking
Water
Based';
run;

/*
End
Hazard
Ratio
Tables.
sas
*/
114
Program
Output
115
Fish
Consumption
Hazard
Ratios
5
Hazard
Ratio
Ranges
and
Populations
Combined
Sport
and
Subsistence
11:
48
Saturday,
February
8,
2003
 
                       
             
             
             
            *
 
 
Population
 
Percentage
 
Population
 
Percentage
 
 
 
(
Base)
 
of
Total
 
(
Pref)
 
of
Total
 
 
*
            
$
            
$
            
$
            
 
 
Sum
 
All
 
Sum
 
All
 
*
                      
$
            
$
            
$
            
$
            
 
rang
 
 
 
 
 
*
                       
 
 
 
 
 
1
 
0.00 
0.00 
169106.00 
16.59 
*
                      
$
            
$
            
$
            
$
            
 
2
 
13615.00 
1.34 
23196.00 
2.28 
*
                      
$
            
$
            
$
            
$
            
 
3
 
40363.00 
3.96 
8442.00 
0.83 
*
                      
$
            
$
            
$
            
$
            
 
4
 
32522.00 
3.19 
10571.00 
1.04 
*
                      
$
            
$
            
$
            
$
            
 
5
 
35314.00 
3.46 
49046.00 
4.81 
*
                      
$
            
$
            
$
            
$
            
 
6
 
101776.00 
9.98 
64123.00 
6.29 
*
                      
$
            
$
            
$
            
$
            
 
7
 
256700.00 
25.18 
220694.00 
21.65 
*
                      
$
            
$
            
$
            
$
            
 
8
 
321825.00 
31.57 
278709.00 
27.34 
*
                      
$
            
$
            
$
            
$
            
 
9
 
178380.00 
17.50 
159851.00 
15.68 
*
                      
$
            
$
            
$
            
$
            
 
10
 
37318.00 
3.66 
34243.00 
3.36 
*
                      
$
            
$
            
$
            
$
            
 
11
 
1503.00 
0.15 
1335.00 
0.13 
*
                      
$
            
$
            
$
            
$
            
 
All
 
1019316.00 
100.00 
1019316.00 
100.00 
S                       
             
             
             
            ÿ
Fish
Consumption
Hazard
Ratios
6
Hazard
Ratio
Ranges
and
Populations
Sport
ONLY
11:
48
Saturday,
February
8,
2003
 
                       
             
             
             
            *
 
 
Population
 
Percentage
 
Population
 
Percentage
 
 
 
(
Base)
 
of
Total
 
(
Pref)
 
of
Total
 
 
*
            
$
            
$
            
$
            
 
 
Sum
 
All
 
Sum
 
All
 
*
                      
$
            
$
            
$
            
$
            
 
rang
 
 
 
 
 
*
                       
 
 
 
 
 
1
 
0.00 
0.00 
161053.00 
16.59 
*
                      
$
            
$
            
$
            
$
            
 
2
 
12967.00 
1.34 
23196.00 
2.39 
*
                      
$
            
$
            
$
            
$
            
 
3
 
40363.00 
4.16 
7159.00 
0.74 
116
*
                      
$
            
$
            
$
            
$
            
 
4
 
30503.00 
3.14 
10073.00 
1.04 
*
                      
$
            
$
            
$
            
$
            
 
5
 
33789.00 
3.48 
48806.00 
5.03 
*
                      
$
            
$
            
$
            
$
            
 
6
 
100051.00 
10.31 
61443.00 
6.33 
*
                      
$
            
$
            
$
            
$
            
 
7
 
251139.00 
25.87 
217194.00 
22.37 
*
                      
$
            
$
            
$
            
$
            
 
8
 
309520.00 
31.88 
267906.00 
27.60 
*
                      
$
            
$
            
$
            
$
            
 
9
 
162382.00 
16.73 
145278.00 
14.97 
*
                      
$
            
$
            
$
            
$
            
 
10
 
30057.00 
3.10 
28663.00 
2.95 
*
                      
$
            
$
            
$
            
$
            
 
All
 
970771.00 
100.00 
970771.00 
100.00 
S                       
             
             
             
            ÿ
Fish
Consumption
Hazard
Ratios
7
Hazard
Ratio
Ranges
and
Populations
Subsistence
ONLY
11:
48
Saturday,
February
8,
2003
 
                       
             
             
             
            *
 
 
Population
 
Percentage
 
Population
 
Percentage
 
 
 
(
Base)
 
of
Total
 
(
Pref)
 
of
Total
 
 
*
            
$
            
$
            
$
            
 
 
Sum
 
All
 
Sum
 
All
 
*
                      
$
            
$
            
$
            
$
            
 
rang
 
 
 
 
 
*
                       
 
 
 
 
 
1
 
0.00 
0.00 
8053.00 
16.59 
*
                      
$
            
$
            
$
            
$
            
 
2
 
648.00 
1.33 
0.00 
0.00 
*
                      
$
            
$
            
$
            
$
            
 
3
 
0.00 
0.00 
1283.00 
2.64 
*
                      
$
            
$
            
$
            
$
            
 
4
 
2019.00 
4.16 
498.00 
1.03 
*
                      
$
            
$
            
$
            
$
            
 
5
 
1525.00 
3.14 
240.00 
0.49 
*
                      
$
            
$
            
$
            
$
            
 
6
 
1725.00 
3.55 
2680.00 
5.52 
*
                      
$
            
$
            
$
            
$
            
 
7
 
5561.00 
11.46 
3500.00 
7.21 
*
                      
$
            
$
            
$
            
$
            
 
8
 
12305.00 
25.35 
10803.00 
22.25 
*
                      
$
            
$
            
$
            
$
            
 
9
 
15998.00 
32.95 
14573.00 
30.02 
*
                      
$
            
$
            
$
            
$
            
 
10
 
7261.00 
14.96 
5580.00 
11.49 
*
                      
$
            
$
            
$
            
$
            
 
11
 
1503.00 
3.10 
1335.00 
2.75 
*
                      
$
            
$
            
$
            
$
            
 
All
 
48545.00 
100.00 
48545.00 
100.00 
S                       
             
             
             
            ÿ
117
Drinking
Water
Hazard
Ratios
8
Hazard
Ratio
Ranges
and
Populations
Drinking
Water
Based
11:
48
Saturday,
February
8,
2003
 
                       
             
             
             
            *
 
 
Population
 
Percentage
 
Population
 
Percentage
 
 
 
(
Base)
 
of
Total
 
(
Pref)
 
of
Total
 
 
*
            
$
            
$
            
$
            
 
 
Sum
 
All
 
Sum
 
All
 
*
                      
$
            
$
            
$
            
$
            
 
rang
 
 
 
 
 
*
                       
 
 
 
 
 
1
 
39822463.73 
97.48 
40723280.29 
99.69 
*
                      
$
            
$
            
$
            
$
            
 
2
 
1029333.23 
2.52 
128516.67 
0.31 
*
                      
$
            
$
            
$
            
$
            
 
All
 
40851796.96 
100.00 
40851796.96 
100.00 
S                       
             
             
             
            ÿ
118
Systemic
Risk
from
Drinking
Water
119
"
Data
for
Brad
preferred.
sas"
Generates
a
data
set
of
pollutant
loadings
discharged
to
RF1
reaches
from
direct
dischargers
and
POTWs
(
with
removals)
for
the
water
quality
modeling
program.
See
Cancer
from
Drinking
Water
for
program
code.
120
Water
Quality
Modeling
Pollutant
in­
stream
concentrations
on
RF1
reaches
containing
drinking
water
intakes
downstream
from
MP&
M
facilities
and
POTWs
are
estimated
for
six
carcinogens
not
covered
by
EPA
drinking
water
criteria.
The
water
quality
model
used
is
the
Risk­
Screening
Environmental
Indicators
developed
for
the
EPA
OPPT
(
See
DCN
37554).
121
"
Systemic
Cancer
Assoc
DW
(
Sub
14).
sas"
Data
from
the
water
quality
modeling
is
used
to
estimate
systemic
risk
using
pollutant
specific
reference
doses.
The
overall
hazard
ratio
for
each
RF1
reach
is
then
estimated.
122
/*
Program:
Systemic
Cancer
Assoc
DW
(
Sub
14).
sas
Authors:
Abt
Associates
Inc;
Rob
Sartain,
Elena
Besedin,
Stuart
Smith
Date:
05/
04/
2000
Updated:
10/
31/
2002
This
program
calculates
systemic
hazard
scores
for
drinking
water
consumption.
Only
reaches
with
intakes
on
them
are
evaluated.
Downstream
reaches
are
not
included
in
the
analysis.
*/

title2
'
Systemic
Cancer
Associated
with
DW
(
Sub
14)';

/*
Grab
reach
information
from
Brad's
Output
file
*/

data
brad;
set
rundat.
bradout;
if
intakect
>
0;

keep
reachnmb
intakect
casno
baseconc
t1conc
t2conc
weight
dwpop
siteid;
run;

proc
sort
data=
brad;
by
reachnmb
casno;
quit;

/*
BRING
IN
SLOPE
FACTOR,
REFERENCE
DOSE,
AND
BIOCONCENTRATION
FROM
CHEMDATA
*/

proc
sql;

create
table
canc1
as
select
reachnmb,
brad.
casno,
baseconc
as
base,
t1conc
as
treat1,
t2conc
as
treat2,
dwpop,
slope_
fa
as
sf,
referenc
as
rfd,
bioconce
as
bcfval,
weight,
liver,
kidney,
eyes,
gastro,
bodywght,
central,
mort,
other
from
brad,
mpm2.
chemdata
where
brad.
casno
=
chemdata.
casno
order
by
reachnmb,
brad.
casno,
weight;
quit;

/*
ESTIMATE
SYSTEMIC
EQUATIONS
AND
CALCULATE
CANCER
RISK
DUE
TO
FISH
CONSUMPTION
*/

data
canc2;
set
canc1;
if
rfd;

/*
DEFINE
CONSTANTS
*/

cf1
=
0.001;
/*
conversion
milligrams
per
microgram
*/
cf2
=
365;
/*
conversion:
day
per
year
*/
cr
=
1.24;
/*
consumption
rate:
liters
of
water
per
day
*/
ef
=
350;
/*
exposure
frequency:
350
days
per
year
*/
ed
=
70;
/*
exposure
duration:
70
years
*/
bw
=
70;
/*
body
weight:
70
kg
*/
123
lt
=
70;
/*
lifetime:
70
years
*/

/*
CALCULATE
SYSTEMIC
EFFECTS
*/

/*
base
values
*/
brisk
=
((
base
*
cf1
*
cr
*
ef
*
ed)
/
(
bw
*
lt
*
cf2))
/
rfd;

/*
treatment
values
*/
risk1
=
((
treat1
*
cf1
*
cr
*
ef
*
ed)
/
(
bw
*
lt
*
cf2))
/
rfd;

risk2
=
((
treat2
*
cf1
*
cr
*
ef
*
ed)
/
(
bw
*
lt
*
cf2))
/
rfd;

totpop
=
dwpop;

format
brisk
risk1
risk2
e12.;
run;

data
canc3;
set
canc2;

type1
=
"
Liver";
type2="
Kidney";
type3="
Eyes";
type4="
Gastrointenstinal";
type5="
Body
weight";
type6="
Central
Nervous
System";
type7="
Mortality";
type8="
Other
Systemic
health";

array
cats[
8]
liver
kidney
eyes
gastro
bodywght
central
mort
other;
array
cat_
text[
8]
type1
type2
type3
type4
type5
type6
type7
type8;

do
i
=
1
to
8;
hazdb
=
brisk*
cats[
i];
hazd1
=
risk1*
cats[
i];
hazd2
=
risk2*
cats[
i];
hlth_
cat
=
cat_
text[
i];
output;
end;
run;

/*
sum
hazard
scores
by
reach
and
event_
wt
(
summing
over
all
pollutants)
*/

proc
sql;

create
table
hazard_
a
as
select
reachnmb,
avg(
totpop)
as
pop,
weight
as
wght,
hlth_
cat,
sum(
hazdb)
as
haz_
b,
sum(
hazd1)
as
haz_
1,
sum(
hazd2)
as
haz_
2
from
canc3
group
by
reachnmb,
weight,
hlth_
cat
order
by
reachnmb,
wght;

create
table
hazard
as
select
reachnmb,
min(
pop)
as
pop,
min(
wght)
as
wght,
max(
haz_
b)
as
haz_
b,
max(
haz_
1)
as
haz_
1,
max(
haz_
2)
as
haz_
2
124
from
hazard_
a
group
by
reachnmb,
wght
order
by
reachnmb,
wght;
quit;

data
haz1;
set
hazard;
format
haz_
b
haz_
1
haz_
2
e12.;
run;

/*
Keep
hazard
ratios
*/
data
rundat.
dwhazrat;
set
haz1;
run;

data
overb;
set
haz1;

if
haz_
b>
1
then
ovrb
=
1;
else
ovrb=
0;
if
haz_
1>
1
then
ovr1
=
1;
else
ovr1=
0;
if
haz_
2>
1
then
ovr2
=
1;
else
ovr2=
0;
run;

proc
means
sum
data=
overb;
var
ovrb
ovr1
ovr2
pop;
title3
'
Sample
Number
of
Reaches
with
Ratios
>
1';
label
ovrb
=
'
Sport
(
BL)'
ovr1
=
'
Subsistence
(
BL)'
ovr2
=
'
Sport
(
Opt
1)'
pop
=
'
Exposed
Population';
quit;

proc
means
sum
data=
overb;
weight
wght;
var
ovrb
ovr1
ovr2;
title3
'
National
Number
of
Reaches
with
Ratios
>
1';
label
ovrb
=
'
Sport
(
BL)'
ovr1
=
'
Subsistence
(
BL)'
ovr2
=
'
Sport
(
Opt
1)';
quit;

/*
End
Systemic
Cancer
Assoc
DW
(
Sub
14).
sas
*/
125
Program
Output
126
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
48
Systemic
Cancer
Associated
with
DW
(
Sub
14)
National
Number
of
Reaches
with
Ratios
>
1
10:
59
Friday,
February
7,
2003
The
MEANS
Procedure
Variable
Label
Sum
                                            
ovrb
Sport
(
BL)
0
ovr1
Subsistence
(
BL)
0
ovr2
Sport
(
Opt
1)
0
                                            
127
"
Hazard
ratio
Tables.
sas"
Produces
tables
of
populations
exposed
to
varying
levels
of
systemic
health
risk
based
on
Fish
Consumption
and
Drinking
Water.
See
Systemic
Risk
from
Fish
Consumption
for
program
code
and
output.
128
Lead
Benefits
for
Adults
129
"
Cancer­
fish
(
Sub
4).
sas"
From
the
data
set
of
pollutant
concentrations
for
each
RF1
reach,
observations
for
in­
stream
lead
concentrations
are
outputed
into
a
separate
data
set.
See
Cancer
from
Fish
Consumption
for
program
code
and
output.
130
"
Lead
Benefits
(
Sub
12).
sas"
Using
data
from
the
lead
specific
data
set,
changes
in
blood
lead
levels
are
estimated
and
benefits
calculated
for
reductions
in
cases
of
hypertension,
CHD,
brain
infarctions,
and
mortality
for
recreational
fishermen
and
their
families.
131
/*
Program:
Lead
Benefits
(
Sub
12).
sas
Author:
Stuart
Smith,
Abt
Associates,
Inc.
Date:
07/
05/
2000
Updated:
11/
08/
2002
This
program
estimates
benefits
from
reduced
consumption
of
fish
tissue
containing
lead.
Reductions
in
MP&
M
facility
lead
loadings
result
in
lower
probabilities
of
lead
related
illnesses.
*/

title2
'
Lead
Related
Benefits
Recreational
(
Sub
12)';

data
lead;
set
rundat.
lead;

/*
Combine
the
exposed
populations
recreational
populations,
fresh
and
saltwater
*/

exppop
=
fwsptpop
+
swsptpop;

/*
Calculate
the
blood
lead
levels
under
the
baseline
and
post
compliance
scenarios
*/

PbB0m
=
4.55;
/*
Typical
PbB
conc.
in
absence
of
fish
cons.
for
men
*/
PbB0f
=
3.45;
/*
Typical
PbB
conc.
in
absence
of
fish
cons.
for
women
*/
bcf
=
49;
/*
Bioconcentration
factor
for
lead
L/
KG
*/
bksf
=
0.4;
/*
Biokinetic
slope
factor
for
lead
*/
ingm
=
17.5;
/*
Average
daily
fish
consumption
(
g/
day)
males
age
15­
44
*/
ingf
=
17.5;
/*
Average
daily
fish
consumption
(
g/
day)
females
age
15­
44
*/
ingm2
=
17.5;
/*
Average
daily
fish
consumption
(
g/
day)
males
over
age
45
*/
ingf2
=
17.5;
/*
Average
daily
fish
consumption
(
g/
day)
females
over
age
45
*/
af
=
0.03;
/*
Absorbtion
factor
*/
ef
=
365;
/*
Exposure
Frequency
*/
at
=
365;
/*
Average
timing,
or
duration
of
exposure
in
days
*/
cf
=
0.001;
/*
Conversion
factor
kg/
g
*/

/*
Uses
ingestion
for
males
ages
15­
44
*/
PbB_
bm
=
PbB0m
+
((
cnc_
base*
bcf*
ingm*
af*
bksf*
ef*
cf)/
at);
PbB_
1m
=
PbB0m
+
((
cnc_
trt1*
bcf*
ingm*
af*
bksf*
ef*
cf)/
at);
PbB_
2m
=
PbB0m
+
((
cnc_
trt2*
bcf*
ingm*
af*
bksf*
ef*
cf)/
at);

/*
Uses
ingestion
for
males
ages
45
and
older
*/
PbB_
bme
=
PbB0m
+
((
cnc_
base*
bcf*
ingm2*
af*
bksf*
ef*
cf)/
at);
PbB_
1me
=
PbB0m
+
((
cnc_
trt1*
bcf*
ingm2*
af*
bksf*
ef*
cf)/
at);
PbB_
2me
=
PbB0m
+
((
cnc_
trt2*
bcf*
ingm2*
af*
bksf*
ef*
cf)/
at);

/*
Uses
ingestion
for
females
ages
15­
44
*/
PbB_
bf
=
PbB0f
+
((
cnc_
base*
bcf*
ingf*
af*
bksf*
ef*
cf)/
at);
PbB_
1f
=
PbB0f
+
((
cnc_
trt1*
bcf*
ingf*
af*
bksf*
ef*
cf)/
at);
PbB_
2f
=
PbB0f
+
((
cnc_
trt2*
bcf*
ingf*
af*
bksf*
ef*
cf)/
at);

/*
Uses
ingestion
for
females
ages
45
and
older
*/
PbB_
bfe
=
PbB0f
+
((
cnc_
base*
bcf*
ingf2*
af*
bksf*
ef*
cf)/
at);
132
PbB_
1fe
=
PbB0f
+
((
cnc_
trt1*
bcf*
ingf2*
af*
bksf*
ef*
cf)/
at);
PbB_
2fe
=
PbB0f
+
((
cnc_
trt2*
bcf*
ingf2*
af*
bksf*
ef*
cf)/
at);

drop
fwsptpop
fwsubpop
swsptpop
swsubpop;
run;

data
men;
set
lead;

/*
Set
up
some
constants
*/
/*
All
percentages
based
on
the
1996
Census
numbers
*/

pctmale
=
0.319518;
/*
Percentage
of
U.
S.
Pop.
who
are
male,
age
20­
74
*/
pctm4054
=
0.098405;
/*
Percentage
of
U.
S.
Pop.
who
are
male,
age
40­
54
*/
pctm4059
=
0.118945;
/*
Percentage
of
U.
S.
Pop.
who
are
male,
age
40­
59
*/
pctm4574
=
0.12933;
/*
Percentage
of
U.
S.
Pop.
who
are
male,
age
45­
74
*/
pctm5564
=
0.03829;
/*
Percentage
of
U.
S.
Pop.
who
are
male,
age
55­
64
*/
pctm6064
=
0.01775;
/*
Percentage
of
U.
S.
Pop.
who
are
male,
age
60­
64
*/
pctm6574
=
0.031427;
/*
Percentage
of
U.
S.
Pop.
who
are
male,
age
65­
74
*/

bbpm4054
=
79.9;
/*
Mean
diastolic
bp
from
NHANES
III,
males,
age
40­
54
*/
bbpm4059
=
80.0;
/*
Mean
diastolic
bp
from
NHANES
III,
males,
age
40­
59
*/
bbpm4574
=
78.8;
/*
Mean
diastolic
bp
from
NHANES
III,
males,
age
45­
74
*/
bbpm5564
=
79.0;
/*
Mean
diastolic
bp
from
NHANES
III,
males,
age
55­
64
*/
bbpm6064
=
77.8;
/*
Mean
diastolic
bp
from
NHANES
III,
males
age
60­
64
*/
bbpm6574
=
76.4;
/*
Mean
diastolic
bp
from
NHANES
III,
males
age
65­
74
*/

/**************************************************************************/
/*
Begin
Benefits
for
Males
*/
/**************************************************************************/

/*
Calculate
the
change
in
the
probability
of
hypertension
*/

pr_
hyp1
=
(
1/(
1
+
exp(
2.744
­
0.793*
log(
PbB_
bm))))
­
(
1/(
1
+
exp(
2.744
­
0.793*
log(
PbB_
1m))));

pr_
hyp2
=
(
1/(
1
+
exp(
2.744
­
0.793*
log(
PbB_
bm))))
­
(
1/(
1
+
exp(
2.744
­
0.793*
log(
PbB_
2m))));

ben_
hyp1
=
pr_
hyp1
*
exppop
*
pctmale
*
1141;
ben_
hyp2
=
pr_
hyp2
*
exppop
*
pctmale
*
1141;
hyppop
=
exppop
*
pctmale;
hyp_
red1
=
pr_
hyp1
*
exppop
*
pctmale;
hyp_
red2
=
pr_
hyp2
*
exppop
*
pctmale;

/*
Calculate
Benefits
from
Changes
in
CHD,
non­
fatal
cases
only,
which
are
2/
3
of
the
cases
*/

dbpm1
=
1.4
*
log(
PbB_
bm/
PbB_
1m);
dbpm2
=
1.4
*
log(
PbB_
bm/
PbB_
2m);

dbpm1e
=
1.4
*
log(
PbB_
bme/
PbB_
1me);
dbpm2e
=
1.4
*
log(
PbB_
bme/
PbB_
2me);
133
/*
Ages
40­
59,
change
in
the
10
year
prob
of
occ.
*/
d1m4059
=
bbpm4059
­
dbpm1;
d2m4059
=
bbpm4059
­
dbpm2;

pr1_
4059
=
(
1/(
1
+
exp(
4.996
­
0.030365*
bbpm4059)))
­
(
1/(
1
+
exp(
4.996
­
0.030365*
d1m4059)));

pr2_
4059
=
(
1/(
1
+
exp(
4.996
­
0.030365*
bbpm4059)))
­
(
1/(
1
+
exp(
4.996
­
0.030365*
d2m4059)));

/*
Ages
60­
64,
change
in
the
2
year
prob
of
occ.
*/
d1m6064
=
bbpm6064
­
dbpm1e;
d2m6064
=
bbpm6064
­
dbpm2e;

pr1_
6064
=
(
1/(
1
+
exp(
5.19676
­
0.02351*
bbpm6064)))
­
(
1/(
1
+
exp(
5.19676
­
0.02351*
d1m6064)));

pr2_
6064
=
(
1/(
1
+
exp(
5.19676
­
0.02351*
bbpm6064)))
­
(
1/(
1
+
exp(
5.19676
­
0.02351*
d2m6064)));

/*
Ages
65­
74,
change
in
the
2
year
prob
of
occ.
*/
d1m6574
=
bbpm6574
­
dbpm1e;
d2m6574
=
bbpm6574
­
dbpm2e;

pr1_
6574
=
(
1/(
1
+
exp(
4.90723
­
0.02031*
bbpm6574)))
­
(
1/(
1
+
exp(
4.90723
­
0.02031*
d1m6574)));

pr2_
6574
=
(
1/(
1
+
exp(
4.90723
­
0.02031*
bbpm6574)))
­
(
1/(
1
+
exp(
4.90723
­
0.02031*
d2m6574)));

b14059
=
(
pr1_
4059
*
exppop
*
pctm4059
*
76347
*
0.66)/
10;
b24059
=
(
pr2_
4059
*
exppop
*
pctm4059
*
76347
*
0.66)/
10;
b16064
=
(
pr1_
6064
*
exppop
*
pctm6064
*
76347
*
0.66)/
2;
b26064
=
(
pr2_
6064
*
exppop
*
pctm6064
*
76347
*
0.66)/
2;
b16574
=
(
pr1_
6574
*
exppop
*
pctm6574
*
76347
*
0.66)/
2;
b26574
=
(
pr2_
6574
*
exppop
*
pctm6574
*
76347
*
0.66)/
2;

/*
Number
of
reduced
cases
Multiply
by
the
2/
3
(.
66)
and
divide
by
the
years
of
occurance
associated
with
the
probability
to
get
cases
for
one
year.
*/

r14059
=
(
pr1_
4059
*
exppop
*
pctm4059
*
0.66)/
10;
r24059
=
(
pr2_
4059
*
exppop
*
pctm4059
*
0.66)/
10;
r16064
=
(
pr1_
6064
*
exppop
*
pctm6064
*
0.66)/
2;
r26064
=
(
pr2_
6064
*
exppop
*
pctm6064
*
0.66)/
2;
r16574
=
(
pr1_
6574
*
exppop
*
pctm6574
*
0.66)/
2;
r26574
=
(
pr2_
6574
*
exppop
*
pctm6574
*
0.66)/
2;

/*
Calculate
the
exposed
populations
at
each
age
group
*/
popm4059
=
exppop
*
pctm4059;
popm6064
=
exppop
*
pctm6064;
134
popm6574
=
exppop
*
pctm6574;

/*
Calculate
Benefits
from
Reduced
Cerebrovascular
Accidents
and
Brain
Infarctions,
affects
men
aged
45­
74
Non­
fatal
only,
which
is
70%
of
all
cases
*/

/*
Ages
45­
74,
change
in
the
2
year
prob
of
occ.
*/
d1m4574
=
bbpm4574
­
dbpm1e;
d2m4574
=
bbpm4574
­
dbpm2e;

pr1_
cba
=
(
1/(
1
+
exp(
8.58889
­
0.04066*
bbpm4574)))
­
(
1/(
1
+
exp(
8.58889
­
0.04066*
d1m4574)));

pr2_
cba
=
(
1/(
1
+
exp(
8.58889
­
0.04066*
bbpm4574)))
­
(
1/(
1
+
exp(
8.58889
­
0.04066*
d2m4574)));

pr1_
bi
=
(
1/(
1
+
exp(
9.9516
­
0.04840*
bbpm4574)))
­
(
1/(
1
+
exp(
9.9516
­
0.04840*
d1m4574)));

pr2_
bi
=
(
1/(
1
+
exp(
9.9516
­
0.04840*
bbpm4574)))
­
(
1/(
1
+
exp(
9.9516
­
0.04840*
d2m4574)));

/*
Number
of
reduced
cases
Multiply
by
the
70%
(.
7)
and
divide
by
the
years
of
occurance
associated
with
the
probability
to
get
cases
for
one
year.
*/

b1_
cba
=
(
pr1_
cba
*
exppop
*
pctm4574
*
335135
*
0.7)/
2;
b2_
cba
=
(
pr2_
cba
*
exppop
*
pctm4574
*
335135
*
0.7)/
2;
b1_
bi
=
(
pr1_
bi
*
exppop
*
pctm4574
*
335135
*
0.7)/
2;
b2_
bi
=
(
pr2_
bi
*
exppop
*
pctm4574
*
335135
*
0.7)/
2;

r1_
cba
=
(
pr1_
cba
*
exppop
*
pctm4574
*
0.7)/
2;
r2_
cba
=
(
pr2_
cba
*
exppop
*
pctm4574
*
0.7)/
2;
r1_
bi
=
(
pr1_
bi
*
exppop
*
pctm4574
*
0.7)/
2;
r2_
bi
=
(
pr2_
bi
*
exppop
*
pctm4574
*
0.7)/
2;

/*
Calculate
the
exposed
population*/
popm4574
=
exppop
*
pctm4574;

/*
Calculate
Benefits
from
Premature
Mortality
*/

/*
Ages
40­
54,
change
in
the
12
year
prob
of
death
*/
d1m4054
=
bbpm4054
­
dbpm1;
d2m4054
=
bbpm4054
­
dbpm2;

m1_
4054
=
(
1/(
1
+
exp(
5.3158
­
0.03516*
bbpm4054)))
­
(
1/(
1
+
exp(
5.3158
­
0.03516*
d1m4054)));
135
m2_
4054
=
(
1/(
1
+
exp(
5.3158
­
0.03516*
bbpm4054)))
­
(
1/(
1
+
exp(
5.3158
­
0.03516*
d2m4054)));

/*
Ages
55­
64,
change
in
the
2
year
prob
of
death
*/
d1m5564
=
bbpm5564
­
dbpm1e;
d2m5564
=
bbpm5564
­
dbpm2e;

m1_
5564
=
(
1/(
1
+
exp(
4.89528
­
0.01866*
bbpm5564)))
­
(
1/(
1
+
exp(
4.89528
­
0.01866*
d1m5564)));

m2_
5564
=
(
1/(
1
+
exp(
4.89528
­
0.01866*
bbpm5564)))
­
(
1/(
1
+
exp(
4.89528
­
0.01866*
d2m5564)));

/*
Ages
65­
74,
change
in
the
2
year
prob
of
death
*/
d1m6574
=
bbpm6574
­
dbpm1e;
d2m6574
=
bbpm6574
­
dbpm2e;

m1_
6574
=
(
1/(
1
+
exp(
3.05723
­
0.00547*
bbpm6574)))
­
(
1/(
1
+
exp(
3.05723
­
0.00547*
d1m6574)));

m2_
6574
=
(
1/(
1
+
exp(
3.05723
­
0.00547*
bbpm6574)))
­
(
1/(
1
+
exp(
3.05723
­
0.00547*
d2m6574)));

/*
Number
of
reduced
cases
and
Benefits
Divide
by
the
years
of
occurance
associated
with
the
probability
to
get
cases
for
one
year.
*/

m14054l
=
(
m1_
4054
*
exppop
*
pctm4054
*
2500000)/
12;
m24054l
=
(
m2_
4054
*
exppop
*
pctm4054
*
2500000)/
12;
m14054h
=
(
m1_
4054
*
exppop
*
pctm4054
*
13600000)/
12;
m24054h
=
(
m2_
4054
*
exppop
*
pctm4054
*
13600000)/
12;
mid40541
=
(
m1_
4054
*
exppop
*
pctm4054
*
6500000)/
12;
mid40542
=
(
m2_
4054
*
exppop
*
pctm4054
*
6500000)/
12;

m15564l
=
(
m1_
5564
*
exppop
*
pctm5564
*
2500000)/
2;
m25564l
=
(
m2_
5564
*
exppop
*
pctm5564
*
2500000)/
2;
m15564h
=
(
m1_
5564
*
exppop
*
pctm5564
*
13600000)/
2;
m25564h
=
(
m2_
5564
*
exppop
*
pctm5564
*
13600000)/
2;
mid55641
=
(
m1_
5564
*
exppop
*
pctm5564
*
6500000)/
2;
mid55642
=
(
m2_
5564
*
exppop
*
pctm5564
*
6500000)/
2;

m16574l
=
(
m1_
6574
*
exppop
*
pctm6574
*
2500000)/
2;
m26574l
=
(
m2_
6574
*
exppop
*
pctm6574
*
2500000)/
2;
m16574h
=
(
m1_
6574
*
exppop
*
pctm6574
*
13600000)/
2;
m26574h
=
(
m2_
6574
*
exppop
*
pctm6574
*
13600000)/
2;
mid65741
=
(
m1_
6574
*
exppop
*
pctm6574
*
6500000)/
2;
mid65742
=
(
m2_
6574
*
exppop
*
pctm6574
*
6500000)/
2;

r14054l
=
(
m1_
4054
*
exppop
*
pctm4054)/
12;
r24054l
=
(
m2_
4054
*
exppop
*
pctm4054)/
12;
r14054h
=
(
m1_
4054
*
exppop
*
pctm4054)/
12;
r24054h
=
(
m2_
4054
*
exppop
*
pctm4054)/
12;
136
r15564l
=
(
m1_
5564
*
exppop
*
pctm5564)/
2;
r25564l
=
(
m2_
5564
*
exppop
*
pctm5564)/
2;
r15564h
=
(
m1_
5564
*
exppop
*
pctm5564)/
2;
r25564h
=
(
m2_
5564
*
exppop
*
pctm5564)/
2;
r16574l
=
(
m1_
6574
*
exppop
*
pctm6574)/
2;
r26574l
=
(
m2_
6574
*
exppop
*
pctm6574)/
2;
r16574h
=
(
m1_
6574
*
exppop
*
pctm6574)/
2;
r26574h
=
(
m2_
6574
*
exppop
*
pctm6574)/
2;

/*
Calculate
the
exposed
populations
*/
popm4054
=
exppop
*
pctm4054;
popm5564
=
exppop
*
pctm5564;
run;

data
women;
set
lead;

/*
Set
up
some
constants
*/
/*
All
percentages
based
on
the
1996
Census
numbers
*/
pctfem
=
0.511735;
/*
Percentage
of
U.
S.
Pop.
who
are
female
*/
pctf4574
=
0.143282;
/*
Percentage
of
U.
S.
Pop.
who
are
female,
age
45­
74
*/

bbpf4574
=
74.8;
/*
Mean
diastolic
bp
from
NHANES
III,
females
age
45­
74
*/

/**************************************************************************/
/*
Begin
Benefits
for
Females
*/
/**************************************************************************/

/*
No
dose­
response
function
for
female
hypertension
*/

/*
Calculate
Benefits
from
Changes
in
CHD,
non­
fatal
cases
only
which
are
2/
3
of
the
cases
*/

dbpf1
=
(
0.6
*
1.4)
*
log(
PbB_
bfe/
PbB_
1fe);
dbpf2
=
(
0.6
*
1.4)
*
log(
PbB_
bfe/
PbB_
2fe);

/*
Ages
45­
74,
change
in
the
2
year
prob
of
occ.
*/
d1f4574
=
bbpf4574
­
dbpf1;
d2f4574
=
bbpf4574
­
dbpf2;

pr1_
4574
=
(
1/(
1
+
exp(
6.9401
­
0.03072*
bbpf4574)))
­
(
1/(
1
+
exp(
6.9401
­
0.03072*
d1f4574)));

pr2_
4574
=
(
1/(
1
+
exp(
6.9401
­
0.03072*
bbpf4574)))
­
(
1/(
1
+
exp(
6.9401
­
0.03072*
d2f4574)));

b1fchd
=
(
pr1_
4574
*
exppop
*
pctf4574
*
76347
*
0.66)/
2;
b2fchd
=
(
pr2_
4574
*
exppop
*
pctf4574
*
76347
*
0.66)/
2;

red_
chd1
=
(
pr1_
4574
*
exppop
*
pctf4574
*
0.66)/
2;
red_
chd2
=
(
pr2_
4574
*
exppop
*
pctf4574
*
0.66)/
2;
137
popf4574
=
exppop
*
pctf4574;

/*
Calculate
Benefits
from
Reduced
Cerebrovascular
Accidents
and
Brain
Infarctions,
affects
women
aged
45­
74
Non­
fatal
only
which
is
70%
of
all
cases
*/

/*
Ages
45­
74,
change
in
the
2
year
prob
of
occ.
*/

pr1f_
bi
=
(
1/(
1
+
exp(
10.6716
­
0.0544*
bbpf4574)))
­
(
1/(
1
+
exp(
10.6716
­
0.0544*
d1f4574)));

pr2f_
bi
=
(
1/(
1
+
exp(
10.6716
­
0.0544*
bbpf4574)))
­
(
1/(
1
+
exp(
10.6716
­
0.0544*
d2f4574)));

pr1f_
cba
=
(
1/(
1
+
exp(
9.07737
­
0.04287*
bbpf4574)))
­
(
1/(
1
+
exp(
9.07737
­
0.04287*
d1f4574)));

pr2f_
cba
=
(
1/(
1
+
exp(
9.07737
­
0.04287*
bbpf4574)))
­
(
1/(
1
+
exp(
9.07737
­
0.04287*
d2f4574)));

b1f_
cba
=
(
pr1f_
cba
*
exppop
*
pctf4574
*
251351
*
0.7)/
2;
b2f_
cba
=
(
pr2f_
cba
*
exppop
*
pctf4574
*
251351
*
0.7)/
2;
b1f_
bi
=
(
pr1f_
bi
*
exppop
*
pctf4574
*
251351
*
0.7)/
2;
b2f_
bi
=
(
pr2f_
bi
*
exppop
*
pctf4574
*
251351
*
0.7)/
2;

r1f_
cba
=
(
pr1f_
cba
*
exppop
*
pctf4574
*
0.7)/
2;
r2f_
cba
=
(
pr2f_
cba
*
exppop
*
pctf4574
*
0.7)/
2;
r1f_
bi
=
(
pr1f_
bi
*
exppop
*
pctf4574
*
0.7)/
2;
r2f_
bi
=
(
pr2f_
bi
*
exppop
*
pctf4574
*
0.7)/
2;

/*
Calculate
Benefits
from
Premature
Mortality
*/

/*
Ages
45­
74,
change
in
the
2
year
prob
of
death
*/

m1_
4574
=
(
1/(
1
+
exp(
5.40374
­
0.01511*
bbpf4574)))
­
(
1/(
1
+
exp(
5.40374
­
0.01511*
d1f4574)));

m2_
4574
=
(
1/(
1
+
exp(
5.40374
­
0.01511*
bbpf4574)))
­
(
1/(
1
+
exp(
5.40374
­
0.01511*
d2f4574)));

m14574l
=
(
m1_
4574
*
exppop
*
pctf4574
*
2500000)/
2;
m24574l
=
(
m2_
4574
*
exppop
*
pctf4574
*
2500000)/
2;
m14574h
=
(
m1_
4574
*
exppop
*
pctf4574
*
13600000)/
2;
m24574h
=
(
m2_
4574
*
exppop
*
pctf4574
*
13600000)/
2;
mid45741
=
(
m1_
4574
*
exppop
*
pctf4574
*
6500000)/
2;
mid45742
=
(
m2_
4574
*
exppop
*
pctf4574
*
6500000)/
2;

r14574l
=
(
m1_
4574
*
exppop
*
pctf4574)/
2;
r24574l
=
(
m2_
4574
*
exppop
*
pctf4574)/
2;
r14574h
=
(
m1_
4574
*
exppop
*
pctf4574)/
2;
r24574h
=
(
m2_
4574
*
exppop
*
pctf4574)/
2;
run;
138
/*
Sum
benefits
and
cases
and
print
out
results
*/

proc
means
sum
data=
men;
var
ben_
hyp1
ben_
hyp2
hyppop
b14059
b24059
b16064
b26064
b16574
b26574
popm4059
popm6064
popm6574
b1_
cba
b2_
cba
b1_
bi
b2_
bi
popm4574
m14054l
m14054h
m24054l
m24054h
m15564l
m15564h
m25564l
m25564h
m16574l
m16574h
m26574l
m26574h
mid40541
mid40542
mid55641
mid55642
mid65741
mid65742
popm4054
popm5564
hyp_
red1
hyp_
red2
r14059
r24059
r16064
r26064
r16574
r26574
r1_
cba
r2_
cba
r1_
bi
r2_
bi
r14054l
r24054l
r15564l
r25564l
r16574l
r26574l;
output
out
=
rundat.
msptsamp(
drop
=
_
type_
_
freq_)
sum
=
ben_
hyp1
ben_
hyp2
hyppop
b14059
b24059
b16064
b26064
b16574
b26574
popm4059
popm6064
popm6574
b1_
cba
b2_
cba
b1_
bi
b2_
bi
popm4574
m14054l
m14054h
m24054l
m24054h
m15564l
m15564h
m25564l
m25564h
m16574l
m16574h
m26574l
m26574h
mid40541
mid40542
mid55641
mid55642
mid65741
mid65742
popm4054
popm5564
hyp_
red1
hyp_
red2
r14059
r24059
r16064
r26064
r16574
r26574
r1_
cba
r2_
cba
r1_
bi
r2_
bi
r14054l
r24054l
r15564l
r25564l
r16574l
r26574l;
title3
'
Mens
Lead
Related
Benefits
(
Sample
Basis)';
quit;

proc
means
sum
data=
men;
weight
event_
wt;
var
ben_
hyp1
ben_
hyp2
hyppop
b14059
b24059
b16064
b26064
b16574
b26574
popm4059
popm6064
popm6574
b1_
cba
b2_
cba
b1_
bi
b2_
bi
popm4574
m14054l
m14054h
m24054l
m24054h
m15564l
m15564h
m25564l
m25564h
m16574l
m16574h
m26574l
m26574h
mid40541
mid40542
mid55641
mid55642
mid65741
mid65742
popm4054
popm5564
hyp_
red1
hyp_
red2
r14059
r24059
r16064
r26064
r16574
r26574
r1_
cba
r2_
cba
r1_
bi
r2_
bi
r14054l
r24054l
r15564l
r25564l
r16574l
r26574l;
output
out
=
rundat.
msptwght(
drop
=
_
type_
_
freq_)
sum
=
139
ben_
hyp1
ben_
hyp2
hyppop
b14059
b24059
b16064
b26064
b16574
b26574
popm4059
popm6064
popm6574
b1_
cba
b2_
cba
b1_
bi
b2_
bi
popm4574
m14054l
m14054h
m24054l
m24054h
m15564l
m15564h
m25564l
m25564h
m16574l
m16574h
m26574l
m26574h
mid40541
mid40542
mid55641
mid55642
mid65741
mid65742
popm4054
popm5564
hyp_
red1
hyp_
red2
r14059
r24059
r16064
r26064
r16574
r26574
r1_
cba
r2_
cba
r1_
bi
r2_
bi
r14054l
r24054l
r15564l
r25564l
r16574l
r26574l;
title3
'
Mens
Lead
Related
Benefits
(
National
Basis)';
quit;

%
macro
maleleadtable(
tbl_
in=,
tbl_
out=);
data
rundat.&
tbl_
out
(
keep=
gender
categ
agecat
type
case1
ben1l
ben1m
ben1h
case2
ben2l
ben2m
ben2h);
set
rundat.&
tbl_
in;

length
gender
$
50
categ
$
50
agecat
$
50
type
$
50;

array
_
hyper[
4]
ben_
hyp1
ben_
hyp2
hyp_
red1
hyp_
red2;
array
_
chd[
12]
b14059
b24059
b16064
b26064
b16574
b26574
r14059
r24059
r16064
r26064
r16574
r26574;
array
_
cba[
4]
b1_
cba
b2_
cba
r1_
cba
r2_
cba;
array
_
bi[
4]
b1_
bi
b2_
bi
r1_
bi
r2_
bi;
array
_
mort[
24]
m14054l
mid40541
m14054h
m24054l
mid40542
m24054h
m15564l
mid55641
m15564h
m25564l
mid55642
m25564h
m16574l
mid65741
m16574h
m26574l
mid65742
m26574h
r14054l
r24054l
r15564l
r25564l
r16574l
r26574l;
array
ben[
6]
ben1l
ben1m
ben1h
ben2l
ben2m
ben2h;
array
cases[
2]
case1
case2;

do
i
=
1
to
9;
if
i
=
1
then
do;
ben[
1]
=
_
hyper[
1];
ben[
2]
=
_
hyper[
1];
ben[
3]
=
_
hyper[
1];
ben[
4]
=
_
hyper[
2];
ben[
5]
=
_
hyper[
2];
ben[
6]
=
_
hyper[
2];
cases[
1]
=
_
hyper[
3];
cases[
2]
=
_
hyper[
4];
categ
=
"
Hypertension";
agecat
=
"
All";
type
=
"
Sport";
gender
=
"
Male";
output;
end;
if
i
=
2
then
do;
ben[
1]
=
_
chd[
1];
ben[
2]
=
_
chd[
1];
ben[
3]
=
_
chd[
1];
ben[
4]
=
_
chd[
2];
ben[
5]
=
_
chd[
2];
ben[
6]
=
_
chd[
2];
cases[
1]
=
_
chd[
7];
cases[
2]
=
_
chd[
8];
140
categ
=
"
CHD";
agecat
=
"
Age
40­
59";
type
=
"
Sport";
gender
=
"
Male";
output;
end;
if
i
=
3
then
do;
ben[
1]
=
_
chd[
3];
ben[
2]
=
_
chd[
3];
ben[
3]
=
_
chd[
3];
ben[
4]
=
_
chd[
4];
ben[
4]
=
_
chd[
4];
ben[
6]
=
_
chd[
4];
cases[
1]
=
_
chd[
9];
cases[
2]
=
_
chd[
10];
categ
=
"
CHD";
agecat
=
"
Age
60­
64";
type
=
"
Sport";
gender
=
"
Male";
output;
end;
if
i
=
4
then
do;
ben[
1]
=
_
chd[
5];
ben[
2]
=
_
chd[
5];
ben[
3]
=
_
chd[
5];
ben[
4]
=
_
chd[
6];
ben[
4]
=
_
chd[
6];
ben[
6]
=
_
chd[
6];
cases[
1]
=
_
chd[
11];
cases[
2]
=
_
chd[
12];
categ
=
"
CHD";
agecat
=
"
Age
65­
74";
type
=
"
Sport";
gender
=
"
Male";
output;
end;
if
i
=
5
then
do;
ben[
1]
=
_
cba[
1];
ben[
2]
=
_
cba[
1];
ben[
3]
=
_
cba[
1];
ben[
4]
=
_
cba[
2];
ben[
5]
=
_
cba[
2];
ben[
6]
=
_
cba[
2];
cases[
1]
=
_
cba[
3];
cases[
2]
=
_
cba[
4];
categ
=
"
CBA";
agecat
=
"
All";
type
=
"
Sport";
gender
=
"
Male";
output;
end;
if
i
=
6
then
do;
ben[
1]
=
_
bi[
1];
ben[
2]
=
_
bi[
1];
ben[
3]
=
_
bi[
1];
ben[
4]
=
_
bi[
2];
ben[
5]
=
_
bi[
2];
ben[
6]
=
_
bi[
2];
cases[
1]
=
_
bi[
3];
cases[
2]
=
_
bi[
4];
categ
=
"
BI";
agecat
=
"
All";
type
=
"
Sport";
gender
=
"
Male";
output;
end;
if
i
=
7
then
do;
ben[
1]
=
_
mort[
1];
ben[
2]
=
_
mort[
2];
ben[
3]
=
_
mort[
3];
ben[
4]
=
_
mort[
4];
ben[
5]
=
_
mort[
5];
ben[
6]
=
_
mort[
6];
cases[
1]
=
_
mort[
19];
cases[
2]
=
_
mort[
20];
categ
=
"
Mortality";
agecat
=
"
Age
40­
54";
type
=
"
Sport";
141
gender
=
"
Male";
output;
end;
if
i
=
8
then
do;
ben[
1]
=
_
mort[
7];
ben[
2]
=
_
mort[
8];
ben[
3]
=
_
mort[
9];
ben[
4]
=
_
mort[
10];
ben[
5]
=
_
mort[
11];
ben[
6]
=
_
mort[
12];
cases[
1]
=
_
mort[
21];
cases[
2]
=
_
mort[
22];
categ
=
"
Mortality";
agecat
=
"
Age
55­
64";
type
=
"
Sport";
gender
=
"
Male";
output;
end;
if
i
=
9
then
do;
ben[
1]
=
_
mort[
13];
ben[
2]
=
_
mort[
14];
ben[
3]
=
_
mort[
15];
ben[
4]
=
_
mort[
16];
ben[
5]
=
_
mort[
17];
ben[
6]
=
_
mort[
18];
cases[
1]
=
_
mort[
23];
cases[
2]
=
_
mort[
24];
categ
=
"
Mortality";
agecat
=
"
Age
65­
74";
type
=
"
Sport";
gender
=
"
Male";
output;
end;
end;
run;
%
mend;

%
maleleadtable(
tbl_
in=
msptsamp,
tbl_
out=
tblmssmp);
%
maleleadtable(
tbl_
in=
msptwght,
tbl_
out=
tblmswgt);

proc
means
sum
data=
women;
var
b1fchd
b2fchd
popf4574
b1f_
cba
b2f_
cba
b1f_
bi
b2f_
bi
m14574l
m14574h
m24574l
m24574h
mid45741
mid45742
red_
chd1
red_
chd2
r1f_
cba
r2f_
cba
r1f_
bi
r2f_
bi
r14574l
r14574h
r24574l
r24574h;
output
out
=
rundat.
fsptsamp(
drop
=
_
type_
_
freq_)
sum
=
b1fchd
b2fchd
popf4574
b1f_
cba
b2f_
cba
b1f_
bi
b2f_
bi
m14574l
m14574h
m24574l
m24574h
mid45741
mid45742
red_
chd1
red_
chd2
r1f_
cba
r2f_
cba
r1f_
bi
r2f_
bi
r14574l
r14574h
r24574l
r24574h;
title3
'
Female
Lead
Related
Benefits
(
Sample
Basis)';
quit;

proc
means
sum
data=
women;
weight
event_
wt;
var
b1fchd
b2fchd
popf4574
b1f_
cba
b2f_
cba
b1f_
bi
b2f_
bi
m14574l
m14574h
m24574l
m24574h
mid45741
mid45742
red_
chd1
red_
chd2
142
r1f_
cba
r2f_
cba
r1f_
bi
r2f_
bi
r14574l
r14574h
r24574l
r24574h;
output
out
=
rundat.
fsptwght(
drop
=
_
type_
_
freq_)
sum
=
b1fchd
b2fchd
popf4574
b1f_
cba
b2f_
cba
b1f_
bi
b2f_
bi
m14574l
m14574h
m24574l
m24574h
mid45741
mid45742
red_
chd1
red_
chd2
r1f_
cba
r2f_
cba
r1f_
bi
r2f_
bi
r14574l
r14574h
r24574l
r24574h;
title3
'
Female
Lead
Related
Benefits
(
National
Basis)';
quit;

%
macro
femaleleadtable(
tbl_
in=,
tbl_
out=);
data
rundat.&
tbl_
out
(
keep=
gender
categ
agecat
type
case1
ben1l
ben1m
ben1h
case2
ben2l
ben2m
ben2h);
set
rundat.&
tbl_
in;

length
gender
$
50
categ
$
50
agecat
$
50
type
$
50;

array
_
chd[
4]
b1fchd
b2fchd
red_
chd1
red_
chd2;
array
_
cba[
4]
b1f_
cba
b2f_
cba
r1f_
cba
r2f_
cba;
array
_
bi[
4]
b1f_
bi
b2f_
bi
r1f_
bi
r2f_
bi;
array
_
mort[
8]
m14574l
mid45741
m14574h
m24574l
mid45742
m24574h
r14574l
r24574l;
array
ben[
6]
ben1l
ben1m
ben1h
ben2l
ben2m
ben2h;
array
cases[
2]
case1
case2;

do
i
=
1
to
4;
if
i
=
1
then
do;
ben[
1]
=
_
chd[
1];
ben[
2]
=
_
chd[
1];
ben[
3]
=
_
chd[
1];
ben[
4]
=
_
chd[
2];
ben[
5]
=
_
chd[
2];
ben[
6]
=
_
chd[
2];
cases[
1]
=
_
chd[
3];
cases[
2]
=
_
chd[
4];
categ
=
"
CHD";
agecat
=
"
All";
type
=
"
Sport";
gender
=
"
Female";
output;
end;
if
i
=
2
then
do;
ben[
1]
=
_
cba[
1];
ben[
2]
=
_
cba[
1];
ben[
3]
=
_
cba[
1];
ben[
4]
=
_
cba[
2];
ben[
5]
=
_
cba[
2];
ben[
6]
=
_
cba[
2];
cases[
1]
=
_
cba[
3];
cases[
2]
=
_
cba[
4];
categ
=
"
CBA";
agecat
=
"
All";
type
=
"
Sport";
gender
=
"
Female";
output;
end;
if
i
=
3
then
do;
ben[
1]
=
_
bi[
1];
ben[
2]
=
_
bi[
1];
ben[
3]
=
_
bi[
1];
ben[
4]
=
_
bi[
2];
ben[
5]
=
_
bi[
2];
ben[
6]
=
_
bi[
2];
cases[
1]
=
_
bi[
3];
cases[
2]
=
_
bi[
4];
143
categ
=
"
BI";
agecat
=
"
All";
type
=
"
Sport";
gender
=
"
Female";
output;
end;
if
i
=
4
then
do;
ben[
1]
=
_
mort[
1];
ben[
2]
=
_
mort[
2];
ben[
3]
=
_
mort[
3];
ben[
4]
=
_
mort[
4];
ben[
5]
=
_
mort[
5];
ben[
6]
=
_
mort[
6];
cases[
1]
=
_
mort[
7];
cases[
2]
=
_
mort[
8];
categ
=
"
Mortality";
agecat
=
"
Age
45­
74";
type
=
"
Sport";
gender
=
"
Female";
output;
end;
end;
run;
%
mend;

%
femaleleadtable(
tbl_
in=
fsptsamp,
tbl_
out=
tblfssmp);
%
femaleleadtable(
tbl_
in=
fsptwght,
tbl_
out=
tblfswgt);

data
rundat.
tblspt_
s;
set
rundat.
tblmssmp
rundat.
tblfssmp;
run;

data
rundat.
tblspt_
w;
set
rundat.
tblmswgt
rundat.
tblfswgt;
run;

proc
means
sum
data=
men;
var
event_
wt;
title3
'
Number
of
Affected
Reaches
Nationally';
quit;

proc
sql;

create
table
malepop
as
select
sum(
exppop)
as
tpops,
sum(
exppop*
pctmale)
as
pm2074s,
sum(
exppop*
pctm4574)
as
pm4574s,
sum(
exppop*
event_
wt)
as
tpopn,
sum(
exppop*
pctmale*
event_
wt)
as
pm2074n,
sum(
exppop*
pctm4574*
event_
wt)
as
pm4574n
from
men;

create
table
fempop
as
select
sum(
exppop)
as
tpops,
sum(
exppop*
pctf4574)
as
pf4574s,
sum(
exppop*
event_
wt)
as
tpopn,
sum(
exppop*
pctf4574*
event_
wt)
as
pf4574n
from
women;
144
quit;

proc
print
data=
malepop;
var
tpops
pm2074s
pm4574s
tpopn
pm2074n
pm4574n;
label
tpops
=
'
Total
Exposed
Pop
(
male
+
fem)
(
Smpl)'
pm2074s
=
'
Exposed
Males
Age
20­
74
(
Smpl)'
pm4574s
=
'
Exposed
Males
Age
45­
74
(
Smpl)'
tpopn
=
'
Total
Exposed
Pop
(
male
+
fem)
(
Natl)'
pm2074n
=
'
Exposed
Males
Age
20­
74
(
Natl)'
pm4574n
=
'
Exposed
Males
Age
45­
74
(
Natl)';
title3
'
Exposed
Population
­
Males';
quit;

proc
print
data=
fempop;
var
tpops
pf4574s
tpopn
pf4574n;
label
tpops
=
'
Total
Exposed
Pop
(
male
+
fem)
(
Smpl)'
pf4574s
=
'
Exposed
Females
Age
45­
74
(
Smpl)'
tpopn
=
'
Total
Exposed
Pop
(
male
+
fem)
(
Natl)'
pf4574n
=
'
Exposed
Females
Age
45­
74
(
Natl)';
title3
'
Exposed
Population
­
Females';
quit;

/*
End
Lead
Benefits
(
Sub
12).
sas
*/
145
Program
Output
146
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
79
Lead
Related
Benefits
Recreational
(
Sub
12)
Mens
Lead
Related
Benefits
(
National
Basis)
10:
59
Friday,
February
7,
2003
The
MEANS
Procedure
Variable
Sum
                        
ben_
hyp1
49596.76
ben_
hyp2
64576.82
hyppop
133090.73
b14059
1991.96
b24059
2594.12
b16064
559.7403068
b26064
728.9498374
b16574
865.9011867
b26574
1127.67
popm4059
49544.87
popm6064
7393.51
popm6574
13090.48
b1_
cba
4632.03
b2_
cba
6032.22
b1_
bi
2609.79
b2_
bi
3398.68
popm4574
53870.59
m14054l
83059.23
m14054h
451842.19
m24054l
108167.53
m24054h
588431.38
m15564l
45230.56
m15564h
246054.22
m25564l
58903.91
m25564h
320437.27
m16574l
22094.89
m16574h
120196.19
m26574l
28774.46
m26574h
156533.09
mid40541
215953.99
mid40542
281235.59
mid55641
117599.44
mid55642
153150.17
mid65741
57446.71
mid65742
74813.61
popm4054
40989.22
popm5564
15949.16
hyp_
red1
43.4678032
hyp_
red2
56.5966874
r14059
0.0260909
r24059
0.0339781
r16064
0.0073315
r26064
0.0095479
r16574
0.0113417
147
r26574
0.0147703
r1_
cba
0.0138214
r2_
cba
0.0179994
r1_
bi
0.0077873
r2_
bi
0.0101412
r14054l
0.0332237
r24054l
0.0432670
r15564l
0.0180922
r25564l
0.0235616
r16574l
0.0088380
r26574l
0.0115098
                        
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
81
Lead
Related
Benefits
Recreational
(
Sub
12)
Female
Lead
Related
Benefits
(
National
Basis)
10:
59
Friday,
February
7,
2003
The
MEANS
Procedure
Variable
Sum
                        
b1fchd
1370.09
b2fchd
1784.50
popf4574
59682.10
b1f_
cba
1981.02
b2f_
cba
2580.20
b1f_
bi
1212.78
b2f_
bi
1579.60
m14574l
47935.29
m14574h
260767.95
m24574l
62434.83
m24574h
339645.45
mid45741
124631.74
mid45742
162330.55
red_
chd1
0.0179455
red_
chd2
0.0233735
r1f_
cba
0.0078815
r2f_
cba
0.0102653
r1f_
bi
0.0048251
r2f_
bi
0.0062844
r14574l
0.0191741
r14574h
0.0191741
r24574l
0.0249739
r24574h
0.0249739
                        
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
82
Lead
Related
Benefits
Recreational
(
Sub
12)
Number
of
Affected
Reaches
Nationally
10:
59
Friday,
February
7,
2003
The
MEANS
Procedure
Analysis
Variable
:
EVENT_
WT
Event
Weight
148
Sum
            
23.7361201
            
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
83
Lead
Related
Benefits
Recreational
(
Sub
12)
Exposed
Population
­
Males
10:
59
Friday,
February
7,
2003
Obs
tpops
pm2074s
pm4574s
tpopn
pm2074n
pm4574n
1
82069
26222.52
10613.98
416535.94
133090.73
53870.59
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
84
Lead
Related
Benefits
Recreational
(
Sub
12)
Exposed
Population
­
Females
10:
59
Friday,
February
7,
2003
Obs
tpops
pf4574s
tpopn
pf4574n
1
82069
11759.01
416535.94
59682.10
149
"
Subsistence
Lead
Benefits
(
Sub
17).
sas"
Using
data
from
the
lead
specific
data
set,
changes
in
blood
lead
levels
are
estimated
and
benefits
calculated
for
reductions
in
cases
of
hypertension,
CHD,
brain
infarctions,
and
mortality
for
subsistence
fishermen
and
their
families.
150
/*
Program:
Subsistence
Lead
Benefits
(
Sub
17).
sas
Author:
Stuart
Smith,
Abt
Associates,
Inc.
Date:
07/
11/
2000
Updated:
11/
08/
2002
This
program
estimates
benefits
from
reduced
consumption
of
fish
tissue
containing
lead.
Reductions
in
MP&
M
facility
lead
loadings
result
in
lower
probabilties
of
lead
related
illnesses.
*/

%
let
tbl_
path
=
%
sysfunc(
pathname(
rundat));

title2
'
Subsistence
Lead
Related
Benefits
(
Sub
17)';

data
lead;
set
rundat.
lead;

/*
Combine
the
exposed
populations
for
subsistence;
fresh
and
saltwater.
*/

exppop
=
fwsubpop
+
swsubpop;

/*
Calculate
the
blood
lead
levels
under
the
baseline
and
post
compliance
scenarios
*/

PbB0m
=
5.40;
/*
Typical
PbB
conc.
in
absence
of
fish
cons.
for
men
*/
PbB0f
=
4.12;
/*
Typical
PbB
conc.
in
absence
of
fish
cons.
for
women
*/
bcf
=
49;
/*
Bioconcentration
factor
for
lead
L/
KG
*/
bksf
=
0.4;
/*
Biokinetic
slope
factor
for
lead
*/
ingm
=
142.4;
/*
Average
daily
fish
consumption
(
g/
day)
males
age
15­
44
*/
ingf
=
142.4;
/*
Average
daily
fish
consumption
(
g/
day)
females
age
15­
44
*/
ingm2
=
142.4;
/*
Average
daily
fish
consumption
(
g/
day)
males
over
age
45
*/
ingf2
=
142.4;
/*
Average
daily
fish
consumption
(
g/
day)
females
over
age
45
*/
af
=
0.03;
/*
Absorbtion
factor
*/
ef
=
365;
/*
Exposure
Frequency
*/
at
=
365;
/*
Average
timing,
or
duration
of
exposure
in
days
*/
cf
=
0.001;
/*
Conversion
factor
kg/
g
*/

/*
Uses
ingestion
for
males
ages
15­
44
*/
PbB_
bm
=
PbB0m
+
((
cnc_
base*
bcf*
ingm*
af*
bksf*
ef*
cf)/
at);
PbB_
1m
=
PbB0m
+
((
cnc_
trt1*
bcf*
ingm*
af*
bksf*
ef*
cf)/
at);
PbB_
2m
=
PbB0m
+
((
cnc_
trt2*
bcf*
ingm*
af*
bksf*
ef*
cf)/
at);

/*
Uses
ingestion
for
males
over
age
45
*/
PbB_
bme
=
PbB0m
+
((
cnc_
base*
bcf*
ingm2*
af*
bksf*
ef*
cf)/
at);
PbB_
1me
=
PbB0m
+
((
cnc_
trt1*
bcf*
ingm2*
af*
bksf*
ef*
cf)/
at);
PbB_
2me
=
PbB0m
+
((
cnc_
trt2*
bcf*
ingm2*
af*
bksf*
ef*
cf)/
at);

/*
Uses
ingestion
for
females
ages
15­
44
*/
PbB_
bf
=
PbB0f
+
((
cnc_
base*
bcf*
ingf*
af*
bksf*
ef*
cf)/
at);
PbB_
1f
=
PbB0f
+
((
cnc_
trt1*
bcf*
ingf*
af*
bksf*
ef*
cf)/
at);
PbB_
2f
=
PbB0f
+
((
cnc_
trt2*
bcf*
ingf*
af*
bksf*
ef*
cf)/
at);
151
/*
Uses
ingestion
for
females
over
age
45
*/
PbB_
bfe
=
PbB0f
+
((
cnc_
base*
bcf*
ingf2*
af*
bksf*
ef*
cf)/
at);
PbB_
1fe
=
PbB0f
+
((
cnc_
trt1*
bcf*
ingf2*
af*
bksf*
ef*
cf)/
at);
PbB_
2fe
=
PbB0f
+
((
cnc_
trt2*
bcf*
ingf2*
af*
bksf*
ef*
cf)/
at);

drop
fwsptpop
fwsubpop
swsptpop
swsubpop;
run;

/*
Print
reaches
in
the
lead
dataset
*/
proc
print;
var
reachnmb
PbB_
bm
PbB_
1m
PbB_
2m
cnc_
base
cnc_
trt1
cnc_
trt2
exppop
event_
wt;
quit;

data
men;
set
lead;

/*
Set
up
some
constants
*/
/*
All
percentages
based
on
the
1996
Census
numbers
*/

pctmale
=
0.319518;
/*
Percentage
of
U.
S.
Pop.
who
are
male,
age
20­
74
*/
pctm4054
=
0.098405;
/*
Percentage
of
U.
S.
Pop.
who
are
male,
age
40­
54
*/
pctm4059
=
0.118945;
/*
Percentage
of
U.
S.
Pop.
who
are
male,
age
40­
59
*/
pctm4574
=
0.12933;
/*
Percentage
of
U.
S.
Pop.
who
are
male,
age
45­
74
*/
pctm5564
=
0.03829;
/*
Percentage
of
U.
S.
Pop.
who
are
male,
age
55­
64
*/
pctm6064
=
0.01775;
/*
Percentage
of
U.
S.
Pop.
who
are
male,
age
60­
64
*/
pctm6574
=
0.031427;
/*
Percentage
of
U.
S.
Pop.
who
are
male,
age
65­
74
*/

bbpm4054
=
81.9;
/*
Mean
diastolic
bp
from
NHANES
III,
males,
age
40­
54
*/
bbpm4059
=
81.8;
/*
Mean
diastolic
bp
from
NHANES
III,
males,
age
40­
59
*/
bbpm4574
=
81.1;
/*
Mean
diastolic
bp
from
NHANES
III,
males,
age
45­
74
*/
bbpm5564
=
80.6;
/*
Mean
diastolic
bp
from
NHANES
III,
males,
age
55­
64
*/
bbpm6064
=
79.5;
/*
Mean
diastolic
bp
from
NHANES
III,
males
age
60­
64
*/
bbpm6574
=
79.5;
/*
Mean
diastolic
bp
from
NHANES
III,
males
age
65­
74
*/

/**************************************************************************/
/*
Begin
Benefits
for
Males
*/
/**************************************************************************/

/*
Calculate
the
change
in
the
probability
of
hypertension
*/

pr_
hyp1
=
(
1/(
1
+
exp(
2.744
­
0.793*
log(
PbB_
bm))))
­
(
1/(
1
+
exp(
2.744
­
0.793*
log(
PbB_
1m))));

pr_
hyp2
=
(
1/(
1
+
exp(
2.744
­
0.793*
log(
PbB_
bm))))
­
(
1/(
1
+
exp(
2.744
­
0.793*
log(
PbB_
2m))));

ben_
hyp1
=
pr_
hyp1
*
exppop
*
pctmale
*
1141;
ben_
hyp2
=
pr_
hyp2
*
exppop
*
pctmale
*
1141;
hyppop
=
exppop
*
pctmale;
hyp_
red1
=
pr_
hyp1
*
exppop
*
pctmale;
hyp_
red2
=
pr_
hyp2
*
exppop
*
pctmale;
152
/*
Calculate
Benefits
from
Changes
in
CHD,
non­
fatal
cases
only
which
are
2/
3
of
the
cases
*/

dbpm1
=
1.4
*
log(
PbB_
bm/
PbB_
1m);
dbpm2
=
1.4
*
log(
PbB_
bm/
PbB_
2m);

dbpm1e
=
1.4
*
log(
PbB_
bme/
PbB_
1me);
dbpm2e
=
1.4
*
log(
PbB_
bme/
PbB_
2me);

/*
Ages
40­
59,
change
in
the
10
year
prob
of
occ.
*/
d1m4059
=
bbpm4059
­
dbpm1;
d2m4059
=
bbpm4059
­
dbpm2;

pr1_
4059
=
(
1/(
1
+
exp(
4.996
­
0.030365*
bbpm4059)))
­
(
1/(
1
+
exp(
4.996
­
0.030365*
d1m4059)));

pr2_
4059
=
(
1/(
1
+
exp(
4.996
­
0.030365*
bbpm4059)))
­
(
1/(
1
+
exp(
4.996
­
0.030365*
d2m4059)));

/*
Ages
60­
64,
change
in
the
2
year
prob
of
occ.
*/
d1m6064
=
bbpm6064
­
dbpm1e;
d2m6064
=
bbpm6064
­
dbpm2e;

pr1_
6064
=
(
1/(
1
+
exp(
5.19676
­
0.02351*
bbpm6064)))
­
(
1/(
1
+
exp(
5.19676
­
0.02351*
d1m6064)));

pr2_
6064
=
(
1/(
1
+
exp(
5.19676
­
0.02351*
bbpm6064)))
­
(
1/(
1
+
exp(
5.19676
­
0.02351*
d2m6064)));

/*
Ages
65­
74,
change
in
the
2
year
prob
of
occ.
*/
d1m6574
=
bbpm6574
­
dbpm1e;
d2m6574
=
bbpm6574
­
dbpm2e;

pr1_
6574
=
(
1/(
1
+
exp(
4.90723
­
0.02031*
bbpm6574)))
­
(
1/(
1
+
exp(
4.90723
­
0.02031*
d1m6574)));

pr2_
6574
=
(
1/(
1
+
exp(
4.90723
­
0.02031*
bbpm6574)))
­
(
1/(
1
+
exp(
4.90723
­
0.02031*
d2m6574)));

b14059
=
(
pr1_
4059
*
exppop
*
pctm4059
*
76347
*
0.66)/
10;
b24059
=
(
pr2_
4059
*
exppop
*
pctm4059
*
76347
*
0.66)/
10;
b16064
=
(
pr1_
6064
*
exppop
*
pctm6064
*
76347
*
0.66)/
2;
b26064
=
(
pr2_
6064
*
exppop
*
pctm6064
*
76347
*
0.66)/
2;
b16574
=
(
pr1_
6574
*
exppop
*
pctm6574
*
76347
*
0.66)/
2;
b26574
=
(
pr2_
6574
*
exppop
*
pctm6574
*
76347
*
0.66)/
2;

/*
Number
of
reduced
cases
*/
r14059
=
(
pr1_
4059
*
exppop
*
pctm4059
*
0.66)/
10;
r24059
=
(
pr2_
4059
*
exppop
*
pctm4059
*
0.66)/
10;
r16064
=
(
pr1_
6064
*
exppop
*
pctm6064
*
0.66)/
2;
r26064
=
(
pr2_
6064
*
exppop
*
pctm6064
*
0.66)/
2;
r16574
=
(
pr1_
6574
*
exppop
*
pctm6574
*
0.66)/
2;
r26574
=
(
pr2_
6574
*
exppop
*
pctm6574
*
0.66)/
2;
153
popm4059
=
exppop
*
pctm4059;
popm6064
=
exppop
*
pctm6064;
popm6574
=
exppop
*
pctm6574;

/*
Calculate
Benefits
from
Reduced
Cerebrovascular
Accidents
and
Brain
Infarctions,
affects
men
aged
45­
74
Non­
fatal
only
which
is
70%
of
all
cases
*/

/*
Ages
45­
74,
change
in
the
2
year
prob
of
occ.
*/
d1m4574
=
bbpm4574
­
dbpm1e;
d2m4574
=
bbpm4574
­
dbpm2e;

pr1_
cba
=
(
1/(
1
+
exp(
8.58889
­
0.04066*
bbpm4574)))
­
(
1/(
1
+
exp(
8.58889
­
0.04066*
d1m4574)));

pr2_
cba
=
(
1/(
1
+
exp(
8.58889
­
0.04066*
bbpm4574)))
­
(
1/(
1
+
exp(
8.58889
­
0.04066*
d2m4574)));

pr1_
bi
=
(
1/(
1
+
exp(
9.9516
­
0.04840*
bbpm4574)))
­
(
1/(
1
+
exp(
9.9516
­
0.04840*
d1m4574)));

pr2_
bi
=
(
1/(
1
+
exp(
9.9516
­
0.04840*
bbpm4574)))
­
(
1/(
1
+
exp(
9.9516
­
0.04840*
d2m4574)));

b1_
cba
=
(
pr1_
cba
*
exppop
*
pctm4574
*
335135
*
0.7)/
2;
b2_
cba
=
(
pr2_
cba
*
exppop
*
pctm4574
*
335135
*
0.7)/
2;
b1_
bi
=
(
pr1_
bi
*
exppop
*
pctm4574
*
335135
*
0.7)/
2;
b2_
bi
=
(
pr2_
bi
*
exppop
*
pctm4574
*
335135
*
0.7)/
2;

r1_
cba
=
(
pr1_
cba
*
exppop
*
pctm4574
*
0.7)/
2;
r2_
cba
=
(
pr2_
cba
*
exppop
*
pctm4574
*
0.7)/
2;
r1_
bi
=
(
pr1_
bi
*
exppop
*
pctm4574
*
0.7)/
2;
r2_
bi
=
(
pr2_
bi
*
exppop
*
pctm4574
*
0.7)/
2;

popm4574
=
exppop
*
pctm4574;

/*
Calculate
Benefits
from
Premature
Mortality
*/

/*
Ages
40­
54,
change
in
the
12
year
prob
of
death
*/
d1m4054
=
bbpm4054
­
dbpm1;
d2m4054
=
bbpm4054
­
dbpm2;

m1_
4054
=
(
1/(
1
+
exp(
5.3158
­
0.03516*
bbpm4054)))
­
(
1/(
1
+
exp(
5.3158
­
0.03516*
d1m4054)));

m2_
4054
=
(
1/(
1
+
exp(
5.3158
­
0.03516*
bbpm4054)))
­
(
1/(
1
+
exp(
5.3158
­
0.03516*
d2m4054)));

/*
Ages
55­
64,
change
in
the
2
year
prob
of
death
*/
d1m5564
=
bbpm5564
­
dbpm1e;
d2m5564
=
bbpm5564
­
dbpm2e;
154
m1_
5564
=
(
1/(
1
+
exp(
4.89528
­
0.01866*
bbpm5564)))
­
(
1/(
1
+
exp(
4.89528
­
0.01866*
d1m5564)));

m2_
5564
=
(
1/(
1
+
exp(
4.89528
­
0.01866*
bbpm5564)))
­
(
1/(
1
+
exp(
4.89528
­
0.01866*
d2m5564)));

/*
Ages
65­
74,
change
in
the
2
year
prob
of
death
*/
d1m6574
=
bbpm6574
­
dbpm1e;
d2m6574
=
bbpm6574
­
dbpm2e;

m1_
6574
=
(
1/(
1
+
exp(
3.05723
­
0.00547*
bbpm6574)))
­
(
1/(
1
+
exp(
3.05723
­
0.00547*
d1m6574)));

m2_
6574
=
(
1/(
1
+
exp(
3.05723
­
0.00547*
bbpm6574)))
­
(
1/(
1
+
exp(
3.05723
­
0.00547*
d2m6574)));

m14054l
=
(
m1_
4054
*
exppop
*
pctm4054
*
2500000)/
12;
m24054l
=
(
m2_
4054
*
exppop
*
pctm4054
*
2500000)/
12;
m14054h
=
(
m1_
4054
*
exppop
*
pctm4054
*
13600000)/
12;
m24054h
=
(
m2_
4054
*
exppop
*
pctm4054
*
13600000)/
12;
mid40541
=
(
m1_
4054
*
exppop
*
pctm4054
*
6500000)/
12;
mid40542
=
(
m2_
4054
*
exppop
*
pctm4054
*
6500000)/
12;

m15564l
=
(
m1_
5564
*
exppop
*
pctm5564
*
2500000)/
2;
m25564l
=
(
m2_
5564
*
exppop
*
pctm5564
*
2500000)/
2;
m15564h
=
(
m1_
5564
*
exppop
*
pctm5564
*
13600000)/
2;
m25564h
=
(
m2_
5564
*
exppop
*
pctm5564
*
13600000)/
2;
mid55641
=
(
m1_
5564
*
exppop
*
pctm5564
*
6500000)/
2;
mid55642
=
(
m2_
5564
*
exppop
*
pctm5564
*
6500000)/
2;

m16574l
=
(
m1_
6574
*
exppop
*
pctm6574
*
2500000)/
2;
m26574l
=
(
m2_
6574
*
exppop
*
pctm6574
*
2500000)/
2;
m16574h
=
(
m1_
6574
*
exppop
*
pctm6574
*
13600000)/
2;
m26574h
=
(
m2_
6574
*
exppop
*
pctm6574
*
13600000)/
2;
mid65741
=
(
m1_
6574
*
exppop
*
pctm6574
*
6500000)/
2;
mid65742
=
(
m2_
6574
*
exppop
*
pctm6574
*
6500000)/
2;

r14054l
=
(
m1_
4054
*
exppop
*
pctm4054)/
12;
r24054l
=
(
m2_
4054
*
exppop
*
pctm4054)/
12;
r14054h
=
(
m1_
4054
*
exppop
*
pctm4054)/
12;
r24054h
=
(
m2_
4054
*
exppop
*
pctm4054)/
12;
r15564l
=
(
m1_
5564
*
exppop
*
pctm5564)/
2;
r25564l
=
(
m2_
5564
*
exppop
*
pctm5564)/
2;
r15564h
=
(
m1_
5564
*
exppop
*
pctm5564)/
2;
r25564h
=
(
m2_
5564
*
exppop
*
pctm5564)/
2;
r16574l
=
(
m1_
6574
*
exppop
*
pctm6574)/
2;
r26574l
=
(
m2_
6574
*
exppop
*
pctm6574)/
2;
r16574h
=
(
m1_
6574
*
exppop
*
pctm6574)/
2;
r26574h
=
(
m2_
6574
*
exppop
*
pctm6574)/
2;

popm4054
=
exppop
*
pctm4054;
popm5564
=
exppop
*
pctm5564;
155
run;

data
women;
set
lead;

/*
Set
up
some
constants
*/
/*
All
percentages
based
on
the
1996
Census
numbers
*/
pctfem
=
0.511735;
/*
Percentage
of
U.
S.
Pop.
who
are
female
*/
pctf4574
=
0.143282;
/*
Percentage
of
U.
S.
Pop.
who
are
female,
age
45­
74
*/
bbpf4574
=
76.5;
/*
Mean
diastolic
bp
from
NHANES
III,
females
age
45­
74
*/

/**************************************************************************/
/*
Begin
Benefits
for
Females
*/
/**************************************************************************/

/*
No
dose­
response
function
for
female
hypertension
*/

/*
Calculate
Benefits
from
Changes
in
CHD,
non­
fatal
cases
only
which
are
2/
3
of
the
cases
*/

dbpf1
=
(
0.6
*
1.4)
*
log(
PbB_
bfe/
PbB_
1fe);
dbpf2
=
(
0.6
*
1.4)
*
log(
PbB_
bfe/
PbB_
2fe);

/*
Ages
45­
74,
change
in
the
2
year
prob
of
occ.
*/
d1f4574
=
bbpf4574
­
dbpf1;
d2f4574
=
bbpf4574
­
dbpf2;

pr1_
4574
=
(
1/(
1
+
exp(
6.9401
­
0.03072*
bbpf4574)))
­
(
1/(
1
+
exp(
6.9401
­
0.03072*
d1f4574)));

pr2_
4574
=
(
1/(
1
+
exp(
6.9401
­
0.03072*
bbpf4574)))
­
(
1/(
1
+
exp(
6.9401
­
0.03072*
d2f4574)));

b1fchd
=
(
pr1_
4574
*
exppop
*
pctf4574
*
76347
*
0.66)/
2;
b2fchd
=
(
pr2_
4574
*
exppop
*
pctf4574
*
76347
*
0.66)/
2;

red_
chd1
=
(
pr1_
4574
*
exppop
*
pctf4574
*
0.66)/
2;
red_
chd2
=
(
pr2_
4574
*
exppop
*
pctf4574
*
0.66)/
2;

popf4574
=
exppop
*
pctf4574;

/*
Calculate
Benefits
from
Reduced
Cerebrovascular
Accidents
and
Brain
Infarctions,
affects
women
aged
45­
74
Non­
fatal
only
which
is
70%
of
all
cases
*/

/*
Ages
45­
74,
change
in
the
2
year
prob
of
occ.
*/

pr1f_
bi
=
(
1/(
1
+
exp(
10.6716
­
0.0544*
bbpf4574)))
­
(
1/(
1
+
exp(
10.6716
­
0.0544*
d1f4574)));

pr2f_
bi
=
(
1/(
1
+
exp(
10.6716
­
0.0544*
bbpf4574)))
­
156
(
1/(
1
+
exp(
10.6716
­
0.0544*
d2f4574)));

pr1f_
cba
=
(
1/(
1
+
exp(
9.07737
­
0.04287*
bbpf4574)))
­
(
1/(
1
+
exp(
9.07737
­
0.04287*
d1f4574)));

pr2f_
cba
=
(
1/(
1
+
exp(
9.07737
­
0.04287*
bbpf4574)))
­
(
1/(
1
+
exp(
9.07737
­
0.04287*
d2f4574)));

b1f_
cba
=
(
pr1f_
cba
*
exppop
*
pctf4574
*
251351
*
0.7)/
2;
b2f_
cba
=
(
pr2f_
cba
*
exppop
*
pctf4574
*
251351
*
0.7)/
2;
b1f_
bi
=
(
pr1f_
bi
*
exppop
*
pctf4574
*
251351
*
0.7)/
2;
b2f_
bi
=
(
pr2f_
bi
*
exppop
*
pctf4574
*
251351
*
0.7)/
2;

r1f_
cba
=
(
pr1f_
cba
*
exppop
*
pctf4574
*
0.7)/
2;
r2f_
cba
=
(
pr2f_
cba
*
exppop
*
pctf4574
*
0.7)/
2;
r1f_
bi
=
(
pr1f_
bi
*
exppop
*
pctf4574
*
0.7)/
2;
r2f_
bi
=
(
pr2f_
bi
*
exppop
*
pctf4574
*
0.7)/
2;

/*
Calculate
Benefits
from
Premature
Mortality
*/

/*
Ages
45­
74,
change
in
the
2
year
prob
of
death
*/

m1_
4574
=
(
1/(
1
+
exp(
5.40374
­
0.01511*
bbpf4574)))
­
(
1/(
1
+
exp(
5.40374
­
0.01511*
d1f4574)));

m2_
4574
=
(
1/(
1
+
exp(
5.40374
­
0.01511*
bbpf4574)))
­
(
1/(
1
+
exp(
5.40374
­
0.01511*
d2f4574)));

m14574l
=
(
m1_
4574
*
exppop
*
pctf4574
*
2500000)/
2;
m24574l
=
(
m2_
4574
*
exppop
*
pctf4574
*
2500000)/
2;
m14574h
=
(
m1_
4574
*
exppop
*
pctf4574
*
13600000)/
2;
m24574h
=
(
m2_
4574
*
exppop
*
pctf4574
*
13600000)/
2;
mid45741
=
(
m1_
4574
*
exppop
*
pctf4574
*
6500000)/
2;
mid45742
=
(
m2_
4574
*
exppop
*
pctf4574
*
6500000)/
2;

r14574l
=
(
m1_
4574
*
exppop
*
pctf4574)/
2;
r24574l
=
(
m2_
4574
*
exppop
*
pctf4574)/
2;
r14574h
=
(
m1_
4574
*
exppop
*
pctf4574)/
2;
r24574h
=
(
m2_
4574
*
exppop
*
pctf4574)/
2;
run;

/*
Sum
up
benefits
and
reduced
cases
and
print
results
*/

proc
means
sum
data=
men;
var
ben_
hyp1
ben_
hyp2
hyppop
b14059
b24059
b16064
b26064
b16574
b26574
popm4059
popm6064
popm6574
b1_
cba
b2_
cba
b1_
bi
b2_
bi
popm4574
m14054l
m14054h
m24054l
m24054h
m15564l
m15564h
m25564l
m25564h
m16574l
m16574h
m26574l
m26574h
mid40541
mid40542
mid55641
mid55642
mid65741
mid65742
popm4054
popm5564
hyp_
red1
hyp_
red2
157
r14059
r24059
r16064
r26064
r16574
r26574
r1_
cba
r2_
cba
r1_
bi
r2_
bi
r14054l
r24054l
r15564l
r25564l
r16574l
r26574l;
output
out
=
rundat.
msubsamp(
drop
=
_
type_
_
freq_)
sum
=
ben_
hyp1
ben_
hyp2
hyppop
b14059
b24059
b16064
b26064
b16574
b26574
popm4059
popm6064
popm6574
b1_
cba
b2_
cba
b1_
bi
b2_
bi
popm4574
m14054l
m14054h
m24054l
m24054h
m15564l
m15564h
m25564l
m25564h
m16574l
m16574h
m26574l
m26574h
mid40541
mid40542
mid55641
mid55642
mid65741
mid65742
popm4054
popm5564
hyp_
red1
hyp_
red2
r14059
r24059
r16064
r26064
r16574
r26574
r1_
cba
r2_
cba
r1_
bi
r2_
bi
r14054l
r24054l
r15564l
r25564l
r16574l
r26574l;
title3
'
Mens
Lead
Related
Benefits
(
Sample
Basis)';
quit;

proc
means
sum
data=
men;
weight
event_
wt;
var
ben_
hyp1
ben_
hyp2
hyppop
b14059
b24059
b16064
b26064
b16574
b26574
popm4059
popm6064
popm6574
b1_
cba
b2_
cba
b1_
bi
b2_
bi
popm4574
m14054l
m14054h
m24054l
m24054h
m15564l
m15564h
m25564l
m25564h
m16574l
m16574h
m26574l
m26574h
mid40541
mid40542
mid55641
mid55642
mid65741
mid65742
popm4054
popm5564
hyp_
red1
hyp_
red2
r14059
r24059
r16064
r26064
r16574
r26574
r1_
cba
r2_
cba
r1_
bi
r2_
bi
r14054l
r24054l
r15564l
r25564l
r16574l
r26574l;
output
out
=
rundat.
msubwght(
drop
=
_
type_
_
freq_)
sum
=
ben_
hyp1
ben_
hyp2
hyppop
b14059
b24059
b16064
b26064
b16574
b26574
popm4059
popm6064
popm6574
b1_
cba
b2_
cba
b1_
bi
b2_
bi
popm4574
m14054l
m14054h
m24054l
m24054h
m15564l
m15564h
m25564l
m25564h
m16574l
m16574h
m26574l
m26574h
mid40541
mid40542
mid55641
mid55642
mid65741
mid65742
popm4054
popm5564
hyp_
red1
hyp_
red2
r14059
r24059
r16064
r26064
r16574
r26574
r1_
cba
r2_
cba
r1_
bi
r2_
bi
r14054l
r24054l
158
r15564l
r25564l
r16574l
r26574l;
title3
'
Mens
Lead
Related
Benefits
(
National
Basis)';
quit;

%
macro
maleleadtable(
tbl_
in=,
tbl_
out=);
data
rundat.&
tbl_
out
(
keep=
gender
categ
agecat
type
case1
ben1l
ben1m
ben1h
case2
ben2l
ben2m
ben2h);
set
rundat.&
tbl_
in;

length
gender
$
50
categ
$
50
agecat
$
50
type
$
50;

array
_
hyper[
4]
ben_
hyp1
ben_
hyp2
hyp_
red1
hyp_
red2;
array
_
chd[
12]
b14059
b24059
b16064
b26064
b16574
b26574
r14059
r24059
r16064
r26064
r16574
r26574;
array
_
cba[
4]
b1_
cba
b2_
cba
r1_
cba
r2_
cba;
array
_
bi[
4]
b1_
bi
b2_
bi
r1_
bi
r2_
bi;
array
_
mort[
24]
m14054l
mid40541
m14054h
m24054l
mid40542
m24054h
m15564l
mid55641
m15564h
m25564l
mid55642
m25564h
m16574l
mid65741
m16574h
m26574l
mid65742
m26574h
r14054l
r24054l
r15564l
r25564l
r16574l
r26574l;
array
ben[
6]
ben1l
ben1m
ben1h
ben2l
ben2m
ben2h;
array
cases[
2]
case1
case2;

do
i
=
1
to
9;
if
i
=
1
then
do;
ben[
1]
=
_
hyper[
1];
ben[
2]
=
_
hyper[
1];
ben[
3]
=
_
hyper[
1];
ben[
4]
=
_
hyper[
2];
ben[
5]
=
_
hyper[
2];
ben[
6]
=
_
hyper[
2];
cases[
1]
=
_
hyper[
3];
cases[
2]
=
_
hyper[
4];
categ
=
"
Hypertension";
agecat
=
"
All";
type
=
"
Sub";
gender
=
"
Male";
output;
end;
if
i
=
2
then
do;
ben[
1]
=
_
chd[
1];
ben[
2]
=
_
chd[
1];
ben[
3]
=
_
chd[
1];
ben[
4]
=
_
chd[
2];
ben[
5]
=
_
chd[
2];
ben[
6]
=
_
chd[
2];
cases[
1]
=
_
chd[
7];
cases[
2]
=
_
chd[
8];
categ
=
"
CHD";
agecat
=
"
Age
40­
59";
type
=
"
Sub";
gender
=
"
Male";
output;
end;
if
i
=
3
then
do;
ben[
1]
=
_
chd[
3];
ben[
2]
=
_
chd[
3];
ben[
3]
=
_
chd[
3];
ben[
4]
=
_
chd[
4];
ben[
4]
=
_
chd[
4];
ben[
6]
=
_
chd[
4];
cases[
1]
=
_
chd[
9];
cases[
2]
=
_
chd[
10];
categ
=
"
CHD";
agecat
=
"
Age
60­
64";
159
type
=
"
Sub";
gender
=
"
Male";
output;
end;
if
i
=
4
then
do;
ben[
1]
=
_
chd[
5];
ben[
2]
=
_
chd[
5];
ben[
3]
=
_
chd[
5];
ben[
4]
=
_
chd[
6];
ben[
4]
=
_
chd[
6];
ben[
6]
=
_
chd[
6];
cases[
1]
=
_
chd[
11];
cases[
2]
=
_
chd[
12];
categ
=
"
CHD";
agecat
=
"
Age
65­
74";
type
=
"
Sub";
gender
=
"
Male";
output;
end;
if
i
=
5
then
do;
ben[
1]
=
_
cba[
1];
ben[
2]
=
_
cba[
1];
ben[
3]
=
_
cba[
1];
ben[
4]
=
_
cba[
2];
ben[
5]
=
_
cba[
2];
ben[
6]
=
_
cba[
2];
cases[
1]
=
_
cba[
3];
cases[
2]
=
_
cba[
4];
categ
=
"
CBA";
agecat
=
"
All";
type
=
"
Sub";
gender
=
"
Male";
output;
end;
if
i
=
6
then
do;
ben[
1]
=
_
bi[
1];
ben[
2]
=
_
bi[
1];
ben[
3]
=
_
bi[
1];
ben[
4]
=
_
bi[
2];
ben[
5]
=
_
bi[
2];
ben[
6]
=
_
bi[
2];
cases[
1]
=
_
bi[
3];
cases[
2]
=
_
bi[
4];
categ
=
"
BI";
agecat
=
"
All";
type
=
"
Sub";
gender
=
"
Male";
output;
end;
if
i
=
7
then
do;
ben[
1]
=
_
mort[
1];
ben[
2]
=
_
mort[
2];
ben[
3]
=
_
mort[
3];
ben[
4]
=
_
mort[
4];
ben[
5]
=
_
mort[
5];
ben[
6]
=
_
mort[
6];
cases[
1]
=
_
mort[
19];
cases[
2]
=
_
mort[
20];
categ
=
"
Mortality";
agecat
=
"
Age
40­
54";
type
=
"
Sub";
gender
=
"
Male";
output;
end;
if
i
=
8
then
do;
ben[
1]
=
_
mort[
7];
ben[
2]
=
_
mort[
8];
ben[
3]
=
_
mort[
9];
ben[
4]
=
_
mort[
10];
ben[
5]
=
_
mort[
11];
ben[
6]
=
_
mort[
12];
cases[
1]
=
_
mort[
21];
cases[
2]
=
_
mort[
22];
categ
=
"
Mortality";
agecat
=
"
Age
55­
64";
type
=
"
Sub";
gender
=
"
Male";
output;
160
end;
if
i
=
9
then
do;
ben[
1]
=
_
mort[
13];
ben[
2]
=
_
mort[
14];
ben[
3]
=
_
mort[
15];
ben[
4]
=
_
mort[
16];
ben[
5]
=
_
mort[
17];
ben[
6]
=
_
mort[
18];
cases[
1]
=
_
mort[
23];
cases[
2]
=
_
mort[
24];
categ
=
"
Mortality";
agecat
=
"
Age
65­
74";
type
=
"
Sub";
gender
=
"
Male";
output;
end;
end;
run;
%
mend;

%
maleleadtable(
tbl_
in=
msubsamp,
tbl_
out=
tblmbsmp);
%
maleleadtable(
tbl_
in=
msubwght,
tbl_
out=
tblmbwgt);

proc
means
sum
data=
women;
var
b1fchd
b2fchd
popf4574
b1f_
cba
b2f_
cba
b1f_
bi
b2f_
bi
m14574l
m14574h
m24574l
m24574h
mid45741
mid45742
red_
chd1
red_
chd2
r1f_
cba
r2f_
cba
r1f_
bi
r2f_
bi
r14574l
r14574h
r24574l
r24574h;
output
out
=
rundat.
fsubsamp(
drop
=
_
type_
_
freq_)
sum
=
b1fchd
b2fchd
popf4574
b1f_
cba
b2f_
cba
b1f_
bi
b2f_
bi
m14574l
m14574h
m24574l
m24574h
mid45741
mid45742
red_
chd1
red_
chd2
r1f_
cba
r2f_
cba
r1f_
bi
r2f_
bi
r14574l
r14574h
r24574l
r24574h;
title3
'
Female
Lead
Related
Benefits
(
Sample
Basis)';
quit;

proc
means
sum
data=
women;
weight
event_
wt;
var
b1fchd
b2fchd
popf4574
b1f_
cba
b2f_
cba
b1f_
bi
b2f_
bi
m14574l
m14574h
m24574l
m24574h
mid45741
mid45742
red_
chd1
red_
chd2
r1f_
cba
r2f_
cba
r1f_
bi
r2f_
bi
r14574l
r14574h
r24574l
r24574h;
output
out
=
rundat.
fsubwght(
drop
=
_
type_
_
freq_)
sum
=
b1fchd
b2fchd
popf4574
b1f_
cba
b2f_
cba
b1f_
bi
b2f_
bi
m14574l
m14574h
m24574l
m24574h
mid45741
mid45742
red_
chd1
red_
chd2
r1f_
cba
r2f_
cba
r1f_
bi
r2f_
bi
r14574l
r14574h
r24574l
r24574h;
title3
'
Female
Lead
Related
Benefits
(
National
Basis)';
quit;
161
%
macro
femaleleadtable(
tbl_
in=,
tbl_
out=);
data
rundat.&
tbl_
out
(
keep=
gender
categ
agecat
type
case1
ben1l
ben1m
ben1h
case2
ben2l
ben2m
ben2h);
set
rundat.&
tbl_
in;

length
gender
$
50
categ
$
50
agecat
$
50
type
$
50;

array
_
chd[
4]
b1fchd
b2fchd
red_
chd1
red_
chd2;
array
_
cba[
4]
b1f_
cba
b2f_
cba
r1f_
cba
r2f_
cba;
array
_
bi[
4]
b1f_
bi
b2f_
bi
r1f_
bi
r2f_
bi;
array
_
mort[
8]
m14574l
mid45741
m14574h
m24574l
mid45742
m24574h
r14574l
r24574l;

array
ben[
6]
ben1l
ben1m
ben1h
ben2l
ben2m
ben2h;
array
cases[
2]
case1
case2;

do
i
=
1
to
4;
if
i
=
1
then
do;
ben[
1]
=
_
chd[
1];
ben[
2]
=
_
chd[
1];
ben[
3]
=
_
chd[
1];
ben[
4]
=
_
chd[
2];
ben[
5]
=
_
chd[
2];
ben[
6]
=
_
chd[
2];
cases[
1]
=
_
chd[
3];
cases[
2]
=
_
chd[
4];
categ
=
"
CHD";
agecat
=
"
All";
type
=
"
Sub";
gender
=
"
Female";
output;
end;
if
i
=
2
then
do;
ben[
1]
=
_
cba[
1];
ben[
2]
=
_
cba[
1];
ben[
3]
=
_
cba[
1];
ben[
4]
=
_
cba[
2];
ben[
5]
=
_
cba[
2];
ben[
6]
=
_
cba[
2];
cases[
1]
=
_
cba[
3];
cases[
2]
=
_
cba[
4];
categ
=
"
CBA";
agecat
=
"
All";
type
=
"
Sub";
gender
=
"
Female";
output;
end;
if
i
=
3
then
do;
ben[
1]
=
_
bi[
1];
ben[
2]
=
_
bi[
1];
ben[
3]
=
_
bi[
1];
ben[
4]
=
_
bi[
2];
ben[
5]
=
_
bi[
2];
ben[
6]
=
_
bi[
2];
cases[
1]
=
_
bi[
3];
cases[
2]
=
_
bi[
4];
categ
=
"
BI";
agecat
=
"
All";
type
=
"
Sub";
gender
=
"
Female";
output;
end;
if
i
=
4
then
do;
ben[
1]
=
_
mort[
1];
ben[
2]
=
_
mort[
2];
ben[
3]
=
_
mort[
3];
ben[
4]
=
_
mort[
4];
ben[
5]
=
_
mort[
5];
ben[
6]
=
_
mort[
6];
cases[
1]
=
_
mort[
7];
cases[
2]
=
_
mort[
8];
categ
=
"
Mortality";
agecat
=
"
Age
45­
74";
type
=
"
Sub";
162
gender
=
"
Female";
output;
end;
end;
run;
%
mend;

%
femaleleadtable(
tbl_
in=
fsubsamp,
tbl_
out=
tblfbsmp);
%
femaleleadtable(
tbl_
in=
fsubwght,
tbl_
out=
tblfbwgt);

data
rundat.
tblsub_
s;
set
rundat.
tblmbsmp
rundat.
tblfbsmp;
run;

data
rundat.
tblsub_
w;
set
rundat.
tblmbwgt
rundat.
tblfbwgt;
run;

proc
means
sum
data=
men;
var
event_
wt;
title3
'
Number
of
Affected
Reaches
Nationally';
quit;

proc
sql;

create
table
malepop
as
select
sum(
exppop)
as
tpops,
sum(
exppop*
pctmale)
as
pm2074s,
sum(
exppop*
pctm4574)
as
pm4574s,
sum(
exppop*
event_
wt)
as
tpopn,
sum(
exppop*
pctmale*
event_
wt)
as
pm2074n,
sum(
exppop*
pctm4574*
event_
wt)
as
pm4574n
from
men;

create
table
fempop
as
select
sum(
exppop)
as
tpops,
sum(
exppop*
pctf4574)
as
pf4574s,
sum(
exppop*
event_
wt)
as
tpopn,
sum(
exppop*
pctf4574*
event_
wt)
as
pf4574n
from
women;
quit;

proc
print
data=
malepop;
var
tpops
pm2074s
pm4574s
tpopn
pm2074n
pm4574n;
label
tpops
=
'
Total
Exposed
Pop
(
male
+
fem)
(
Smpl)'
pm2074s
=
'
Exposed
Males
Age
20­
74
(
Smpl)'
pm4574s
=
'
Exposed
Males
Age
45­
74
(
Smpl)'
tpopn
=
'
Total
Exposed
Pop
(
male
+
fem)
(
Natl)'
pm2074n
=
'
Exposed
Males
Age
20­
74
(
Natl)'
pm4574n
=
'
Exposed
Males
Age
45­
74
(
Natl)';
title3
'
Exposed
Population
­
Males';
quit;
163
proc
print
data=
fempop;
var
tpops
pf4574s
tpopn
pf4574n;
label
tpops
=
'
Total
Exposed
Pop
(
male
+
fem)
(
Smpl)'
pf4574s
=
'
Exposed
Females
Age
45­
74
(
Smpl)'
tpopn
=
'
Total
Exposed
Pop
(
male
+
fem)
(
Natl)'
pf4574n
=
'
Exposed
Females
Age
45­
74
(
Natl)';
title3
'
Exposed
Population
­
Females';
quit;

data
rundat.
leadtbls;
if
_
n_
=
1
then
do;
do
i
=
1
to
13;
set
rundat.
tblspt_
s
point
=
i;
output;
set
rundat.
tblsub_
s
point
=
i;
output;
end;
end;
run;

data
rundat.
leadtblw;
if
_
n_
=
1
then
do;
do
i
=
1
to
13;
set
rundat.
tblspt_
w
point
=
i;
output;
set
rundat.
tblsub_
w
point
=
i;
output;
end;
end;
run;

proc
summary
data=
rundat.
leadtbls
nway;
class
gender
categ;
var
case1
ben1l
ben1m
ben1h
case2
ben2l
ben2m
ben2h;
output
out
=
rundat.
leadsums
(
drop=
_
type_
_
freq_)
sum
=
case1
ben1l
ben1m
ben1h
case2
ben2l
ben2m
ben2h;
run;

proc
summary
data=
rundat.
leadtblw
nway;
class
gender
categ;
var
case1
ben1l
ben1m
ben1h
case2
ben2l
ben2m
ben2h;
output
out
=
rundat.
leadsumw
(
drop=
_
type_
_
freq_)
sum
=
case1
ben1l
ben1m
ben1h
case2
ben2l
ben2m
ben2h;
run;

proc
summary
data=
rundat.
leadtbls;
var
ben1l
ben1m
ben1h
ben2l
ben2m
ben2h;
output
out
=
rundat.
ldalls
(
drop=
_
type_
_
freq_)
sum
=
ben1l
ben1m
ben1h
ben2l
ben2m
ben2h;
run;

proc
summary
data=
rundat.
leadtblw;
164
var
ben1l
ben1m
ben1h
ben2l
ben2m
ben2h;
output
out
=
rundat.
ldallw
(
drop=
_
type_
_
freq_)
sum
=
ben1l
ben1m
ben1h
ben2l
ben2m
ben2h;
run;

data
exlleadw
(
keep=
titlecol
col1­
col10
label="
Adult
Lead
Benefits
­
Weighted");
set
rundat.
leadsumw
rundat.
ldallw;
length
titlecol
$
50
col1
­
col10
$
128;

if
_
n_
=
1
then
do;
titlecol
=
"
Table:
Adult
Lead
Benefits,
Weighted
Estimates";
output;
titlecol
=
"
Run
on
&
sysdate";
output;
titlecol
=
"
";
output;
col3
=
"
Option
1";
col7
=
"
Option
2";
output;
col3
=
"
Reduced
Cases";
col4
=
"
Low";
col5
=
"
Mid";
col6
=
"
High";
col7
=
"
Reduced
Cases";
col8
=
"
Low";
col9
=
"
Mid";
col10
=
"
High";
output;
end;

if
_
n_
=
1
or
_
n_
=
6
then
do;
col1
=
gender;
end;

if
_
n_
=
10
then
do;
col1
=
"
Total";
end;

col2
=
trim(
categ);
col3
=
trim(
case1);
col4
=
trim(
ben1l);
col5
=
trim(
ben1m);
col6
=
trim(
ben1h);
col7
=
trim(
case2);
col8
=
trim(
ben2l);
col9
=
trim(
ben2m);
col10
=
trim(
ben2h);
output;
run;

proc
export
data
=
exlleadw
outfile
=
"
C:\
Output
Files\
Adult
Lead.
xls"
dbms=
excel2000
replace;
run;

/*
End
Subsistence
Lead
Benefits
(
Sub
17).
sas
*/
165
Program
Output
166
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
87
Subsistence
Lead
Related
Benefits
(
Sub
17)
Mens
Lead
Related
Benefits
(
National
Basis)
10:
59
Friday,
February
7,
2003
The
MEANS
Procedure
Variable
Sum
                        
ben_
hyp1
18385.03
ben_
hyp2
23968.72
hyppop
6653.82
b14059
705.8694972
b24059
921.4129639
b16064
196.5001995
b26064
256.5073159
b16574
310.5449729
b26574
405.3839462
popm4059
2476.98
popm6064
369.6358339
popm6574
654.4532593
b1_
cba
1718.32
b2_
cba
2242.89
b1_
bi
985.8207533
b2_
bi
1286.73
popm4574
2693.24
m14054l
29807.78
m14054h
162154.34
m24054l
38909.27
m24054h
211666.45
m15564l
15732.08
m15564h
85582.52
m25564l
20536.70
m25564h
111719.66
m16574l
7584.91
m16574h
41261.94
m26574l
9901.87
m26574h
53866.19
mid40541
77500.24
mid40542
101164.11
mid55641
40903.41
mid55642
53395.42
mid65741
19720.78
mid65742
25744.87
popm4054
2049.24
popm5564
797.3721736
hyp_
red1
16.1130893
hyp_
red2
21.0067648
r14059
0.0092455
r24059
0.0120688
r16064
0.0025738
r26064
0.0033598
r16574
0.0040675
167
r26574
0.0053098
r1_
cba
0.0051272
r2_
cba
0.0066925
r1_
bi
0.0029416
r2_
bi
0.0038395
r14054l
0.0119231
r24054l
0.0155637
r15564l
0.0062928
r25564l
0.0082147
r16574l
0.0030340
r26574l
0.0039607
                        
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
89
Subsistence
Lead
Related
Benefits
(
Sub
17)
Female
Lead
Related
Benefits
(
National
Basis)
10:
59
Friday,
February
7,
2003
The
MEANS
Procedure
Variable
Sum
                        
b1fchd
482.7694672
b2fchd
630.7469027
popf4574
2983.78
b1f_
cba
712.9535471
b2f_
cba
931.4497257
b1f_
bi
445.1381275
b2f_
bi
581.5365850
m14574l
16455.71
m14574h
89519.05
m24574l
21500.72
m24574h
116963.92
mid45741
42784.84
mid45742
55901.87
red_
chd1
0.0063234
red_
chd2
0.0082616
r1f_
cba
0.0028365
r2f_
cba
0.0037058
r1f_
bi
0.0017710
r2f_
bi
0.0023136
r14574l
0.0065823
r14574h
0.0065823
r24574l
0.0086003
r24574h
0.0086003
                        
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
90
Subsistence
Lead
Related
Benefits
(
Sub
17)
Number
of
Affected
Reaches
Nationally
10:
59
Friday,
February
7,
2003
The
MEANS
Procedure
Analysis
Variable
:
EVENT_
WT
Event
Weight
168
Sum
            
23.7361201
            
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
91
Subsistence
Lead
Related
Benefits
(
Sub
17)
Exposed
Population
­
Males
10:
59
Friday,
February
7,
2003
Obs
tpops
pm2074s
pm4574s
tpopn
pm2074n
pm4574n
1
4103
1310.98
530.641
20824.55
6653.82
2693.24
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
92
Subsistence
Lead
Related
Benefits
(
Sub
17)
Exposed
Population
­
Females
10:
59
Friday,
February
7,
2003
Obs
tpops
pf4574s
tpopn
pf4574n
1
4103
587.886
20824.55
2983.78
169
Lead
Benefits
for
Children
170
"
Cancer­
fish
(
Sub
4).
sas"
From
the
data
set
of
pollutant
concentrations
for
each
RF1
reach,
observations
for
in­
stream
lead
concentrations
are
outputed
into
a
separate
data
set.
See
Cancer
from
Fish
Consumption
for
program
code
and
output.
171
"
NeoNatal
Mortality
Benefits
(
Sub
15).
sas"
Using
data
from
the
lead
specific
data
set,
changes
in
blood
lead
levels
for
women
of
childbearing
age
are
estimated.
Reduced
risk
of
neonatal
mortality
is
calculated
and
monetized.
172
/*
Program:
NeoNatal
Mortality
Benefits
(
Sub
15).
sas
Author:
Stuart
Smith,
Abt
Associates,
Inc.
Date:
07/
11/
2000
Updated:
11/
08/
2002
This
program
estimates
benefits
from
reduced
consumption
of
fish
tissue
containing
lead.
Reductions
in
MP&
M
facility
lead
loadings
result
in
lower
probabilties
of
lead
related
illnesses.
*/

title2
'
NeoNatal
Mortality
Lead
Benefits
(
Sub
15)';

data
lead;
set
rundat.
lead;

/*
Combine
the
exposed
recreational
and
subsistence
populations;
fresh
and
salt
water
*/

sptpop
=
fwsptpop
+
swsptpop;
subpop
=
fwsubpop
+
swsubpop;

/*
Calculate
the
blood
lead
levels
under
the
baseline
and
post
compliance
scenarios
*/

PbB0f
=
2.05;
/*
Typical
PbB
conc.
in
absence
of
fish
cons
for
women
Aged
15­
45
*/
bcf
=
49;
/*
Bioconcentration
factor
for
lead
L/
KG
*/
bksf
=
0.4;
/*
Biokinetic
slope
factor
for
lead
*/
ing
=
17.5;
/*
Average
daily
fish
consumption
(
g/
day)
recreational
*/
ing2
=
142.4;
/*
Average
daily
fish
consumption
(
g/
day)
subsistence
*/
af
=
0.03;
/*
Absorbtion
factor
*/
ef
=
365;
/*
Exposure
Frequency
*/
at
=
365;
/*
Average
timing,
or
duration
of
exposure
in
days
*/
cf
=
0.001;
/*
Conversion
factor
kg/
g
*/

/*
Recreational
*/
PbB_
bfr
=
(
PbB0f
+
(
cnc_
base*
bcf*
ing*
af*
bksf*
ef*
cf))/
at;
PbB_
1fr
=
(
PbB0f
+
(
cnc_
trt1*
bcf*
ing*
af*
bksf*
ef*
cf))/
at;
PbB_
2fr
=
(
PbB0f
+
(
cnc_
trt2*
bcf*
ing*
af*
bksf*
ef*
cf))/
at;

/*
Subsistence
*/
PbB_
bfs
=
(
PbB0f
+
(
cnc_
base*
bcf*
ing2*
af*
bksf*
ef*
cf))/
at;
PbB_
1fs
=
(
PbB0f
+
(
cnc_
trt1*
bcf*
ing2*
af*
bksf*
ef*
cf))/
at;
PbB_
2fs
=
(
PbB0f
+
(
cnc_
trt2*
bcf*
ing2*
af*
bksf*
ef*
cf))/
at;

/*
Changes
in
blood
lead
levels
*/
diff1r
=
PbB_
bfr
­
PbB_
1fr;
diff2r
=
PbB_
bfr
­
PbB_
2fr;

diff1s
=
PbB_
bfs
­
PbB_
1fs;
diff2s
=
PbB_
bfs
­
PbB_
2fs;

drop
fwsptpop
fwsubpop
swsptpop
swsubpop;
173
run;

proc
print;
var
reachnmb
PbB_
bfr
PbB_
1fr
PbB_
2fr
PbB_
bfs
PbB_
1fs
PbB_
2fs
diff1r
diff2r
diff1s
diff2s
cnc_
base
cnc_
trt1
cnc_
trt2
sptpop
subpop
event_
wt;
quit;

data
neo;
set
lead;

pctfem
=
0.22531;
/*
Percentage
of
Women
Aged
15­
45
(
Childbearing
Age)
*/

expspt
=
sptpop*
pctfem;
expsub
=
subpop*
pctfem;

red1r
=
diff1r
*
sptpop
*
pctfem
*
0.0001;
red2r
=
diff2r
*
sptpop
*
pctfem
*
0.0001;

red1s
=
diff1s
*
subpop
*
pctfem
*
0.0001;
red2s
=
diff2s
*
subpop
*
pctfem
*
0.0001;

ben1_
lr
=
red1r
*
2500000;
ben1_
hr
=
red1r
*
13600000;
ben2_
lr
=
red2r
*
2500000;
ben2_
hr
=
red2r
*
13600000;
mid1r
=
red1r
*
6500000;
mid2r
=
red2r
*
6500000;

ben1_
ls
=
red1s
*
2500000;
ben1_
hs
=
red1s
*
13600000;
ben2_
ls
=
red2s
*
2500000;
ben2_
hs
=
red2s
*
13600000;
mid1s
=
red1s
*
6500000;
mid2s
=
red2s
*
6500000;

tot1_
l
=
ben1_
lr
+
ben1_
ls;
tot1_
h
=
ben1_
hr
+
ben1_
hs;
tot2_
l
=
ben2_
lr
+
ben2_
ls;
tot2_
h
=
ben2_
hr
+
ben2_
hs;
mid1
=
mid1r
+
mid1s;
mid2
=
mid2r
+
mid2s;
run;

proc
means
sum
data=
neo;
var
red1r
red2r
red1s
red2s
ben1_
lr
ben1_
ls
ben1_
hr
ben1_
hs
ben2_
lr
ben2_
ls
ben2_
hr
ben2_
hs
tot1_
l
tot1_
h
tot2_
l
tot2_
h
mid1r
mid1s
mid2r
mid2s
mid1
mid2
expspt
expsub;
label
red1r
=
'
Number
of
Reductions
rec
(
Opt
1)'
red2r
=
'
Number
of
Reductions
rec
(
Opt
2)'
red1s
=
'
Number
of
Reductions
sub
(
Opt
1)'
red2s
=
'
Number
of
Reductions
sub
(
Opt
2)'
174
ben1_
lr
=
'
Sport
Low
(
Opt1)'
ben1_
ls
=
'
Sub
Low
(
Opt1)'
ben1_
hr
=
'
Sport
High
(
Opt1)'
ben1_
hs
=
'
Sub
High
(
Opt1)'
ben2_
lr
=
'
Sport
Low
(
Opt2)'
ben2_
ls
=
'
Sub
Low
(
Opt2)'
ben2_
hr
=
'
Sport
High
(
Opt2)'
ben2_
hs
=
'
Sub
High
(
Opt2)'
tot1_
l
=
'
Total
Benefits
­
Low
(
Opt
1)'
tot1_
h
=
'
Total
Benefits
­
High
(
Opt
1)'
tot2_
l
=
'
Total
Benefits
­
Low
(
Opt
2)'
tot2_
h
=
'
Total
Benefits
­
High
(
Opt
2)'
mid1
=
'
Mid
Benefits
(
Opt1)'
mid2
=
'
Mid
Benefits
(
Opt2)'
expspt
=
'
Exposed
Sport
Pop
(
15­
45yrs)'
expsub
=
'
Exposed
Sub
Pop
(
15­
45yrs)';
title3
'
Sample
Basis';
quit;

proc
means
sum
data=
neo;
weight
event_
wt;
var
red1r
red2r
red1s
red2s
ben1_
lr
ben1_
ls
ben1_
hr
ben1_
hs
ben2_
lr
ben2_
ls
ben2_
hr
ben2_
hs
tot1_
l
tot1_
h
tot2_
l
tot2_
h
mid1r
mid1s
mid2r
mid2s
mid1
mid2
expspt
expsub;
label
red1r
=
'
Number
of
Reductions
rec
(
Opt
1)'
red2r
=
'
Number
of
Reductions
rec
(
Opt
2)'
red1s
=
'
Number
of
Reductions
sub
(
Opt
1)'
red2s
=
'
Number
of
Reductions
sub
(
Opt
2)'
ben1_
lr
=
'
Sport
Low
(
Opt1)'
ben1_
ls
=
'
Sub
Low
(
Opt1)'
ben1_
hr
=
'
Sport
High
(
Opt1)'
ben1_
hs
=
'
Sub
High
(
Opt1)'
ben2_
lr
=
'
Sport
Low
(
Opt2)'
ben2_
ls
=
'
Sub
Low
(
Opt2)'
ben2_
hr
=
'
Sport
High
(
Opt2)'
ben2_
hs
=
'
Sub
High
(
Opt2)'
tot1_
l
=
'
Total
Benefits
­
Low
(
Opt
1)'
tot1_
h
=
'
Total
Benefits
­
High
(
Opt
1)'
tot2_
l
=
'
Total
Benefits
­
Low
(
Opt
2)'
tot2_
h
=
'
Total
Benefits
­
High
(
Opt
2)'
mid1
=
'
Mid
Benefits
(
Opt1)'
mid2
=
'
Mid
Benefits
(
Opt2)'
expspt
=
'
Exposed
Sport
Pop
(
15­
45yrs)'
expsub
=
'
Exposed
Sub
Pop
(
15­
45yrs)';
output
out
=
rundat.
chld_
neo
(
drop=
_
type_
_
freq_)
sum
=
red1r
red2r
red1s
red2s
ben1_
lr
ben1_
ls
ben1_
hr
ben1_
hs
ben2_
lr
ben2_
ls
ben2_
hr
ben2_
hs
tot1_
l
tot1_
h
tot2_
l
tot2_
h
mid1r
mid1s
mid2r
mid2s
mid1
mid2
expspt
expsub;
title3
'
National
Basis';
quit;

data
rundat.
neo_
tbl
(
keep=
gender
categ
type
exppop
case1
case2
benlow1
benlow2
benmid1
benmid2
benhigh1
benhigh2);
175
set
rundat.
chld_
neo;

length
gender
$
50
categ
$
50
type
$
50;

gender
=
"
Children";
categ
=
"
Neo­
Natal
Mortality";
type
=
"
Sport";
exppop
=
expspt;
case1
=
red1r;
case2
=
red2r;
benlow1
=
ben1_
lr;
benlow2
=
ben2_
lr;
benmid1
=
mid1r;
benmid2
=
mid2r;
benhigh1
=
ben1_
hr;
benhigh2
=
ben2_
hr;
output;

gender
=
"
Children";
categ
=
"
Neo­
Natal
Mortality";
type
=
"
Sub";
exppop
=
expsub;
case1
=
red1s;
case2
=
red2s;
benlow1
=
ben1_
ls;
benlow2
=
ben2_
ls;
benmid1
=
mid1s;
benmid2
=
mid2s;
benhigh1
=
ben1_
hs;
benhigh2
=
ben2_
hs;
output;
run;

/*
End
NeoNatal
Mortality
Benefits
(
Sub
15).
sas
*/
176
Program
Output
177
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
95
NeoNatal
Mortality
Lead
Benefits
(
Sub
15)
National
Basis
10:
59
Friday,
February
7,
2003
The
MEANS
Procedure
Variable
Label
Sum
                                                            
red1r
Number
of
Reductions
rec
(
Opt
1)
0.1213102
red2r
Number
of
Reductions
rec
(
Opt
2)
0.1579182
red1s
Number
of
Reductions
sub
(
Opt
1)
0.0493505
red2s
Number
of
Reductions
sub
(
Opt
2)
0.0642432
ben1_
lr
Sport
Low
(
Opt1)
303275.41
ben1_
ls
Sub
Low
(
Opt1)
123376.26
ben1_
hr
Sport
High
(
Opt1)
1649818.24
ben1_
hs
Sub
High
(
Opt1)
671166.87
ben2_
lr
Sport
Low
(
Opt2)
394795.39
ben2_
ls
Sub
Low
(
Opt2)
160608.04
ben2_
hr
Sport
High
(
Opt2)
2147686.91
ben2_
hs
Sub
High
(
Opt2)
873707.71
tot1_
l
Total
Benefits
­
Low
(
Opt
1)
426651.68
tot1_
h
Total
Benefits
­
High
(
Opt
1)
2320985.11
tot2_
l
Total
Benefits
­
Low
(
Opt
2)
555403.42
tot2_
h
Total
Benefits
­
High
(
Opt
2)
3021394.62
mid1r
788516.07
mid1s
320778.28
mid2r
1026468.01
mid2s
417580.89
mid1
Mid
Benefits
(
Opt1)
1109294.36
mid2
Mid
Benefits
(
Opt2)
1444048.90
expspt
Exposed
Sport
Pop
(
15­
45yrs)
93849.71
expsub
Exposed
Sub
Pop
(
15­
45yrs)
4691.98
                                                            
178
Integrated
Exposure
Uptake
Biokinetic
Model
(
IEUBK)
The
model
used
a
range
of
lead
concentrations
in
fish
tissue
to
estimate
the
corresponding
blood
lead
level
associated
with
a
given
lead
concentration
in
the
fish
tissue.
179
"
Gen4.
txt"
Output
data
set
from
the
IEUBK
model
run.
See
DCN
37746
for
data
set.
180
"
Create
Lookup
Table.
sas"
Takes
the
output
file
from
the
IEUBK
model
run
and
generates
another
SAS
program
which
when
run
creates
a
format
used
to
transform
lead
concentrations
in
fish
tissue
into
blood
lead
levels.
181
/*
Program:
Create
Lookup
Table.
sas
Author:
Stuart
Smith,
Abt
Associates
Inc.
Date:
05/
18/
2000
Revised:
03/
28/
2002
This
program
reads
in
the
output
file
from
the
IEUBK
model
and
generates
a
SAS
data
set
with
concentrations
and
predicted
blood
lead
levels.
A
second
file
is
produced
which
contains
row
numbers
mapped
to
concentrations
values
for
lookup
by
the
benefits
program.
*/

libname
mpm2
'
H:\
ENVR\
Triton05
MP&
M\
Benefits\
MP&
M
Phase
2
Analysis\
Data\
SAS
Sets
for
Analysis';
/*
Static
Data
Sets
*/
filename
ubk
'
H:\
ENVR\
IEUBK\
Gen4.
txt';
/*
IEUBK
output
file
*/

data
readin;
infile
ubk
firstobs=
11;
input
id
1­
8
conc
56­
61
bloodPb
72­
76;
run;

data
mpm2.
ubklook4;
set
readin;
run;

/*
Generate
the
format
sas
file
*/
data
frmt;
set
readin;
file
'
H:\
ENVR\
IEUBK\
cnc_
fmt3.
sas';
put
conc
'
=
'
id;
run;

/*
End
Create
Lookup
Table.
sas
*/
182
"
Ublook4.
sd2"
Lookup
table
data
set.
See
DCN
37669
for
data
set.
183
"
Cnc_
fmt3.
sas"
Creates
a
library
format
for
transforming
lead
concentrations
in
fish
tissue
into
blood
lead
levels.
See
Appendix
B:
Programs
and
Estimation
Results
for
the
Proposed
Option
National
Benefits
Analysis,
DCN
20479
for
program
code.
184
"
Child
Lead
Benefits
(
Sub
16).
sas"
Using
data
from
the
lead
specific
data
set
and
results
of
the
IEUBK
lead
model,
child
blood
lead
levels
are
estimated
based
on
fish
consumption
in
recreational
and
subsistence
fishing
families.
185
/*
Program:
Child
Lead
Benefits
(
Sub
16).
sas
Author:
Stuart
Smith,
Abt
Associates,
Inc.
Date:
06/
12/
2000
Updated:
11/
27/
2002
This
program
estimates
benefits
from
reduced
consumption
of
fish
tissue
containing
lead.
Reductions
in
MP&
M
facility
lead
loadings
result
in
lower
probabilties
of
lead
related
illnesses.
*/

libname
library
'
H:\
ENVR\
Triton05
MP&
M\
Benefits\
MP&
M
Phase
2
Analysis\
Data\
SAS
Sets
for
Analysis\';

%
let
tbl_
path
=
%
sysfunc(
pathname(
rundat));

title2
'
Child
Lead
Related
Benefits
(
Sub
16)';

data
lead;
set
rundat.
lead;

/*
Combine
the
exposed
populations,
recreational
and
subsistence;
fresh
and
salt
water
*/

expspt
=
fwsptpop
+
swsptpop;
expsub
=
fwsubpop
+
swsubpop;

/*
Calculate
the
lead
concentration
in
fish
tissue
available
for
intake
*/
/*
=
instream
conc
(
ug/
L)*
biocon
factor
(
kg/
L)*
ingestion
rate(
kg/
day)
*/

bcncspt
=
cnc_
base*
49*
0.00603;
t1cncspt
=
cnc_
trt1*
49*
0.00603;
t2cncspt
=
cnc_
trt2*
49*
0.00603;

bcncsub
=
cnc_
base*
49*
0.03033;
t1cncsub
=
cnc_
trt1*
49*
0.03033;
t2cncsub
=
cnc_
trt2*
49*
0.03033;

keep
reachnmb
expspt
expsub
bcncspt
t1cncspt
t2cncspt
bcncsub
t1cncsub
t2cncsub
event_
wt;
run;

proc
print;
var
reachnmb
expspt
expsub
bcncspt
t1cncspt
t2cncspt
bcncsub
t1cncsub
t2cncsub
event_
wt;
title3
'
Exposed
Pops
and
Pb
conc
in
fish
tissue';
quit;

data
lead2;
set
lead;

/*
Determine
sport
blood
levels
*/
/*
cnc_
fmt.
is
a
special
format
which
translates
the
concentration
in
the
fish
tissue
into
an
index
value
for
a
lookup
table
of
corresponding
blood
lead
levels
*/
186
/*
Get
base
pbp
level
*/
lookup
=
input(
put(
round(
bcncspt,.
1),
cnc_
fmt.),
4.0);
if
lookup
=
9999
then
lookup
=
1;
set
mpm2.
ubklook4
point
=
lookup;
pb_
bspt
=
bloodPb;

/*
Get
t1
pbp
level
*/
lookup
=
input(
put(
round(
t1cncspt,.
1),
cnc_
fmt.),
4.0);
if
lookup
=
9999
then
lookup
=
1;
set
mpm2.
ubklook4
point
=
lookup;
pb_
1spt
=
bloodPb;

/*
Get
t2
pbp
level
*/
lookup
=
input(
put(
round(
t2cncspt,.
1),
cnc_
fmt.),
4.0);
if
lookup
=
9999
then
lookup
=
1;
set
mpm2.
ubklook4
point
=
lookup;
pb_
2spt
=
bloodPb;

/*
Determine
subsistence
blood
levels
*/
/*
Get
base
pbp
level
*/
lookup
=
input(
put(
round(
bcncsub,.
1),
cnc_
fmt.),
4.0);
if
lookup
=
9999
then
lookup
=
1;
set
mpm2.
ubklook4
point
=
lookup;
pb_
bsub
=
bloodPb;

/*
Get
t1
pbp
level
*/
lookup
=
input(
put(
round(
t1cncsub,.
1),
cnc_
fmt.),
4.0);
if
lookup
=
9999
then
lookup
=
1;
set
mpm2.
ubklook4
point
=
lookup;
pb_
1sub
=
bloodPb;

/*
Get
t2
pbp
level
*/
lookup
=
input(
put(
round(
t2cncsub,.
1),
cnc_
fmt.),
4.0);
if
lookup
=
9999
then
lookup
=
1;
set
mpm2.
ubklook4
point
=
lookup;
pb_
2sub
=
bloodPb;

run;

proc
print;
var
reachnmb
pb_
bspt
pb_
1spt
pb_
2spt
pb_
bsub
pb_
1sub
pb_
2sub;
title3
'
Blood
lead
levels';
quit;

data
lead3;
set
lead2;

kidspct
=
0.1177;
/*
Percent
of
kids
aged
0­
7,
U.
S.
Statistical
Abstract
1997
*/

popspt
=
expspt*
kidspct;
popsub
=
expsub*
kidspct;

GM1_
spt
=
pb_
bspt
­
pb_
1spt;
187
GM2_
spt
=
pb_
bspt
­
pb_
2spt;

GM1_
sub
=
pb_
bsub
­
pb_
1sub;
GM2_
sub
=
pb_
bsub
­
pb_
2sub;

/*
Avoided
lost
IQ
points
*/
avIQ1spt
=
(
GM1_
spt)*
0.25*(
popspt/
7);
avIQ2spt
=
(
GM2_
spt)*
0.25*(
popspt/
7);

avIQ1sub
=
(
GM1_
sub)*
0.25*(
popsub/
7);
avIQ2sub
=
(
GM2_
sub)*
0.25*(
popsub/
7);

IQ1_
spt
=
avIQ1spt
*
9419;
IQ2_
spt
=
avIQ2spt
*
9419;

IQ1_
sub
=
avIQ1sub
*
9419;
IQ2_
sub
=
avIQ2sub
*
9419;

/*
Fewer
children
with
IQ
below
70
*/

if
GM1_
spt
>
0
then
do;
num1spt
=
(
70
­
(
100
+
0.25*
GM1_
spt))/
15;
sv701spt
=
0.02275
­
cdf('
NORMAL',
num1spt);
b70_
1spt
=
sv701spt
*
(
popspt/
7)
*
58012;
end;
else
do;
sv701spt
=
0;
b70_
1spt
=
0;
end;

if
GM2_
spt
>
0
then
do;
num2spt
=
(
70
­
(
100
+
0.25*
GM2_
spt))/
15;
sv702spt
=
0.02275
­
cdf('
NORMAL',
num2spt);
b70_
2spt
=
sv702spt
*
(
popspt/
7)
*
58012;
end;
else
do;
sv702spt
=
0;
b70_
2spt
=
0;
end;

if
GM1_
sub
>
0
then
do;
num1sub
=
(
70
­
(
100
+
0.25*
GM1_
sub))/
15;
sv701sub
=
0.02275
­
cdf('
NORMAL',
num1sub);
b70_
1sub
=
sv701sub
*
(
popsub/
7)
*
58012;
end;
else
do;
sv701sub
=
0;
b70_
1sub
=
0;
end;

if
GM2_
sub
>
0
then
do;
num2sub
=
(
70
­
(
100
+
0.25*
GM2_
sub))/
15;
sv702sub
=
0.02275
­
cdf('
NORMAL',
num2sub);
188
b70_
2sub
=
sv702sub
*
(
popsub/
7)
*
58012;
end;
else
do;
sv702sub
=
0;
b70_
2sub
=
0;
end;

/*
Number
of
cases
of
IQ<
70
saved
*/

c70_
1spt
=
sv701spt
*
(
popspt/
7);
c70_
2spt
=
sv702spt
*
(
popspt/
7);
c70_
1sub
=
sv701sub
*
(
popsub/
7);
c70_
2sub
=
sv702sub
*
(
popsub/
7);

check1
=
pdf('
LOGNORMAL',
20,
pb_
bspt,
2.09);
check2
=
pdf('
LOGNORMAL',
20,
pb_
bsub,
2.09);

spt1_
20=(
check1
­
pdf('
LOGNORMAL',
20,
pb_
1spt,
2.09))*
0.2*(
popspt/
7)*
16485;
spt2_
20=(
check1
­
pdf('
LOGNORMAL',
20,
pb_
2spt,
2.09))*
0.2*(
popspt/
7)*
16485;
sub1_
20=(
check2
­
pdf('
LOGNORMAL',
20,
pb_
1sub,
2.09))*
0.2*(
popsub/
7)*
16485;
sub2_
20=(
check2
­
pdf('
LOGNORMAL',
20,
pb_
2sub,
2.09))*
0.2*(
popsub/
7)*
16485;

red201sp=(
check1
­
pdf('
LOGNORMAL',
20,
pb_
1spt,
2.09))*
0.2*(
popspt/
7);
red202sp=(
check1
­
pdf('
LOGNORMAL',
20,
pb_
2spt,
2.09))*
0.2*(
popspt/
7);
red201sb=(
check2
­
pdf('
LOGNORMAL',
20,
pb_
1sub,
2.09))*
0.2*(
popsub/
7);
red202sb=(
check2
­
pdf('
LOGNORMAL',
20,
pb_
2sub,
2.09))*
0.2*(
popsub/
7);
run;

proc
means
sum
data=
lead3;
var
avIQ1spt
avIQ1sub
avIQ2spt
avIQ2sub
IQ1_
spt
IQ1_
sub
IQ2_
spt
IQ2_
sub
b70_
1spt
b70_
1sub
b70_
2spt
b70_
2sub
sv701spt
sv702spt
sv701sub
sv702sub
c70_
1spt
c70_
2spt
c70_
1sub
c70_
2sub
spt1_
20
spt2_
20
sub1_
20
sub2_
20
red201sp
red202sp
red201sb
red202sb
popspt
popsub;
title3
'
Benefits
(
sample)';
quit;

proc
means
sum
data=
lead3;
weight
event_
wt;
var
avIQ1spt
avIQ1sub
avIQ2spt
avIQ2sub
IQ1_
spt
IQ1_
sub
IQ2_
spt
IQ2_
sub
b70_
1spt
b70_
1sub
b70_
2spt
b70_
2sub
sv701spt
sv702spt
sv701sub
sv702sub
c70_
1spt
c70_
2spt
c70_
1sub
c70_
2sub
spt1_
20
spt2_
20
sub1_
20
sub2_
20
red201sp
red202sp
red201sb
red202sb
popspt
popsub;
output
out
=
rundat.
chld_
ld
sum
=
avIQ1spt
avIQ1sub
avIQ2spt
avIQ2sub
IQ1_
spt
IQ1_
sub
IQ2_
spt
IQ2_
sub
189
b70_
1spt
b70_
1sub
b70_
2spt
b70_
2sub
sv701spt
sv702spt
sv701sub
sv702sub
c70_
1spt
c70_
2spt
c70_
1sub
c70_
2sub
spt1_
20
spt2_
20
sub1_
20
sub2_
20
red201sp
red202sp
red201sb
red202sb
popspt
popsub;
title3
'
Benefits
(
national)';
quit;

data
rundat.
chld_
tbl
(
keep=
gender
categ
type
exppop
case1
case2
benlow1
benlow2
benmid1
benmid2
benhigh1
benhigh2);
set
rundat.
chld_
ld;

length
gender
$
50
categ
$
50
type
$
50;

array
IQ[
8]
IQ1_
spt
avIQ1spt
IQ2_
spt
avIQ2spt
IQ1_
sub
avIQ1sub
IQ2_
sub
avIQ2sub;
array
RD[
8]
b70_
1spt
c70_
1spt
b70_
2spt
c70_
2spt
b70_
1sub
c70_
1sub
b70_
2sub
c70_
2sub;
array
PB[
8]
spt1_
20
red201sp
spt2_
20
red202sp
sub1_
20
red201sb
sub2_
20
red202sb;

gender
=
"
Children";

if
_
n_
=
1
then
do;
do
i
=
1
to
6;
if
i
=
1
then
do;
categ
=
"
Avoided
IQ
Loss";
type
=
"
Sport";
case1
=
IQ[
2];
case2
=
IQ[
4];
benlow1
=
IQ[
1];
benlow2
=
IQ[
3];
benmid1
=
benlow1;
benmid2
=
benlow2;
benhigh1
=
benlow1;
benhigh2
=
benlow2;
output;
end;
if
i
=
2
then
do;
categ
=
"
Avoided
IQ
Loss";
type
=
"
Sub";
case1
=
IQ[
6];
case2
=
IQ[
8];
benlow1
=
IQ[
5];
benlow2
=
IQ[
7];
benmid1
=
benlow1;
benmid2
=
benlow2;
benhigh1
=
benlow1;
benhigh2
=
benlow2;
output;
end;
if
i
=
3
then
do;
categ
=
"
Reduced
IQ
<
70";
type
=
"
Sport";
case1
=
RD[
2];
case2
=
RD[
4];
benlow1
=
RD[
1];
benlow2
=
RD[
3];
benmid1
=
benlow1;
benmid2
=
benlow2;
benhigh1
=
benlow1;
benhigh2
=
benlow2;
output;
end;
if
i
=
4
then
do;
categ
=
"
Reduced
IQ
<
70";
type
=
"
Sub";
190
case1
=
RD[
6];
case2
=
RD[
8];
benlow1
=
RD[
5];
benlow2
=
RD[
7];
benmid1
=
benlow1;
benmid2
=
benlow2;
benhigh1
=
benlow1;
benhigh2
=
benlow2;
output;
end;
if
i
=
5
then
do;
categ
=
"
Reduced
Pb
>
20";
type
=
"
Sport";
case1
=
PB[
2];
case2
=
PB[
4];
benlow1
=
PB[
1];
benlow2
=
PB[
3];
benmid1
=
benlow1;
benmid2
=
benlow2;
benhigh1
=
benlow1;
benhigh2
=
benlow2;
output;
end;
if
i
=
6
then
do;
categ
=
"
Reduced
Pb
>
20";
type
=
"
Sub";
case1
=
PB[
6];
case2
=
PB[
8];
benlow1
=
PB[
5];
benlow2
=
PB[
7];
benmid1
=
benlow1;
benmid2
=
benlow2;
benhigh1
=
benlow1;
benhigh2
=
benlow2;
output;
end;
end;
end;
run;

data
rundat.
chld_
all;
set
rundat.
neo_
tbl
rundat.
chld_
tbl;
run;

proc
summary
data=
rundat.
chld_
all;
var
benlow1
benmid1
benhigh1
benlow2
benmid2
benhigh2;
output
out
=
rundat.
chld_
tot
(
drop=
_
type_
_
freq_)
sum
=
benlow1
benmid1
benhigh1
benlow2
benmid2
benhigh2;
run;

data
exlchld
(
keep=
titlecol
col1­
col11
label="
Child
Lead
Benefits
­
Weighted");
set
rundat.
chld_
all
rundat.
chld_
tot;
length
titlecol
$
50
col1
­
col11
$
128;

if
_
n_
=
1
then
do;
titlecol
=
"
Table:
Child
Lead
Benefits,
Weighted
Estimates";
output;
titlecol
=
"
Run
on
&
sysdate";
output;
titlecol
=
"
";
output;
col4
=
"
Option
1";
col8
=
"
Option
2";
output;
col2
=
"
Category";
col3
=
"
Type";
col4
=
"
Reduced
Cases";
col5
=
"
Low";
col6
=
"
Mid";
191
col7
=
"
High";
col8
=
"
Reduced
Cases";
col9
=
"
Low";
col10
=
"
Mid";
col11
=
"
High";
output;
end;

if
_
n_
=
9
then
col1
=
"
Total";
else
col1
=
gender;

col2
=
trim(
categ);
col3
=
trim(
type);
col4
=
trim(
case1);
col5
=
trim(
benlow1);
col6
=
trim(
benmid1);
col7
=
trim(
benhigh1);
col8
=
trim(
case2);
col9
=
trim(
benlow2);
col10
=
trim(
benmid2);
col11
=
trim(
benhigh2);
output;
run;

proc
export
data
=
exlchld
outfile
=
"
C:\
Output
Files\
Child
Lead.
xls"
dbms=
excel2000
replace;
run;

/*
End
Child
Lead
Benefits
(
Sub
16).
sas
*/
192
Program
Output
193
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
99
Child
Lead
Related
Benefits
(
Sub
16)
Benefits
(
national)
10:
59
Friday,
February
7,
2003
The
MEANS
Procedure
Variable
Sum
                        
avIQ1spt
0
avIQ1sub
36.1869199
avIQ2spt
0
avIQ2sub
36.8381039
IQ1_
spt
0
IQ1_
sub
340844.60
IQ2_
spt
0
IQ2_
sub
346978.10
b70_
1spt
0
b70_
1sub
7501.26
b70_
2spt
0
b70_
2sub
7635.65
sv701spt
0
sv702spt
0
sv701sub
0.0076549
sv702sub
0.0090608
c70_
1spt
0
c70_
2spt
0
c70_
1sub
0.1293053
c70_
2sub
0.1316220
spt1_
20
0
spt2_
20
0
sub1_
20
­
482.0718994
sub2_
20
­
488.6185253
red201sp
0
red202sp
0
red201sb
­
0.0292431
red202sb
­
0.0296402
popspt
49026.28
popsub
2451.05
                        
194
Recreational
Benefits
195
Recreational
Fishing
196
"
Human
Health
AWQC
Exceedences
(
Sub
2).
sas"
The
number
of
human
health
based
AWQC
exceedences
for
each
RF1
reach
are
estimated
and
output
to
a
data
set.
See
Human
Health
Benefits
Cancer
from
Fish
Consumption
for
program
code
and
output.
197
"
Aquatic
Life
AWQC
Exceedences
(
Sub
3).
sas"
The
number
of
aquatic
life
based
AWQC
exceedences
for
each
RF1
reach
are
estimated
and
output
to
a
data
set.
198
/*
Program:
Aquatic
Life
AWQC
(
Sub
3).
sas
Author:
Stuart
Smith
(
based
on
Elena
Besedin,
Rob
Sartain)
,
Abt.
Associates,
Inc.
Date
Modified:
10/
31/
2002
(
1)
IDENTIFIES
MP&
M
DISCHARGE
REACHES
IN
WHICH
POLLUTANT
CONCENTRATIONS
EXCEED
THE
AWQC
VALUES
FOR
AQUATIC
LIFE;
(
2)
EXTRAPOLATES
THE
RESULTS
TO
THE
POPULATION
LEVEL
BY
USING
DIFFERENTIAL
WEIGHTING.

THE
TOTAL
NUMBER
OF
EXCEEDENCE
EVENTS
IS
THEN
ESTIMATED
BY
SUMMING
OVER
THE
RESULTS
FROM
THE
FIRST
AND
SECOND
RUN.
*/

title2
'
Output
from
Aquatic
Life
(
Sub
3)';

/*
DISCHARGE
EVENTS,
ASSOCIATED
LOADINGS
AND
WEIGHTS
HAVE
BEEN
CALCULATED
BY
ANOTHER
PROGRAM.
ALL
UNIT
CONVERSIONS
HAVE
OCCURRED.
SEE
"
Generate
Discharge
Events
and
Loadings
(
Sub
1).
sas"
FOR
SPECIFIC
PROGRAM
INFORMATION.
*/

/*
PULL
TOGETHER
THE
EVENTS
AND
CHEMICAL
SPECIFIC
PARAMETERS
*/

Proc
sort
data
=
mpm2.
chemdata;
by
casno;
quit;

Proc
sql;
create
table
stream
as
select
reachnmb,
event_
ld.
casno,
evnt_
flo,
base,
treat1,
treat2,
event_
wt,
segl,
mnflo
as
mean_
flo,
svten
as
flo7q10,
acute
as
adf,
chronic
as
cdf,
dcp,
wbtype,
biodegre
as
decay,
surface,
drainage,
volume
from
rundat.
event_
ld,
mpm2.
chemdata
where
event_
ld.
casno
=
chemdata.
casno
order
by
reachnmb,
casno;
quit;

/******************************************************************************/
/*
*/
/*
FRESHWATER
REACHES
­
CONCENTRATIONS
AND
AWQC
EXCEEDENCES
*/
/*
*/
/******************************************************************************/

/*
Calculate
chemical
concentrations
in
lakes
*/

data
Lake;
set
stream;
if
wbtype
=
'
lake';
if
decay;

keep
reachnmb
casno
base
treat1
treat2
adf
cdf
restime
decay
event_
wt;

/*
drainage
area
and
surface
area
available
*/
if
surface
^=
.
and
drainage
^=
.
then
do;
num
=
drainage;
/*
drainage
area
in
sq.
miles
*/
199
denom
=
surface*
0.0015625;
/*
convert
surface
area
from
acres
to
sq.
miles
*/
logdays
=
4.077
­
(
1.177*
log10(
num/
denom));
restime
=
10**
logdays;
time1
=
restime*
24;
/*
CONVERT
HYDRAULIC
TIME
FROM
DAYS
INTO
HOURS
*/
cnc_
aqcb
=
(
base/
evnt_
flo)/(
1+
time1*
decay);
cnc_
aqc1
=
(
treat1/
evnt_
flo)/(
1+
time1*
decay);
cnc_
aqc2
=
(
treat2/
evnt_
flo)/(
1+
time1*
decay);
good
=
1;
end;

/*
missing
area
measure(
s),
do
end­
of­
pipe
value
=
loadings/
flow
*/
else
do;
cnc_
aqcb
=
(
base/
evnt_
flo);
cnc_
aqc1
=
(
treat1/
evnt_
flo);
cnc_
aqc2
=
(
treat2/
evnt_
flo);
end;

cnc_
aqab
=
cnc_
aqcb;
cnc_
aqa1
=
cnc_
aqc1;
cnc_
aqa2
=
cnc_
aqc2;

keep
reachnmb
casno
cnc_
aqcb
cnc_
aqc1
cnc_
aqc2
cnc_
aqab
cnc_
aqa1
cnc_
aqa2
event_
wt;
run;

/*
Great
Lakes
reaches
*/

data
BigLake;
set
stream;
if
wbtype
=
'
glake';

if
cdf
^=.
then
do;
cnc_
aqcb
=
base/(
evnt_
flo*
cdf);
cnc_
aqc1
=
treat1/(
evnt_
flo*
cdf);
cnc_
aqc2
=
treat2/(
evnt_
flo*
cdf);
end;
else
if
dcp^=.
then
do;
benchld=
10000*
907.2;
/*
benchmark
load
is
10000
per
year;
907.2
is
coversion
factor
from
kg
to
ton*/
cnc_
aqcb=((
base/
10**
9)*
365*
dcp)/
benchld;
cnc_
aqc1=((
treat1/
10**
9)*
365*
dcp)/
benchld;
cnc_
aqc2=((
treat2/
10**
9)*
365*
dcp)/
benchld;
end;
else
do;
cnc_
aqcb
=
.;
cnc_
aqc1
=
.;
cnc_
aqc2
=
.;
end;
cnc_
aqab
=
cnc_
aqcb;
cnc_
aqa1
=
cnc_
aqc1;
cnc_
aqa2
=
cnc_
aqc2;

if
cnc_
aqcb=.
then
delete;
200
keep
reachnmb
casno
cnc_
aqcb
cnc_
aqc1
cnc_
aqc2
cnc_
aqab
cnc_
aqa1
cnc_
aqa2
event_
wt;
run;

/*
Stream
reaches
*/
/*
Calculate
1Q10.
Calculate
in­
stream
concentrations
based
on
7Q10
and
1Q10*/

data
stream2;
set
stream;
if
wbtype
=
'
stream';

/*
Account
for
missing
7q10
data,
averge
*/
if
flo7q10
=
.
or
flo7q10
=
0
then
flo7q10
=
909.7836;
if
mean_
flo
=
.
or
mean_
flo
=
0
then
mean_
flo
=
6711.2411;

/*
Convert
flo7q10
from
ft3/
sec
to
l/
day
using
conversion
factor
2446576
*/

svnq10
=
flo7q10*
2446576;

/*
Calculate
1q10
flow
*/

flo1q10=
0.843*(
svnq10**
0.993);

/*
all
flows
in
l/
day
*/

cnc_
aqcb
=
base/(
evnt_
flo+
svnq10);
cnc_
aqc1
=
treat1/(
evnt_
flo+
svnq10);
cnc_
aqc2
=
treat2/(
evnt_
flo+
svnq10);
cnc_
aqab
=
base/(
evnt_
flo+
flo1q10);
cnc_
aqa1
=
treat1/(
evnt_
flo+
flo1q10);
cnc_
aqa2
=
treat2/(
evnt_
flo+
flo1q10);

keep
reachnmb
casno
cnc_
aqcb
cnc_
aqc1
cnc_
aqc2
cnc_
aqab
cnc_
aqa1
cnc_
aqa2
event_
wt;
run;

proc
sort
data=
stream2;
by
reachnmb
casno;
quit;

/*
Combine
small
and
large
lakes
with
streams
*/

data
freshwat;
set
stream2
BigLake
Lake;
run;

proc
sort
data=
freshwat;
by
reachnmb
casno;
quit;

/*
Compare
in­
stream
pollutant
concentrations
with
freshwater
AWQCs
for
aquatic
life
*/
proc
sql;

/*
Merge
in
freshwater
aquatic
life
limits.
*/
201
create
table
awqc1
as
select
reachnmb,
freshwat.
casno,
chemical,
cnc_
aqcb,
cnc_
aqc1,
cnc_
aqc2,
cnc_
aqab,
cnc_
aqa1,
cnc_
aqa2,
faval__
i
as
faval,
fcval__
i
as
fcval,
event_
wt
from
freshwat,
mpm2.
chemdata
where
freshwat.
casno
=
chemdata.
casno
order
by
reachnmb,
casno;
quit;

/*
Compare
concentrations
to
awqc
limits
and
determine
exceedences
*/

data
stream4;
set
awqc1;

if
cnc_
aqcb
>
fcval
and
fcval
>
0
then
chronicb
=
1;
if
cnc_
aqc1
>
fcval
and
fcval
>
0
then
chronic1
=
1;
if
cnc_
aqc2
>
fcval
and
fcval
>
0
then
chronic2
=
1;
if
cnc_
aqcb
>
faval
and
faval
>
0
then
acuteb
=
1;
if
cnc_
aqc1
>
faval
and
faval
>
0
then
acute1
=
1;
if
cnc_
aqc2
>
faval
and
faval
>
0
then
acute2
=
1;

keep
reachnmb
casno
chemical
chronicb
chronic1
chronic2
acuteb
acute1
acute2
event_
wt;
run;

/***********************************************************************/
/*
END
FRESHWATER
REACHES
*/
/***********************************************************************/

/******************************************************************************/
/*
*/
/*
SALTWATER
REACHES
­
CONCENTRATIONS
AND
AWQC
EXCEEDENCES
*/
/*
*/
/******************************************************************************/

/*
Calculate
pollutant
concentrations
in
Oceans
*/

data
marine;
set
stream;
if
wbtype
=
'
bay';

if
cdf
^=.
then
do;
cnc_
aqcb
=
base/(
evnt_
flo*
cdf);
cnc_
aqc1
=
treat1/(
evnt_
flo*
cdf);
cnc_
aqc2
=
treat2/(
evnt_
flo*
cdf);
end;
else
if
dcp
^=.
then
do;
benchld=
10000*
907.2;
/*
benchmark
load
is
10000
per
year;
907.2
is
coversion
factor
from
kg
to
ton
*/

/*
facility
loadings
were
given
in
ug/
day
*/

cnc_
aqcb=((
base/
10**
9)*
365*
dcp)/
benchld;
202
cnc_
aqc1=((
treat1/
10**
9)*
365*
dcp)/
benchld;
cnc_
aqc2=((
treat2/
10**
9)*
365*
dcp)/
benchld;
end;
else
do;
cnc_
aqcb
=
.;
cnc_
aqc1
=
.;
cnc_
aqc2
=
.;
end;

cnc_
aqab
=
cnc_
aqcb;
cnc_
aqa1
=
cnc_
aqc1;
cnc_
aqa2
=
cnc_
aqc2;

if
cnc_
aqcb=.
then
delete;
keep
reachnmb
casno
cnc_
aqcb
cnc_
aqc1
cnc_
aqc2
cnc_
aqab
cnc_
aqa1
cnc_
aqa2
event_
wt;
run;

/*
Get
AWQC
limits
for
marine
environment
*/

proc
sql;

/*
Merge
in
Aquatic
life
saltwater
awqc
limits
*/

create
table
marine1
as
select
reachnmb,
marine.
casno,
chemical,
cnc_
aqcb,
cnc_
aqc1,
cnc_
aqc2,
cnc_
aqab,
cnc_
aqa1,
cnc_
aqa2,
event_
wt,
maval__
i
as
maval,
mcval__
i
as
mcval,
count(
distinct
reachnmb)
as
reaches
from
marine,
mpm2.
chemdata
where
marine.
casno
=
chemdata.
casno
order
by
reachnmb,
casno;
quit;

/*
Compare
concentrations
to
awqc
limits
and
determine
exceedences
*/

data
marine2;
set
marine1;
if
cnc_
aqcb
>
mcval
and
mcval
>
0
then
chronicb
=
1;
if
cnc_
aqc1
>
mcval
and
mcval
>
0
then
chronic1
=
1;
if
cnc_
aqc2
>
mcval
and
mcval
>
0
then
chronic2
=
1;
if
cnc_
aqcb
>
maval
and
maval
>
0
then
acuteb
=
1;
if
cnc_
aqc1
>
maval
and
maval
>
0
then
acute1
=
1;
if
cnc_
aqc2
>
maval
and
maval
>
0
then
acute2
=
1;

keep
reachnmb
casno
chemical
chronicb
chronic1
chronic2
acuteb
acute1
acute2
reaches
event_
wt;
run;

/*
Combine
exceedences
from
fresh
and
saltwater
*/
data
allreach;
set
marine2
stream4;

keep
reachnmb
casno
chemical
chronicb
chronic1
chronic2
acuteb
acute1
acute2
reaches
event_
wt;
run;
203
proc
sql;

/*
Estimate
AWQCs
exceedance
by
chemicals
on
a
sample
and
national
basis*/
/*
awt
replaced
with
1
*/
create
table
chm_
awqc
as
select
chemical,
sum(
chronicb)
as
crb,
sum(
chronic1)
as
cr1,
sum(
chronic2)
as
cr2,
sum(
acuteb)
as
acb,
sum(
acute1)
as
ac1,
sum(
acute2)
as
ac2,
sum(
chronicb*
event_
wt*
1)
as
ntlbw,
sum(
chronic1*
event_
wt*
1)
as
ntl1w,
sum(
chronic2*
event_
wt*
1)
as
ntl2w,
sum(
acuteb*
event_
wt*
1)
as
ntlbo,
sum(
acute1*
event_
wt*
1)
as
ntl1o,
sum(
acute2*
event_
wt*
1)
as
ntl2o,
case
when
sum(
chronicb)
>=
1
then
1
else
0
end
as
chemcrb,
case
when
sum(
chronic1)
>=
1
then
1
else
0
end
as
chemcr1,
case
when
sum(
chronic2)
>=
1
then
1
else
0
end
as
chemcr2,
case
when
sum(
acuteb)
>=
1
then
1
else
0
end
as
chemacb,
case
when
sum(
acute1)
>=
1
then
1
else
0
end
as
chemac1,
case
when
sum(
acute2)
>=
1
then
1
else
0
end
as
chemac2
from
allreach
where
chronicb>
0
or
acuteb>
0
group
by
chemical
order
by
chemical;

/*
Estimate
aquatic
life
AWQC
Exceedences
by
option/
reach
*/

create
table
aq_
life2
as
select
allreach.
reachnmb,
sum(
chronicb)
as
test_
cb,
sum(
chronic1)
as
test_
c1,
sum(
chronic2)
as
test_
c2,
sum
(
acuteb)
as
test_
ab,
sum(
acute1)
as
test_
a1,
sum
(
acute2)
as
test_
a2,
sum(
chronicb*
event_
wt*
1)
as
ntlb1,
sum(
chronic1*
event_
wt*
1)
as
ntnl11,
sum(
chronic2*
event_
wt*
1)
as
ntnl21,
sum(
acuteb
*
event_
wt*
1)
as
ntlb2,
sum(
acute1*
event_
wt*
1)
as
ntnl12,
sum(
acute2*
event_
wt*
1)
as
ntnl22,
case
when
sum(
chronicb)
>=
1
then
1
else
0
end
as
rchcrb,
case
when
sum(
chronic1)
>=
1
then
1
else
0
end
as
rchcr1,
case
when
sum(
chronic2)
>=
1
then
1
else
0
end
as
rchcr2,
case
when
sum(
acuteb)
>=
1
then
1
else
0
end
as
rchacb,
case
when
sum(
acute1)
>=
1
then
1
else
0
end
as
rchac1,
case
when
sum(
acute2)
>=
1
then
1
else
0
end
as
rchac2,
sum(
event_
wt)
as
reachwt
from
allreach
where
chronicb>
0
or
acuteb>
0
group
by
reachnmb
order
by
reachnmb;

/*
CALCULATE
THE
TOTAL
NUMBER
OF
AFFECTED
REACHES
ON
A
NATIONAL
BASIS
awt
replaced
with
a
1
*/
create
table
rch1
as
select
204
sum(
event_
wt)
as
wght1,
reachnmb,
chemical
from
allreach
where
chronicb
>
0
group
by
reachnmb,
chemical
order
by
reachnmb,
chemical;

create
table
chrnb
as
select
max(
wght1)
as
chrnc_
b,
reachnmb
from
rch1
group
by
reachnmb
order
by
reachnmb;

create
table
rch2
as
select
sum(
event_
wt)
as
wght2,
reachnmb,
chemical
from
allreach
where
acuteb
>
0
group
by
reachnmb,
chemical
order
by
reachnmb,
chemical;

create
table
actb
as
select
max(
wght2)
as
acutr_
b,
reachnmb
from
rch2
group
by
reachnmb
order
by
reachnmb;

create
table
rch3
as
select
sum(
event_
wt)
as
wght3,
reachnmb,
chemical
from
allreach
where
chronic1
>
0
group
by
reachnmb,
chemical
order
by
reachnmb,
chemical;

create
table
chrn1
as
select
max(
wght3)
as
chrnc_
1,
reachnmb
from
rch3
group
by
reachnmb
order
by
reachnmb;

create
table
rch4
as
select
sum(
event_
wt)
as
wght4,
reachnmb,
chemical
from
allreach
where
acute1
>
0
group
by
reachnmb,
chemical
order
by
reachnmb,
chemical;

create
table
act1
as
select
max(
wght4)
as
acutr_
1,
reachnmb
from
rch4
group
by
reachnmb
order
by
reachnmb;
205
create
table
rch5
as
select
sum(
event_
wt)
as
wght5,
reachnmb,
chemical
from
allreach
where
chronic2
>
0
group
by
reachnmb,
chemical
order
by
reachnmb,
chemical;

create
table
chrn2
as
select
max(
wght5)
as
chrnc_
2,
reachnmb
from
rch5
group
by
reachnmb
order
by
reachnmb;

create
table
rch6
as
select
sum(
event_
wt)
as
wght6,
reachnmb,
chemical
from
allreach
where
acute2
>
0
group
by
reachnmb,
chemical
order
by
reachnmb,
chemical;

create
table
act2
as
select
max(
wght6)
as
acutr_
2,
reachnmb
from
rch6
group
by
reachnmb
order
by
reachnmb;

create
table
rch7
as
select
sum(
event_
wt)
as
wght7,
reachnmb,
chemical
from
allreach
where
chronicb
>
0
or
acuteb
>
0
group
by
reachnmb,
chemical
order
by
reachnmb,
chemical;

create
table
multi_
b
as
select
max(
wght7)
as
multi_
b,
reachnmb
from
rch7
group
by
reachnmb
order
by
reachnmb;

create
table
rch8
as
select
sum(
event_
wt)
as
wght8,
reachnmb,
chemical
from
allreach
where
chronic1
>
0
or
acute1
>
0
group
by
reachnmb,
chemical
order
by
reachnmb,
chemical;

create
table
multi_
1
as
select
max(
wght8)
as
multi_
1,
reachnmb
from
rch8
206
group
by
reachnmb
order
by
reachnmb;

create
table
rch9
as
select
sum(
event_
wt)
as
wght9,
reachnmb,
chemical
from
allreach
where
chronic2
>
0
or
acute2
>
0
group
by
reachnmb,
chemical
order
by
reachnmb,
chemical;

create
table
multi_
2
as
select
max(
wght9)
as
multi_
2,
reachnmb
from
rch9
group
by
reachnmb
order
by
reachnmb;
quit;

data
rchwts;
merge
chrnb
actb
chrn1
act1
chrn2
act2
multi_
b
multi_
1
multi_
2;
by
reachnmb;

if
chrnc_
b=.
then
chrnc_
b=
0;
if
chrnc_
1=.
then
chrnc_
1=
0;
if
chrnc_
2=.
then
chrnc_
2=
0;
if
acutr_
b=.
then
acutr_
b=
0;
if
acutr_
1=.
then
acutr_
1=
0;
if
acutr_
2=.
then
acutr_
2=
0;
if
multi_
b=.
then
multi_
b=
0;
if
multi_
1=.
then
multi_
1=
0;
if
multi_
2=.
then
multi_
2=
0;
run;

quit;

/*
Output
the
affected
reaches
for
the
recreational
benefits
programs
*/

data
rundat.
rec_
al;
set
allreach;
if
chronicb
>
0
or
acuteb
>
0;
drop
reaches;
run;

/*
Print
out
results
*/

proc
means
sum
data=
aq_
life2;
var
test_
cb
test_
c1
test_
c2
test_
ab
test_
a1
test_
a2
ntlb1
ntnl11
ntnl21
ntlb2
ntnl12
ntnl22
rchcrb
rchcr1
rchcr2
rchacb
rchac1
rchac2;
label
reachnmb
='
Reach
ID'
test_
cb
=
'
Chronic
AWQC
Exeedences
(
Smpl/
BL)'
test_
c1
=
'
Chronic
AWQC
Exeedences
(
Smpl/
Opt
1)'
test_
c2
=
'
Chronic
AWQC
Exeedences
(
Smpl/
Opt
2)'
test_
ab
=
'
Acute
AWQC
Exeedences
(
Smpl/
BL)'
207
test_
a1
=
'
Acute
AWQC
Exeedences
(
Smpl/
Opt
1)'
test_
a2
=
'
Acute
AWQC
Exeedences
(
Smpl/
Opt
2)'
ntlb1
=
'
Chronic
AWQC
Exeedences
(
Ntl/
BL)'
ntnl11
=
'
Chronic
AWQC
Exeedences
(
Ntl/
OPt
1)'
ntnl21
=
'
Chronic
AWQC
Exeedences
(
Ntl/
OPt
2)'
ntlb2
=
'
Acute
AWQC
Exeedences
(
Ntl/
Bl)'
ntnl12
=
'
Acute
AWQC
Exeedences
(
Ntl/
Opt
1)'
ntnl22
=
'
Acute
AWQC
Exeedences
(
Ntl/
Opt
2)'
rchcrb
=
'
Number
of
Chronic
reaches
(
BL)'
rchcr1
=
'
Number
of
Chronic
reaches
(
Opt
1)'
rchcr2
=
'
Number
of
Chronic
reaches
(
Opt
2)'
rchacb
=
'
Number
of
Acute
reaches
(
BL)'
rchac1
=
'
Number
of
Acute
reaches
(
Opt
1)'
rchac2
=
'
Number
of
Acute
reaches
(
Opt
2)';

title3
'
Aquatic
Life
AWQC
Exceedences
by
Option
(
Sample/
National)';

proc
means
sum
data=
chm_
awqc;
var
crb
cr1
cr2
acb
ac1
ac2
ntlbw
ntl1w
ntl2w
ntlbo
ntl1o
ntl2o
chemcrb
chemcr1
chemcr2
chemacb
chemac1
chemac2;
label
crb
=
'
Chronic
AWQC
Exeedences
(
Smpl/
BL)'
cr1
=
'
Chronic
AWQC
Exeedences
(
Smpl/
Opt
1)'
cr2
=
'
Chronic
AWQC
Exeedences
(
Smpl/
Opt
2)'
acb
=
'
Acute
AWQC
Exeedences
(
Smpl/
BL)'
ac1
=
'
Acute
AWQC
Exeedences
(
Smpl/
Opt
1)'
ac2
=
'
Acute
AWQC
Exeedences
(
Smpl/
Opt
2)'
ntlbw
=
'
Chronic
AWQC
Exeedences
(
Ntl/
BL)'
ntl1w
=
'
Chronic
AWQC
Exeedences
(
Ntl/
OPt
1)'
ntl2w
=
'
Chronic
AWQC
Exeedences
(
Ntl/
OPt
2)'
ntlbo
=
'
Acute
AWQC
Exeedences
(
Ntl/
Bl)'
ntl1o
=
'
Acute
AWQC
Exeedences
(
Ntl/
Opt
1)'
ntl2o
=
'
Acute
AWQC
Exeedences
(
Ntl/
Opt
2)'
chemcrb
=
'
Number
of
Chronic
pol.
(
BL)'
chemcr1
=
'
Number
of
Chronic
pol.
(
Opt
1)'
chemcr2
=
'
Number
of
Chronic
pol.
(
Opt
2)'
chemacb
=
'
Number
of
Acute
pol.
(
BL)'
chemac1
=
'
Number
of
Acute
pol.
(
Opt
1)'
chemac2
=
'
Number
of
Acute
pol.
(
Opt
2)';

title3
'
AWQC
Exceedances
by
pollutant/
option
(
Sample
/
National)';

proc
means
sum
data=
rchwts;
var
chrnc_
b
chrnc_
1
chrnc_
2
acutr_
b
acutr_
1
acutr_
2
multi_
b
multi_
1
multi_
2;
label
chrnc_
b
=
'#
of
Reaches
Exceeding
Chronic
AWQC
(
Bl)
'
chrnc_
1
=
'#
of
Reaches
Exceeding
Chronic
AWQC
(
Opt
1)'
chrnc_
2
=
'#
of
Reaches
Exceeding
Chronic
AWQC
(
Opt
2)'
acutr_
b
=
'#
of
Reaches
Exceeding
Acute
AWQC
(
Bl)'
acutr_
1
=
'#
of
Reaches
Exceeding
Acute
AWQC
(
Opt
1)'
acutr_
2
=
'#
of
Reaches
Exceeding
Acute
AWQC
(
Opt
2)'
multi_
b
=
'
Either
(
BL)'
multi_
1
=
'
Either
(
Opt
1)'
multi_
2
=
'
Either
(
Opt
2)';
title3
'
IL
Reaches
Exceeding
AWQC
Limits
for
Aquatic
Life
(
National)';
208
run;

/*
Sum
the
number
of
exceedence
events
by
reach
and
event
weight
*/
proc
sql;
create
table
preme
as
select
reachnmb,
event_
wt,
sum(
chronicb)
as
testb1,
sum(
chronic1)
as
test1_
1,
sum(
chronic2)
as
test2_
1,
sum(
acuteb)
as
testb2,
sum(
acute1)
as
test1_
2,
sum(
acute2)
as
test2_
2
from
allreach
group
by
reachnmb,
event_
wt
order
by
reachnmb,
event_
wt;
quit;

/*
Determine
the
number
of
reaches
which
eliminate
all
exceedences
and
the
number
of
reaches
which
only
partially
reduce
*/

data
reduc;
set
preme;
if
testb1=.
then
testb1=
0;
if
test1_
1=.
then
test1_
1=
0;
if
test2_
1=.
then
test2_
1=
0;
if
testb2=.
then
testb2=
0;
if
test1_
2=.
then
test1_
2=
0;
if
test2_
2=.
then
test2_
2=
0;

if
testb1
>=
1
and
test1_
1
=
0
then
elim1_
1
=
1;
else
elim1_
1=
0;
if
testb1
>=
1
and
test2_
1
=
0
then
elim2_
1
=
1;
else
elim2_
1=
0;
if
testb2
>=
1
and
test1_
2
=
0
then
elim1_
2
=
1;
else
elim1_
2=
0;
if
testb2
>=
1
and
test2_
2
=
0
then
elim2_
2
=
1;
else
elim2_
2=
0;

if
testb1
>=
1
and
test1_
1
<
testb1
and
elim1_
1
=
0
then
red1_
1
=
1;
else
red1_
1=
0;
if
testb1
>=
1
and
test2_
1
<
testb1
and
elim2_
1
=
0
then
red2_
1
=
1;
else
red2_
1=
0;
if
testb2
>=
1
and
test1_
2
<
testb2
and
elim1_
2
=
0
then
red1_
2
=
1;
else
red1_
2=
0;
if
testb2
>=
1
and
test2_
2
<
testb2
and
elim2_
2
=
0
then
red2_
2
=
1;
else
red2_
2=
0;

if
elim1_
1=
1
or
elim1_
2=
1
then
elim1
=
1;
else
elim1
=
0;
if
elim2_
1=
1
or
elim2_
2=
1
then
elim2
=
1;
else
elim2
=
0;
if
red1_
1
=
1
or
red1_
2
=
1
then
reduc1
=
1;
else
reduc1
=
0;
if
red2_
1
=
1
or
red2_
2
=
1
then
reduc2
=
1;
else
reduc2
=
0;
run;

/*
Print
results
*/

proc
means
sum
data=
reduc;
var
elim1_
1
elim2_
1
elim1_
2
elim2_
2
red1_
1
red2_
1
red1_
2
red2_
2
reduc1
reduc2;
label
elim1_
1
=
'
Elim.
Chronic
(
Opt1)'
elim2_
1
=
'
Elim.
Chronic
(
Opt2)'
209
elim1_
2
=
'
Elim.
Acute
(
Opt1)'
elim2_
2
=
'
Elim.
Acute
(
Opt2)'
red1_
1
=
'
Redu.
Chronic
(
Opt1)'
red2_
1
=
'
Redu.
Chronic
(
Opt2)'
red1_
2
=
'
Redu.
Acute
(
Opt1)'
red2_
2
=
'
Redu.
Acute
(
Opt2)'
reduc1
=
'
Total
Reaches
Reducing
(
Opt1)'
reduc2
=
'
Total
Reaches
Reducing
(
Opt2)';
title3
'
AWQC
Eliminations
and
Reductions
(
Sample)';
title4
'
Number
of
Sample
Reaches';
quit;

proc
means
sum
data=
reduc;
weight
event_
wt;
var
elim1_
1
elim2_
1
elim1_
2
elim2_
2
red1_
1
red2_
1
red1_
2
red2_
2
reduc1
reduc2;
label
elim1_
1
=
'
Elim.
Chronic
(
Opt1)'
elim2_
1
=
'
Elim.
Chronic
(
Opt2)'
elim1_
2
=
'
Elim.
Acute
(
Opt1)'
elim2_
2
=
'
Elim.
Acute
(
Opt2)'
red1_
1
=
'
Redu.
Chronic
(
Opt1)'
red2_
1
=
'
Redu.
Chronic
(
Opt2)'
red1_
2
=
'
Redu.
Acute
(
Opt1)'
red2_
2
=
'
Redu.
Acute
(
Opt2)'
reduc1
=
'
Total
Reaches
Reducing
(
Opt1)'
reduc2
=
'
Total
Reaches
Reducing
(
Opt2)';
title3
'
AWQC
Eliminations
and
Reductions
(
National)';
title4
'
Number
of
National
Reaches';
quit;

proc
print
data=
aq_
life2;
quit;
proc
print
data=
chm_
awqc;
title3
'
Exceedences
by
Chemical';
quit;

/*
End
Aquatic
Life
AWQC
(
Sub
3).
sas
*/
210
Program
Output
211
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
9
Output
from
Aquatic
Life
(
Sub
3)
10:
59
Friday,
February
7,
2003
Aquatic
Life
AWQC
Exceedences
by
Option
(
Sample/
National)

The
MEANS
Procedure
Variable
Label
Sum
                                                                
test_
cb
Chronic
AWQC
Exeedences
(
Smpl/
BL)
23.0000000
test_
c1
Chronic
AWQC
Exeedences
(
Smpl/
Opt
1)
5.0000000
test_
c2
Chronic
AWQC
Exeedences
(
Smpl/
Opt
2)
.
test_
ab
Acute
AWQC
Exeedences
(
Smpl/
BL)
4.0000000
test_
a1
Acute
AWQC
Exeedences
(
Smpl/
Opt
1)
.
test_
a2
Acute
AWQC
Exeedences
(
Smpl/
Opt
2)
.
ntlb1
Chronic
AWQC
Exeedences
(
Ntl/
BL)
423.3144485
ntnl11
Chronic
AWQC
Exeedences
(
Ntl/
OPt
1)
31.5109878
ntnl21
Chronic
AWQC
Exeedences
(
Ntl/
OPt
2)
.
ntlb2
Acute
AWQC
Exeedences
(
Ntl/
Bl)
35.1274576
ntnl12
Acute
AWQC
Exeedences
(
Ntl/
Opt
1)
.
ntnl22
Acute
AWQC
Exeedences
(
Ntl/
Opt
2)
.
rchcrb
Number
of
Chronic
reaches
(
BL)
12.0000000
rchcr1
Number
of
Chronic
reaches
(
Opt
1)
5.0000000
rchcr2
Number
of
Chronic
reaches
(
Opt
2)
0
rchacb
Number
of
Acute
reaches
(
BL)
2.0000000
rchac1
Number
of
Acute
reaches
(
Opt
1)
0
rchac2
Number
of
Acute
reaches
(
Opt
2)
0
                                                                
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
10
Output
from
Aquatic
Life
(
Sub
3)
10:
59
Friday,
February
7,
2003
AWQC
Exceedances
by
pollutant/
option
(
Sample
/
National)

The
MEANS
Procedure
Variable
Label
Sum
                                                                
crb
Chronic
AWQC
Exeedences
(
Smpl/
BL)
23.0000000
cr1
Chronic
AWQC
Exeedences
(
Smpl/
Opt
1)
5.0000000
cr2
Chronic
AWQC
Exeedences
(
Smpl/
Opt
2)
.
acb
Acute
AWQC
Exeedences
(
Smpl/
BL)
4.0000000
ac1
Acute
AWQC
Exeedences
(
Smpl/
Opt
1)
.
ac2
Acute
AWQC
Exeedences
(
Smpl/
Opt
2)
.
ntlbw
Chronic
AWQC
Exeedences
(
Ntl/
BL)
423.3144485
ntl1w
Chronic
AWQC
Exeedences
(
Ntl/
OPt
1)
31.5109878
ntl2w
Chronic
AWQC
Exeedences
(
Ntl/
OPt
2)
.
ntlbo
Acute
AWQC
Exeedences
(
Ntl/
Bl)
35.1274576
ntl1o
Acute
AWQC
Exeedences
(
Ntl/
Opt
1)
.
ntl2o
Acute
AWQC
Exeedences
(
Ntl/
Opt
2)
.
chemcrb
Number
of
Chronic
pol.
(
BL)
9.0000000
chemcr1
Number
of
Chronic
pol.
(
Opt
1)
2.0000000
chemcr2
Number
of
Chronic
pol.
(
Opt
2)
0
chemacb
Number
of
Acute
pol.
(
BL)
4.0000000
chemac1
Number
of
Acute
pol.
(
Opt
1)
0
chemac2
Number
of
Acute
pol.
(
Opt
2)
0
212
                                                                
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
11
Output
from
Aquatic
Life
(
Sub
3)
10:
59
Friday,
February
7,
2003
IL
Reaches
Exceeding
AWQC
Limits
for
Aquatic
Life
(
National)

The
MEANS
Procedure
Variable
Label
Sum
                                                                       
chrnc_
b
#
of
Reaches
Exceeding
Chronic
AWQC
(
Bl)
353.0595333
chrnc_
1
#
of
Reaches
Exceeding
Chronic
AWQC
(
Opt
1)
31.5109878
chrnc_
2
#
of
Reaches
Exceeding
Chronic
AWQC
(
Opt
2)
0
acutr_
b
#
of
Reaches
Exceeding
Acute
AWQC
(
Bl)
17.5637288
acutr_
1
#
of
Reaches
Exceeding
Acute
AWQC
(
Opt
1)
0
acutr_
2
#
of
Reaches
Exceeding
Acute
AWQC
(
Opt
2)
0
multi_
b
Either
(
BL)
353.0595333
multi_
1
Either
(
Opt
1)
31.5109878
multi_
2
Either
(
Opt
2)
0
                                                                       
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
13
Output
from
Aquatic
Life
(
Sub
3)
10:
59
Friday,
February
7,
2003
AWQC
Eliminations
and
Reductions
(
National)
Number
of
National
Reaches
The
MEANS
Procedure
Variable
Label
Sum
                                                         
elim1_
1
Elim.
Chronic
(
Opt1)
321.5485455
elim2_
1
Elim.
Chronic
(
Opt2)
353.0595333
elim1_
2
Elim.
Acute
(
Opt1)
17.5637288
elim2_
2
Elim.
Acute
(
Opt2)
17.5637288
red1_
1
Redu.
Chronic
(
Opt1)
8.7818644
red2_
1
Redu.
Chronic
(
Opt2)
0
red1_
2
Redu.
Acute
(
Opt1)
0
red2_
2
Redu.
Acute
(
Opt2)
0
reduc1
Total
Reaches
Reducing
(
Opt1)
8.7818644
reduc2
Total
Reaches
Reducing
(
Opt2)
0
                                                         
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
15
Output
from
Aquatic
Life
(
Sub
3)
10:
59
Friday,
February
7,
2003
Exceedences
by
Chemical
C
H
c
c
c
c
c
c
E
h
h
h
h
h
h
M
n
n
n
n
n
n
e
e
e
e
e
e
I
t
t
t
t
t
t
m
m
m
m
m
m
O
C
c
c
c
a
a
a
l
l
l
l
l
l
c
c
c
a
a
a
b
A
r
r
r
c
c
c
b
1
2
b
1
2
r
r
r
c
c
c
s
L
b
1
2
b
1
2
w
w
w
o
o
o
b
1
2
b
1
2
1
Aluminum
1
.
.
.
.
.
8.782
.
.
.
.
.
1
0
0
0
0
0
213
2
Cadmium
1
.
.
1
.
.
8.782
.
.
8.78186
.
.
1
0
0
1
0
0
3
Copper
4
1
.
1
.
.
276.064
8.7819
.
8.78186
.
.
1
1
0
1
0
0
4
Lead
2
.
.
.
.
.
17.564
.
.
.
.
.
1
0
0
0
0
0
5
Manganese
1
.
.
.
.
.
21.382
.
.
.
.
.
1
0
0
0
0
0
6
Mercury
1
.
.
.
.
.
8.782
.
.
.
.
.
1
0
0
0
0
0
7
Nickel
1
.
.
.
.
.
8.782
.
.
.
.
.
1
0
0
0
0
0
8
Silver
11
4
.
1
.
.
64.395
22.7291
.
8.78186
.
.
1
1
0
1
0
0
9
Zinc
1
.
.
1
.
.
8.782
.
.
8.78186
.
.
1
0
0
1
0
0
214
"
Fishing
Recreation
(
Sub
7).
sas"
Data
on
human
health
based
and
aquatic
life
based
AWQC
exceedences
for
each
RF1
reach
are
merged,
and
the
total
number
of
AWQC
exceedences
is
generated.
Based
on
the
reduction
in
AWQC
exceedences,
the
baseline
value
of
a
fishing
day,
and
a
range
of
percentage
increases
in
value
from
AWQC
reductions,
benefits
to
recreational
fishermen
are
estimated.
215
/*
Program:
Fishing
Recreation
(
Sub
7).
sas
Authors:
Abt
Associates
Inc;
Rob
Sartain,
Elena
Besedin,
Stuart
Smith
Date:
04/
21/
2000
Updated:
09/
26/
2002
This
program
estimates
recreation
benefits
to
sport
anglers
stemming
from
improvments
in
or
the
elimination
of
awqc
exceedences
for
human
health
or
aquatic
life
on
reaches.
*/

title2
'
Fishing
Recreation
(
Sub
7)';

/*
COUNTY
LEVEL
FISHING
LICENSE
DATA
*/

/*
Load
fishing
license
data
here.
Sum
over
the
types
by
county.
Sum
over
the
counties
containing
a
given
reach.

Final
data
set
contains
reaches
with
the
total
possible
number
of
affected
anglers.
This
number
will
be
multiplied
by
the
ratio
of
reach
length
to
total
reach
miles
in
affected
counties
to
obtain
an
estimate
of
the
number
of
affected
anglers.
*/

data
licens;
set
mpm2.
fish_
lic;

fw_
lic
=
sum(
fw_
res,
fw_
reso,
fw_
sres,
fw_
smres,
fw_
dres,
trout,
fw_
life,
fw_
hunt1,
fw_
2hunt,
fw_
hunts,
fw_
hunt2,
fw_
salt1,
fw_
trout);
sw_
lic
=
sum(
fw_
salt1,
sw_
res,
sw_
dres);

if
fw_
lic=.
then
fw_
lic=
0;
if
sw_
lic=.
then
sw_
lic=
0;
cntyfip
=
fips;

keep
cntyfip
fw_
lic
sw_
lic;
run;

proc
sort
nodupkey
data=
licens;
by
cntyfip;
quit;

/*
DETERMINE
COUNTIES
AFFECTED
BY
REACH
*/
data
facs;
set
mpm2.
fac_
info;
run;

proc
sort
data=
facs;
by
siteid;
quit;

data
cnty;
set
facs;

cntyfip1=
stco1;
cntyfip2=
stco2;
cntyfip3=
stco3;
cntyfip4=
stco4;
cntyfip5=
stco5;
cntyfip6=
stco6;
cntyfip7=
stco7;
cntyfip8=
stco8;
216
keep
reachnmb
cntyfip1­
cntyfip8;
run;

proc
sort
nodupkey
data=
cnty;
by
reachnmb;
quit;

proc
transpose
data=
cnty
out=
cnty2;
by
reachnmb;
var
cntyfip1­
cntyfip8;
quit;

data
cnty3;
set
cnty2;
cntyfip
=
col1/
1;
if
cntyfip=.
then
delete;
keep
reachnmb
cntyfip;
run;

proc
sort
data=
cnty3;
by
cntyfip;
quit;

/*
OBTAIN
REACH
MILES
BY
COUNTY
*/

data
rchmile;
set
mpm2.
us_
rchmi;
cntyfip=
fips;
keep
countymi
cntyfip;
run;

proc
sort
data=
rchmile;
by
cntyfip;

/*
PULL
TOGETHER
OUR
REACHES
WITH
ASSOCIATED
COUNTIES
*/

data
tot_
mile;
merge
cnty3
rchmile;
by
cntyfip;

if
reachnmb=.
then
delete;
run;

proc
sort
data=
tot_
mile;
by
reachnmb
cntyfip;
quit;
proc
sort
nodupkey
data=
facs;
by
reachnmb;
quit;

/*
SUM
REACH
MILES
OVER
COUNTIES
CONTAINING
THE
SAME
REACH
FINISHED
DATA
SET
CONTAINS
TOTAL
NUMBER
OF
REACH
MILES
IN
COUNTIES
CONTAINING
A
GIVEN
REACH.
BRING
IN
THE
FISHING
LICNESE
DATA
BY
COUNTY.
*/

proc
sql;

create
table
miles
as
select
tot_
mile.
reachnmb,
sum(
countymi)
as
denom,
min(
segl)
as
leng,
sum(
fw_
lic)
as
fwlictot,
sum(
sw_
lic)
as
swlictot
from
tot_
mile,
facs,
licens
where
tot_
mile.
reachnmb
=
facs.
reachnmb
and
tot_
mile.
cntyfip
=
licens.
cntyfip
217
group
by
tot_
mile.
reachnmb
order
by
tot_
mile.
reachnmb;
quit;

proc
sort
data=
miles;
by
reachnmb;
quit;

/*
ESTIMATE
SPORT
ANGLERS
*/

data
pops;
set
miles;
by
reachnmb;
if
first.
reachnmb;

/*
no
family
adjustment,
just
anglers
*/
/*
no
subsistence
anglers
*/

if
leng=.
then
fwspt
=
fwlictot*
0.06;
else
fwspt
=
fwlictot*(
leng/
denom);

if
leng=.
then
swspt
=
swlictot*
0.06;
else
swspt
=
swlictot*(
leng/
denom);

fwsptpop
=
round(
fwspt);
swsptpop
=
round(
swspt);

sportpop
=
fwsptpop
+
swsptpop;

keep
reachnmb
sportpop
fwsptpop
swsptpop
fwlictot
swlictot;
run;

proc
sort
data=
pops;
by
reachnmb;
quit;

/*
Combine
Population
with
average
fishing
days
*/

proc
sql;

create
table
pops2
as
select
pops.*,
fip
from
pops,
mpm2.
rchstate
where
pops.
reachnmb
=
rchstate.
reachnmb
order
by
reachnmb;

create
table
pops3
as
select
pops2.*,
avgfw,
avgsw
from
pops2,
mpm2.
avgdfish
where
pops2.
fip
=
avgdfish.
fip
order
by
reachnmb;
quit;

/*
Pull
in
the
reach
data
sets
with
exceedence
events
and
combine
by
reach,
casno,
event
weight
*/
218
proc
sort
data=
rundat.
rec_
hh;
by
reachnmb
casno
event_
wt;
quit;
proc
sort
data=
rundat.
rec_
al;
by
reachnmb
casno
event_
wt;
quit;

data
rchexc;
merge
rundat.
rec_
hh
rundat.
rec_
al;
by
reachnmb
casno
event_
wt;

/*
Calculate
total
exceedences
for
a
reach,
both
sample
and
national
Sum
all
exceedences
for
a
reach,
that's
acute
and
chronic
for
AL
and
h2o/
org
and
org
for
HH
*/

if
orgh2o_
b=.
then
orgh2o_
b=
0;
if
org_
b=.
then
org_
b=
0;
if
chronicb=.
then
chronicb=
0;
if
acuteb=.
then
acuteb=
0;
if
orgh2ot1=.
then
orgh2ot1=
0;
if
org_
t1=.
then
org_
t1=
0;
if
chronic1=.
then
chronic1=
0;
if
acute1=.
then
acute1=
0;
if
orgh2ot2=.
then
orgh2ot2=
0;
if
org_
t2=.
then
org_
t2=
0;
if
chronic2=.
then
chronic2=
0;
if
acute2=.
then
acute2=
0;

base
=
orgh2o_
b
+
org_
b
+
chronicb
+
acuteb;
trt1
=
orgh2ot1
+
org_
t1
+
chronic1
+
acute1;
trt2
=
orgh2ot2
+
org_
t2
+
chronic2
+
acute2;
run;

proc
sql;
create
table
evntsum
as
select
reachnmb,
event_
wt,
sum(
base)
as
exc_
b,
sum(
trt1)
as
exc_
1,
sum(
trt2)
as
exc_
2
from
rchexc
group
by
reachnmb,
event_
wt
order
by
reachnmb,
event_
wt;
quit;

proc
print
data=
evntsum;
title3
'
Summary
of
Exceedences
by
Reach';
quit;

/*
Calculate
benefit
ratios
Ratio
=
#
exceedences
eliminated
/
#
baseline
exceedences
If
all
exceedences
eliminated
then
Ratio
=
1
and
full
benefit
is
realized.
Otherwise
the
fraction
of
the
benefit
realized
is
equal
to
the
fraction
of
exceedences
eliminated.
*/

data
benrat;
set
evntsum;
219
bfrac_
1
=
(
exc_
b
­
exc_
1)/
exc_
b;
bfrac_
2
=
(
exc_
b
­
exc_
2)/
exc_
b;

weight
=
event_
wt;

if
weight=.
then
weight
=
1;

keep
reachnmb
weight
bfrac_
1
bfrac_
2
exc_
b
exc_
1
exc_
2;
run;

/*
Pull
together
the
benefit
fractions
and
fishing
days
and
populations
*/

proc
sql;

create
table
benefit
as
select
benrat.*,
sportpop,
fwsptpop,
swsptpop,
avgfw,
avgsw
from
benrat,
pops3
where
benrat.
reachnmb
=
pops3.
reachnmb
order
by
benrat.
reachnmb;
quit;

data
benefit2;
set
benefit;

/*
Base
values
for
Fishing
Days
Values
in
$
2001
Low
($
99)
28.11
Upper
($
99)
60.43
*/

bvalfwl
=
fwsptpop
*
avgfw
*
28.11;
bvalfwh
=
fwsptpop
*
avgfw
*
60.43;
bvalswl
=
swsptpop
*
avgsw
*
28.11;
bvalswh
=
swsptpop
*
avgsw
*
60.43;
midfw
=
fwsptpop
*
avgfw
*
42.12;
midsw
=
swsptpop
*
avgsw
*
42.12;

tripsfw
=
fwsptpop*
avgfw;
tripssw
=
swsptpop*
avgsw;

/*
Benefits
under
Average
Values
Increase
range
of
9.83%
to
14.71%
Midpoint
12.27%
*/

avg1_
lf
=
bvalfwl
*
bfrac_
1
*
0.0983;
avg1_
hf
=
bvalfwh
*
bfrac_
1
*
0.1471;
avg1_
ls
=
bvalswl
*
bfrac_
1
*
0.0983;
avg1_
hs
=
bvalswh
*
bfrac_
1
*
0.1471;
mid1_
f
=
midfw
*
bfrac_
1
*
0.1227;
mid1_
s
=
midsw
*
bfrac_
1
*
0.1227;
220
avg2_
lf
=
bvalfwl
*
bfrac_
2
*
0.0983;
avg2_
hf
=
bvalfwh
*
bfrac_
2
*
0.1471;
avg2_
ls
=
bvalswl
*
bfrac_
2
*
0.0983;
avg2_
hs
=
bvalswh
*
bfrac_
2
*
0.1471;
mid2_
f
=
midfw
*
bfrac_
2
*
0.1227;
mid2_
s
=
midsw
*
bfrac_
2
*
0.1227;
run;

proc
means
sum;
var
avg1_
lf
avg1_
hf
avg1_
ls
avg1_
hs
avg2_
lf
avg2_
hf
avg2_
ls
avg2_
hs
mid1_
f
mid1_
s
mid2_
f
mid2_
s
fwsptpop
swsptpop
tripsfw
tripssw
bvalfwl
bvalfwh
bvalswl
bvalswh;
title3
'
Sample
Benefits
(
includes
partial)';
quit;

proc
means
sum;
weight
weight;
var
avg1_
lf
avg1_
hf
avg1_
ls
avg1_
hs
avg2_
lf
avg2_
hf
avg2_
ls
avg2_
hs
mid1_
f
mid1_
s
mid2_
f
mid2_
s
fwsptpop
swsptpop
tripsfw
tripssw
bvalfwl
bvalfwh
bvalswl
bvalswh;
output
out
=
rundat.
rec_
fsh(
drop
=
_
type_
_
freq_)
sum
=
avg1_
lf
avg1_
hf
avg1_
ls
avg1_
hs
avg2_
lf
avg2_
hf
avg2_
ls
avg2_
hs
mid1_
f
mid1_
s
mid2_
f
mid2_
s
fwsptpop
swsptpop
tripsfw
tripssw
bvalfwl
bvalfwh
bvalswl
bvalswh;
title3
'
National
Benefits
(
includes
partial)';
quit;

data
rundat.
rec_
fish(
keep
=
activity
benl1
benm1
benh1
benl2
benm2
benh2
pop);
set
rundat.
rec_
fsh;
activity
=
"
Fishing";
pop
=
fwsptpop
+
swsptpop;
benl1
=
avg1_
lf
+
avg1_
ls;
benm1
=
mid1_
f
+
mid1_
s;
benh1
=
avg1_
hf
+
avg1_
hs;
benl2
=
avg2_
lf
+
avg2_
ls;
benm2
=
mid2_
f
+
mid2_
s;
benh2
=
avg2_
hf
+
avg2_
hs;
run;

data
reaches;
set
benrat;

if
exc_
b
>
0
then
baseexc
=
1;
else
baseexc
=
0;
if
exc_
1
>
0
then
post1
=
1;
else
post1=
0;
if
exc_
2
>
0
then
post2
=
1;
else
post2=
0;
if
bfrac_
1
=
1
then
elm_
1
=
1;
else
elm_
1
=
0;
if
bfrac_
1
<
1
and
bfrac_
1
>
0
then
red_
1
=
1;
else
red_
1
=
0;
if
bfrac_
2
=
1
then
elm_
2
=
1;
else
elm_
2
=
0;
if
bfrac_
2
<
1
and
bfrac_
2
>
0
then
red_
2
=
1;
else
red_
2
=
0;
run;

proc
means
sum
data=
reaches;
var
baseexc
post1
post2
elm_
1
elm_
2
red_
1
red_
2;
label
221
baseexc
=
'
Baseline
Reaches
Exceeding
AWQCs'
post1
=
'
Post
Reaches
Exceeding
AWQCs
(
Opt1)'
post2
=
'
Post
Reaches
Exceeding
AWQCs
(
Opt2)'
elm_
1
=
'
Reaches
Eliminating
(
Opt1)'
elm_
2
=
'
Reaches
Eliminating
(
Opt2)'
red_
1
=
'
Reaches
Reducing
(
Opt1)'
red_
2
=
'
Reaches
Reducing
(
Opt2)';
title3
'
Reach
Information';
title4
'
Sample
Level';
quit;

proc
means
sum
data=
reaches;
weight
weight;
var
baseexc
post1
post2
elm_
1
elm_
2
red_
1
red_
2;
label
baseexc
=
'
Baseline
Reaches
Exceeding
AWQCs'
post1
=
'
Post
Reaches
Exceeding
AWQCs
(
Opt1)'
post2
=
'
Post
Reaches
Exceeding
AWQCs
(
Opt2)'
elm_
1
=
'
Reaches
Eliminating
(
Opt1)'
elm_
2
=
'
Reaches
Eliminating
(
Opt2)'
red_
1
=
'
Reaches
Reducing
(
Opt1)'
red_
2
=
'
Reaches
Reducing
(
Opt2)';
title3
'
Reach
Information';
title4
'
National
Level';
quit;

data
check;
set
benefit2;

if
bfrac_
1
<=
0
then
delete;
run;

data
check2;
merge
check
pops;
by
reachnmb;
if
weight=.
then
delete;

keep
reachnmb
fwlictot
swlictot
fwsptpop
swsptpop
weight;
run;

/*
End
Fishing
Recreation
(
Sub
7).
sas
*/
222
Program
Output
223
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
51
Fishing
Recreation
(
Sub
7)
10:
59
Friday,
February
7,
2003
National
Benefits
(
includes
partial)

The
MEANS
Procedure
Variable
Sum
                        
avg1_
lf
28998417.92
avg1_
hf
93287876.64
avg1_
ls
53551.53
avg1_
hs
172275.21
avg2_
lf
46788745.11
avg2_
hf
150519338
avg2_
ls
128706.69
avg2_
hs
414049.27
mid1_
f
54236651.17
mid1_
s
100159.11
mid2_
f
87510458.49
mid2_
s
240724.16
fwsptpop
978291.79
swsptpop
4140.69
tripsfw
16932731.97
tripssw
46578.64
bvalfwl
475979096
bvalfwh
1023244993
bvalswl
1309325.43
bvalswh
2814746.92
                        
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
53
Fishing
Recreation
(
Sub
7)
10:
59
Friday,
February
7,
2003
Reach
Information
National
Level
The
MEANS
Procedure
Variable
Label
Sum
                                                               
baseexc
Baseline
Reaches
Exceeding
AWQCs
394.4913361
post1
Post
Reaches
Exceeding
AWQCs
(
Opt1)
109.2789846
post2
Post
Reaches
Exceeding
AWQCs
(
Opt2)
0
elm_
1
Reaches
Eliminating
(
Opt1)
285.2123515
elm_
2
Reaches
Eliminating
(
Opt2)
394.4913361
red_
1
Reaches
Reducing
(
Opt1)
45.1180584
red_
2
Reaches
Reducing
(
Opt2)
0
                                                               
224
Near­
water
Activity
and
Boating
225
"
Human
Health
AWQC
Exceedences
(
Sub
2).
sas"
The
number
of
human
health
based
AWQC
exceedences
for
each
RF1
reach
are
estimated
and
output
to
a
data
set.
See
Human
Health
Benefits
Cancer
from
Fish
Consumption
for
program
code
and
output.
226
"
Aquatic
Life
AWQC
Exceedences
(
Sub
3).
sas"
The
number
of
aquatic
life
based
AWQC
exceedences
for
each
RF1
reach
are
estimated
and
output
to
a
data
set.
See
Recreational
Fishing
for
program
code
and
output.
227
"
Other
Recreation
(
Sub
8).
sas"
Data
on
human
health
based
and
aquatic
life
based
AWQC
exceedences
for
each
RF1
reach
are
merged,
and
the
total
number
of
AWQC
exceedences
is
generated.
Based
on
the
reduction
in
AWQC
exceedences,
the
baseline
value
of
a
boating
or
near­
water
activity
day,
and
a
range
of
percentage
increases
in
value
from
AWQC
reductions,
benefits
to
boaters
and
near­
water
activity
participants
are
estimated.
228
/*
Program:
Other
Recreation
(
Sub
8).
sas
Authors:
Abt
Associates
Inc;
Rob
Sartain,
Elena
Besedin,
Stuart
Smith
Date:
04/
21/
2000
Updated:
09/
26/
2002
This
program
estimates
recreation
benefits
to
activity
participants
stemming
from
improvements
in
or
the
elimination
of
awqc
exceedences
for
human
health
or
aquatic
life
on
reaches.
Valuations
for
viewing
and
boating
are
estimated.
*/

%
let
tbl_
path
=
%
sysfunc(
pathname(
rundat));

title2
'
Other
Recreation
(
Sub
8)';

/*
DETERMINE
COUNTIES
AFFECTED
BY
REACH
*/
data
facs;
set
mpm2.
fac_
info;
run;

proc
sort
data=
facs;
by
siteid;
quit;

data
cnty;
set
facs;

cntyfip1=
stco1;
cntyfip2=
stco2;
cntyfip3=
stco3;
cntyfip4=
stco4;
cntyfip5=
stco5;
cntyfip6=
stco6;
cntyfip7=
stco7;
cntyfip8=
stco8;

keep
reachnmb
cntyfip1­
cntyfip8;
run;

proc
sort
nodupkey
data=
cnty;
by
reachnmb;
quit;

proc
transpose
data=
cnty
out=
cnty2;
by
reachnmb;
var
cntyfip1­
cntyfip8;
quit;

data
cnty3;
set
cnty2;
cntyfip
=
col1/
1;
if
cntyfip=.
then
delete;
keep
reachnmb
cntyfip;
run;

proc
sort
data=
cnty3;
by
cntyfip;
quit;

/*
OBTAIN
REACH
MILES
BY
COUNTY
*/

data
rchmile;
set
mpm2.
us_
rchmi;
cntyfip=
fips;
keep
countymi
cntyfip;
229
run;

proc
sort
data=
rchmile;
by
cntyfip;

/*
PULL
TOGETHER
OUR
REACHES
WITH
ASSOCIATED
COUNTIES
*/

data
tot_
mile;
merge
cnty3
rchmile;
by
cntyfip;

if
reachnmb=.
then
delete;
run;

proc
sort
data=
tot_
mile;
by
reachnmb
cntyfip;
quit;
proc
sort
nodupkey
data=
facs;
by
reachnmb;
quit;

/*
SUM
REACH
MILES
OVER
COUNTIES
CONTAINING
THE
SAME
REACH
FINISHED
DATA
SET
CONTAINS
TOTAL
NUMBER
OF
REACH
MILES
IN
COUNTIES
CONTAINING
A
GIVEN
REACH.
BRING
IN
THE
FISHING
LICNESE
DATA
BY
COUNTY.
*/

proc
sql;
create
table
miles
as
select
tot_
mile.
reachnmb,
sum(
countymi)
as
denom,
min(
segl)
as
leng
from
tot_
mile,
facs
where
tot_
mile.
reachnmb
=
facs.
reachnmb
group
by
tot_
mile.
reachnmb
order
by
tot_
mile.
reachnmb;
quit;

/*
Merge
in
the
county
populations
and
state
abbreviations
*/
proc
sql;
create
table
rchpop
as
select
cnty3.
reachnmb,
cnty3.
cntyfip,
pop2000
as
totpop,
stateabv
as
state,
denom,
leng
from
cnty3,
mpm2.
cntypop,
mpm2.
rchstate,
miles
where
cnty3.
cntyfip
=
cntypop.
fips
and
cnty3.
reachnmb
=
rchstate.
reachnmb
and
cnty3.
reachnmb
=
miles.
reachnmb
order
by
reachnmb;

/*
ESTIMATE
Number
of
Participants
by
Activity
*/

create
table
pops
as
select
reachnmb,
sum(
totpop)
as
pop,
min(
state)
as
stateabv,
avg(
denom)
as
den,
avg(
leng)
as
lengt
from
rchpop
group
by
reachnmb
order
by
reachnmb;

create
table
pops2
as
select
reachnmb,
stateabv,
viewtrp,
boattrp,
swimtrp,
pop,
pop*
pctview
as
totview,
pop*
pctboat
as
totboat,
pop*
pctswim
as
totswim,
case
230
when
lengt
is
missing
then
pop*
pctview*
0.06
else
pop*
pctview*(
lengt/
den)
end
as
viewers,
case
when
lengt
is
missing
then
pop*
pctboat*
0.06
else
pop*
pctboat*(
lengt/
den)
end
as
boaters,
case
when
lengt
is
missing
then
pop*
pctswim*
0.06
else
pop*
pctswim*(
lengt/
den)
end
as
swimers
from
pops,
mpm2.
recpcts
where
pops.
stateabv
=
recpcts.
state
order
by
reachnmb;
quit;

/*
Pull
in
the
reach
data
sets
with
exceedence
events
and
combine
by
reach,
casno,
event
weight
*/

proc
sort
data=
rundat.
rec_
hh;
by
reachnmb
casno
event_
wt;
quit;
proc
sort
data=
rundat.
rec_
al;
by
reachnmb
casno
event_
wt;
quit;

data
rchexc;
merge
rundat.
rec_
hh
rundat.
rec_
al;
by
reachnmb
casno
event_
wt;

/*
Calculate
total
exceedences
for
a
reach,
both
sample
and
national
Sum
all
exceedences
for
a
reach,
that's
acute
and
chronic
for
AL
and
h2o/
org
and
org
for
HH
*/

if
orgh2o_
b=.
then
orgh2o_
b=
0;
if
org_
b=.
then
org_
b=
0;
if
chronicb=.
then
chronicb=
0;
if
acuteb=.
then
acuteb=
0;
if
orgh2ot1=.
then
orgh2ot1=
0;
if
org_
t1=.
then
org_
t1=
0;
if
chronic1=.
then
chronic1=
0;
if
acute1=.
then
acute1=
0;
if
orgh2ot2=.
then
orgh2ot2=
0;
if
org_
t2=.
then
org_
t2=
0;
if
chronic2=.
then
chronic2=
0;
if
acute2=.
then
acute2=
0;

base
=
orgh2o_
b
+
org_
b
+
chronicb
+
acuteb;
trt1
=
orgh2ot1
+
org_
t1
+
chronic1
+
acute1;
trt2
=
orgh2ot2
+
org_
t2
+
chronic2
+
acute2;
run;

proc
sql;
create
table
evntsum
as
select
reachnmb,
event_
wt,
sum(
base)
as
exc_
b,
sum(
trt1)
as
exc_
1,
sum(
trt2)
as
exc_
2
from
rchexc
231
group
by
reachnmb,
event_
wt
order
by
reachnmb,
event_
wt;
quit;

proc
print
data=
evntsum;
quit;

/*
Calculate
benefit
ratios
Ratio
=
#
exceedences
eliminated
/
#
baseline
exceedences
If
all
exceedences
eliminated
then
Ratio
=
1
and
full
benefit
is
realized.
Otherwise
the
fraction
of
the
benefit
realized
is
equal
to
the
fraction
of
exceedences
eliminated.
*/

data
benrat;
set
evntsum;

bfrac_
1
=
(
exc_
b
­
exc_
1)/
exc_
b;
bfrac_
2
=
(
exc_
b
­
exc_
2)/
exc_
b;

weight
=
event_
wt;

if
weight=.
then
weight
=
1;

keep
reachnmb
weight
bfrac_
1
bfrac_
2
exc_
b
exc_
1
exc_
2;
run;

/*
Pull
together
the
benefit
fractions
and
fishing
days
and
populations
*/

proc
sql;

create
table
benefit
as
select
benrat.*,
viewers,
boaters,
viewtrp,
boattrp,
swimers,
swimtrp
from
benrat,
pops2
where
benrat.
reachnmb
=
pops2.
reachnmb
order
by
benrat.
reachnmb;
quit;

data
benefit2;
set
benefit;

/*
Base
values
for
Viewing
and
Boating
and
Swimming
Days
Viewing
Day
($
2001)
22.73
­
28.73
Boating
Day
($
2001)
37.30
­
59.26
midpoint
view
26.28
midpoint
boat
48.30
*/

bvlow
=
viewers
*
22.73
*
viewtrp;
bvhigh
=
viewers
*
28.73
*
viewtrp;
bblow
=
boaters
*
37.30
*
boattrp;
bbhigh
=
boaters
*
59.26
*
boattrp;
232
midview
=
viewers
*
26.28
*
viewtrp;
midboat
=
boaters
*
48.30
*
boattrp;

tripsv
=
viewers*
viewtrp;
tripsb
=
boaters*
boattrp;

/*
Benefits
from
Average
values
Viewing
Increase
of
14.94%
to
21.34%
Boating
Increase
of
6.51%
to
11.35%

mid
viewing
18.14%
mid
boating
8.93%
*/

av1_
low
=
bvlow
*
bfrac_
1
*
0.1494;
av1_
high
=
bvhigh
*
bfrac_
1
*
0.2134;
av2_
low
=
bvlow
*
bfrac_
2
*
0.1494;
av2_
high
=
bvhigh
*
bfrac_
2
*
0.2134;

ab1_
low
=
bblow
*
bfrac_
1
*
0.0651;
ab1_
high
=
bbhigh
*
bfrac_
1
*
0.1135;
ab2_
low
=
bblow
*
bfrac_
2
*
0.0651;
ab2_
high
=
bbhigh
*
bfrac_
2
*
0.1135;

midvw1
=
midview
*
bfrac_
1
*
0.1814;
midbt1
=
midboat
*
bfrac_
1
*
0.0893;
midvw2
=
midview
*
bfrac_
2
*
0.1814;
midbt2
=
midboat
*
bfrac_
2
*
0.0893;
run;

proc
means
sum;
var
av1_
low
av1_
high
av2_
low
av2_
high
ab1_
low
ab1_
high
ab2_
low
ab2_
high
midvw1
midvw2
midbt1
midbt2
viewers
boaters
tripsv
tripsb;
label
av1_
low
=
'
Avg
View
Benefits
­
Low
(
Opt
1)'
av1_
high
=
'
Avg
View
Benefits
­
High(
Opt
1)'
av2_
low
=
'
Avg
View
Benefits
­
Low
(
Opt
2)'
av2_
high
=
'
Avg
View
Benefits
­
High(
Opt
2)'
ab1_
low
=
'
Avg
Boat
Benefits
­
Low
(
Opt
1)'
ab1_
high
=
'
Avg
Boat
Benefits
­
High(
Opt
1)'
ab2_
low
=
'
Avg
Boat
Benefits
­
Low
(
Opt
2)'
ab2_
high
=
'
Avg
Boat
Benefits
­
High(
Opt
2)'
midvw1
=
'
Mid
View
Ben
(
Opt1)'
midvw2
=
'
Mid
View
Ben
(
Opt2)'
midbt1
=
'
Mid
Boat
Ben
(
Opt1)'
midbt2
=
'
Mid
Boat
Ben
(
Opt2)'
viewers
=
'
Number
of
Viewing
Participants'
boaters
=
'
Number
of
Boating
Participants'
tripsv
=
'
Number
of
Viewing
Days'
tripsb
=
'
Number
of
Boating
Days'
title3
'
Sample
Benefits
(
includes
partial)';
title4
'
Viewing,
Boating
Activities
';
233
quit;

proc
means
sum;
weight
weight;
var
av1_
low
av1_
high
av2_
low
av2_
high
ab1_
low
ab1_
high
ab2_
low
ab2_
high
midvw1
midvw2
midbt1
midbt2
viewers
boaters
tripsv
tripsb;
output
out
=
rundat.
rec_
oth(
drop
=
_
type_
_
freq_)
sum
=
av1_
low
av1_
high
av2_
low
av2_
high
ab1_
low
ab1_
high
ab2_
low
ab2_
high
midvw1
midvw2
midbt1
midbt2
viewers
boaters
tripsv
tripsb;
label
av1_
low
=
'
Avg
View
Benefits
­
Low
(
Opt
1)'
av1_
high
=
'
Avg
View
Benefits
­
High(
Opt
1)'
av2_
low
=
'
Avg
View
Benefits
­
Low
(
Opt
2)'
av2_
high
=
'
Avg
View
Benefits
­
High(
Opt
2)'
ab1_
low
=
'
Avg
Boat
Benefits
­
Low
(
Opt
1)'
ab1_
high
=
'
Avg
Boat
Benefits
­
High(
Opt
1)'
ab2_
low
=
'
Avg
Boat
Benefits
­
Low
(
Opt
2)'
ab2_
high
=
'
Avg
Boat
Benefits
­
High(
Opt
2)'
midvw1
=
'
Mid
View
Ben
(
Opt1)'
midvw2
=
'
Mid
View
Ben
(
Opt2)'
midbt1
=
'
Mid
Boat
Ben
(
Opt1)'
midbt2
=
'
Mid
Boat
Ben
(
Opt2)'
viewers
=
'
Number
of
Viewing
Participants'
boaters
=
'
Number
of
Boating
Participants'
tripsv
=
'
Number
of
Viewing
Days'
tripsb
=
'
Number
of
Boating
Days'
title3
'
National
Benefits
(
includes
partial)';
title4
'
Viewing,
Boating
Activities
';
quit;

data
rundat.
rec_
othr(
keep
=
activity
benl1
benm1
benh1
benl2
benm2
benh2
pop);
set
rundat.
rec_
oth;

if
_
n_
=
1
then
do;
activity
=
"
Boating";
benl1
=
ab1_
low;
benm1
=
midbt1;
benh1
=
ab1_
high;
benl2
=
ab2_
low;
benm2
=
midbt2;
benh2
=
ab2_
high;
pop
=
boaters;
output;
activity
=
"
Viewing";
benl1
=
av1_
low;
benm1
=
midvw1;
benh1
=
av1_
high;
benl2
=
av2_
low;
benm2
=
midvw2;
benh2
=
av2_
high;
pop
=
viewers;
output;
234
end;
run;

data
allrec;
set
rundat.
rec_
fish
rundat.
rec_
othr;
run;

proc
means
sum
data=
allrec;
var
benl1
benm1
benh1
benl2
benm2
benh2;
output
out
=
rectot(
drop
=
_
type_
_
freq_)
sum
=
benl1
benm1
benh1
benl2
benm2
benh2;
quit;

data
totls(
keep
=
activity
benl1
benm1
benh1
benl2
benm2
benh2);
set
rectot;
if
_
n_
=
1
then
do;
activity
=
"
Recreational
Total";
output;
activity
=
"
Non­
Use
Benefits";
benl1
=
benl1
*
0.50;
benm1
=
benm1
*
0.50;
benh1
=
benh1
*
0.50;
benl2
=
benl2
*
0.50;
benm2
=
benm2
*
0.50;
benh2
=
benh2
*
0.50;
output;
activity
=
"
Total
Rec
and
Nonuse";
benl1
=
benl1
+
(
benl1
*
0.50);
benm1
=
benm1
+
(
benm1
*
0.50);
benh1
=
benh1
+
(
benh1
*
0.50);
benl2
=
benl2
+
(
benl2
*
0.50);
benm2
=
benm2
+
(
benm2
*
0.50);
benh2
=
benh2
+
(
benh2
*
0.50);
end;
run;

data
exlrec
(
keep=
titlecol
col1­
col8
label="
Recreational
and
Nonuse
Benefits
­
Weighted");
set
allrec
totls;
length
titlecol
$
50
col1
­
col8
$
128;

if
_
n_
=
1
then
do;
titlecol
=
"
Table:
Recreational
and
Non­
Use
Benefits,
Weighted
Estimates";
output;
titlecol
=
"
Run
on
&
sysdate";
output;
titlecol
=
"
";
output;
col2
=
"
Option
1";
col5
=
"
Option
2";
output;
col1
=
"
Activity";
col2
=
"
Low";
col3
=
"
Mid";
col4
=
"
High";
col5
=
"
Low";
col6
=
"
Mid";
col7
=
"
High";
235
col8
=
"
Population";
output;
end;

col1
=
trim(
activity);
col2
=
trim(
benl1);
col3
=
trim(
benm1);
col4
=
trim(
benh1);
col5
=
trim(
benl2);
col6
=
trim(
benm2);
col7
=
trim(
benh2);
col8
=
pop;
output;
run;

proc
export
data
=
exlrec
outfile
=
"
C:\
Output
Files\
Recreational
and
Nonuse
Benefits.
xls"
dbms=
excel2000
replace;
run;

data
reaches;
set
benrat;

if
exc_
b
>
0
then
baseexc
=
1;
else
baseexc
=
0;
if
exc_
1
>
0
then
post1
=
1;
else
post1=
0;
if
exc_
2
>
0
then
post2
=
1;
else
post2=
0;
if
bfrac_
1
=
1
then
elm_
1
=
1;
else
elm_
1
=
0;
if
bfrac_
1
<
1
and
bfrac_
1
>
0
then
red_
1
=
1;
else
red_
1
=
0;
if
bfrac_
2
=
1
then
elm_
2
=
1;
else
elm_
2
=
0;
if
bfrac_
2
<
1
and
bfrac_
2
>
0
then
red_
2
=
1;
else
red_
2
=
0;
run;

proc
means
sum
data=
reaches;
var
baseexc
post1
post2
elm_
1
elm_
2
red_
1
red_
2;
label
baseexc
=
'
Baseline
Reaches
Exceeding
AWQCs'
post1
=
'
Post
Reaches
Exceeding
AWQCs
(
Opt1)'
post2
=
'
Post
Reaches
Exceeding
AWQCs
(
Opt2)'
elm_
1
=
'
Reaches
Eliminating
(
Opt1)'
elm_
2
=
'
Reaches
Eliminating
(
Opt2)'
red_
1
=
'
Reaches
Reducing
(
Opt1)'
red_
2
=
'
Reaches
Reducing
(
Opt2)';
title3
'
Reach
Information';
title4
'
Sample
Level';
quit;

proc
means
sum
data=
reaches;
weight
weight;
var
baseexc
post1
post2
elm_
1
elm_
2
red_
1
red_
2;
label
baseexc
=
'
Baseline
Reaches
Exceeding
AWQCs'
post1
=
'
Post
Reaches
Exceeding
AWQCs
(
Opt1)'
post2
=
'
Post
Reaches
Exceeding
AWQCs
(
Opt2)'
elm_
1
=
'
Reaches
Eliminating
(
Opt1)'
elm_
2
=
'
Reaches
Eliminating
(
Opt2)'
236
red_
1
=
'
Reaches
Reducing
(
Opt1)'
red_
2
=
'
Reaches
Reducing
(
Opt2)';
title3
'
Reach
Information';
title4
'
National
Level';
quit;

/*
Determine
the
number
of
counties
affected
by
the
benefiting
reaches
*/

data
goodrch1;
set
benefit2;

if
bfrac_
1
<=
0
then
delete;
keep
reachnmb
weight;
run;

data
goodrch2;
set
benefit2;

if
bfrac_
2
<=
0
then
delete;

keep
reachnmb
weight;
run;

proc
sql;

create
table
cntyb1
as
select
cnty3.
reachnmb,
cntyfip,
weight
from
cnty3,
goodrch1
where
cnty3.
reachnmb
=
goodrch1.
reachnmb;

create
table
cntyb2
as
select
cnty3.
reachnmb,
cntyfip,
weight
from
cnty3,
goodrch2
where
cnty3.
reachnmb
=
goodrch2.
reachnmb;

create
table
cntyb1a
as
select
count(
distinct
cntyfip)
as
numcnty1
from
cntyb1;

create
table
cntyb2a
as
select
count(
distinct
cntyfip)
as
numcnty2
from
cntyb2;

create
table
cntyb1b
as
select
distinct
cntyfip,
avg(
weight)
as
wght
from
cntyb1
group
by
cntyfip;

create
table
cntyb1c
as
select
reachnmb,
count(
cntyfip)
as
cnties
from
cntyb1
group
by
reachnmb;
237
quit;

proc
print
data=
cntyb1a;
title3
'
Number
of
affected
counties
Option
1';
title4
'
Sample';
quit;

proc
print
data=
cntyb2a;
title3
'
Number
of
affected
counties
Option
2';
title4
'
Sample';
quit;

proc
means
sum
data=
cntyb1b;
var
wght;
title3
'
Sum
of
Counties
times
Average
weight';
quit;

proc
means
data=
cntyb1b;
var
wght;
title3
'
Mean
County
weight';
quit;

proc
means
data=
cntyb1c;
var
cnties;
title3
'
Average
counties
traversed
by
a
reach';
quit;

data
check;
set
benefit2;

if
bfrac_
1
<=
0
then
delete;
run;

data
check2;
merge
check
pops2;
by
reachnmb;
if
weight=.
then
delete;

keep
reachnmb
pop
totview
totboat
viewers
swimers
weight;
run;

/*
End
Other
Recreation
(
Sub
8).
sas
*/
238
Program
Output
239
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
56
Other
Recreation
(
Sub
8)
10:
59
Friday,
February
7,
2003
National
Benefits
(
includes
partial)
Viewing,
Boating
Activities
The
MEANS
Procedure
Variable
Label
Sum
                                                           
av1_
low
Avg
View
Benefits
­
Low
(
Opt
1)
56656709.01
av1_
high
Avg
View
Benefits
­
High(
Opt
1)
102289570
av2_
low
Avg
View
Benefits
­
Low
(
Opt
2)
79885242.54
av2_
high
Avg
View
Benefits
­
High(
Opt
2)
144226999
ab1_
low
Avg
Boat
Benefits
­
Low
(
Opt
1)
36651765.07
ab1_
high
Avg
Boat
Benefits
­
High(
Opt
1)
101522565
ab2_
low
Avg
Boat
Benefits
­
Low
(
Opt
2)
51175193.84
ab2_
high
Avg
Boat
Benefits
­
High(
Opt
2)
141751344
midvw1
Mid
View
Ben
(
Opt1)
79536038.26
midvw2
Mid
View
Ben
(
Opt2)
112144807
midbt1
Mid
Boat
Ben
(
Opt1)
65103399.01
midbt2
Mid
Boat
Ben
(
Opt2)
90900917.26
viewers
Number
of
Viewing
Participants
3118919.91
boaters
Number
of
Boating
Participants
2528083.11
tripsv
Number
of
Viewing
Days
23524290.01
tripsb
Number
of
Boating
Days
21075101.55
                                                           
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
59
Other
Recreation
(
Sub
8)
10:
59
Friday,
February
7,
2003
Reach
Information
National
Level
The
MEANS
Procedure
Variable
Label
Sum
                                                               
baseexc
Baseline
Reaches
Exceeding
AWQCs
394.4913361
post1
Post
Reaches
Exceeding
AWQCs
(
Opt1)
109.2789846
post2
Post
Reaches
Exceeding
AWQCs
(
Opt2)
0
elm_
1
Reaches
Eliminating
(
Opt1)
285.2123515
elm_
2
Reaches
Eliminating
(
Opt2)
394.4913361
red_
1
Reaches
Reducing
(
Opt1)
45.1180584
red_
2
Reaches
Reducing
(
Opt2)
0
                                                               
240
POTW
Benefits
241
POTW
Inhibitions
from
MP&
M
Facilities
242
"
Generate
Discharge
Events
(
Sub1).
sas"
Generates
a
data
set
of
pollutant
loading
events
and
their
corresponding
weights
for
each
RF1
reach
receiving
MP&
M
discharges.
A
special
set
of
event
loadings
discharged
to
POTWs
by
MP&
M
indirect
dischargers
is
created
without
employing
the
POTW
removal
rates.
See
Estimating
MP&
M
Discharge
Loadings
for
program
code.
243
"
POTW
Inhibitions
(
Sub
9).
sas"
Using
the
set
of
loadings
discharged
to
POTWs
by
MP&
M
facilities,
POTW
specific
pollutant
discharge
events
are
calculated.
These
pollutants
concentrations
are
then
compared
with
POTW
inhibition
values
and
exceedences
are
determined.
244
/*
Program:
POTW
Inhibitions
(
Sub
9).
sas
Author:
Abt
Associates
Inc;
Stuart
Smith,
based
on
INH_
FNL.
sas
by
Elena
Besedin,
Rob
Sartain
Date:
04/
21/
2000
Updated:
09/
02/
2002
1.
Calculates
MP&
M
pollutant
concentrations
in
influent
flow
to
the
POTWs
associated
with
the
MP&
M
sample
facilities;
2.
Compares
the
estimated
pollutant
concentrations
with
the
inhibition
values;
3.
Identifies
POTWs
in
which
pollutant
concentrations
exceed
inhibition
values;
4.
Calculates
the
total
number
of
exceedence
events
on
a
sample
and
national
basis;
*/

title2
'
POTW
Inhibitions
(
Sub
9)';

/*
Get
indirect
discharge
loads
*/

proc
sql;
create
table
potw
as
select
potw_
in.
npdes,
casno,
base,
treat1,
treat2,
poflow,
potw_
in.
weights,
potw_
in.
siteid,
size
from
rundat.
potw_
in,
mpm2.
facsize
where
potw_
in.
siteid
=
facsize.
siteid
order
by
npdes,
casno;
quit;

/*
Get
potw
flow
for
each
unique
npdes
*/
data
evntflo1;
set
potw;
run;
proc
sort
data=
evntflo1;
by
npdes
siteid;
quit;

data
evntflo2;
set
evntflo1;
by
npdes
siteid;

if
not
first.
npdes
then
delete;

flow
=
poflow;
keep
npdes
flow;
run;

/*
Pull
in
the
npdes
flow
*/

proc
sql;
create
table
potw1
as
select
potw.
npdes,
casno,
weights,
flow
as
potflow,
base,
treat1,
treat2,
siteid,
size,
0
as
old_
wght
from
potw,
evntflo2
where
potw.
npdes
=
evntflo2.
npdes
and
potw.
npdes
^=
'
'
and
casno
^=
'
'
order
by
npdes,
casno,
size,
weights;
quit;
245
/*
Keep
a
copy
of
initial
set
to
then
drop
observations
from
as
the
event
building
loops
*/

data
starter;
set
potw1;
run;

/*
MACRO
­
This
macro
creates
a
set
of
events
to
each
potw
for
each
chemical
*/
/*
based
on
the
facility
weight.
Loadings
are
summed
by
potw
by
chemical
and
*/
/*
by
mp&
m
facility
size.
Then
(
if
there
was
a
previous
build)
the
weight
*/
/*
is
adjusted
by
the
previous
weight
and
an
output
set
is
appended
to
the
*/
/*
previous
build
output
set.
Finally,
the
facilities
with
the
current
weight
*/
/*
are
removed
from
the
starter
data
set
and
the
build
loop
will
be
run
again
*/

%
macro
buildloop(
first=);
proc
sql;
/*
Sum
by
npdes,
casno,
and
mp&
m
facility
size.
Count
the
number
of
mp&
m
*/
/*
facilities
by
size
included
in
the
summed
loadings.
*/
create
table
summed
as
select
npdes,
casno,
size,
sum(
base)
as
base,
sum(
treat1)
as
treat1,
sum(
treat2)
as
treat2,
min(
potflow)
as
potflow,
count(
1)
as
facs
from
starter
group
by
npdes,
casno,
size
order
by
npdes,
casno,
size;

/*
Grab
the
smallest
weight
of
any
of
the
facilities
discharging
to
the
*/
/*
potw.
This
is
the
current
facility
weight.
Also
keep
the
weight
used
on
*/
/*
the
previous
build
loop.
*/
create
table
wght
as
select
npdes,
min(
weights)
as
weights,
min(
old_
wght)
as
old_
wght
from
starter
group
by
npdes;

/*
Grab
the
loadings
for
this
event
and
calculate
the
weight
of
the
event
*/
/*
Subtract
the
previous
build
weight
to
account
for
only
the
remaining
*/
/*
portion
of
the
differning
weights.
*/

create
table
outit
as
select
summed.*,(
weights
­
old_
wght)
as
weights
from
summed
left
join
wght
on
summed.
npdes
=
wght.
npdes;

/*
Rebuild
the
starter
set
by
dropping
the
facilities
with
the
current
*/
/*
weight.
*/
create
table
starter
as
select
starter.
npdes,
casno,
starter.
weights,
potflow,
base,
treat1,
treat2,
siteid,
size,
wght.
weights
as
old_
wght
from
starter
left
join
wght
on
starter.
npdes
=
wght.
npdes
where
starter.
weights
^=
wght.
weights;
quit;

/*
If
this
is
the
initial
build
loop,
create
the
output
data
set
*/
%
IF
&
first
=
1
%
THEN
%
DO;
data
outset;
set
outit;
246
run;
%
END;

/*
If
this
is
a
subsequent
build
loop,
append
to
the
output
data
set
*/
%
IF
&
first
=
0
%
THEN
%
DO;
data
outset;
set
outset
outit;
run;
%
END;
%
mend
buildloop;

/*
Determine
the
number
of
loops
required
to
build
all
the
needed
events.
*/
/*
The
number
of
loops
is
equal
to
the
maximum
number
of
different
weights
*/
/*
for
facilities
discharging
to
a
single
potw.
If
there
are
5
facilities
*/
/*
with
different
weights
discharging
to
a
potw
and
this
is
the
maximum
*/
/*
number
of
different
weights
to
any
potw,
then
the
loop
must
be
run
5
times
*/
/*
to
account
for
all
the
differential
weights.
Potws
with
fewer
different
*/
/*
weights
will
drop
out
when
their
maximum
has
been
reached
(
i.
e.
they
will
*/
/*
no
longer
appear
in
the
starter
data
set.
*/
proc
sql
noprint;
/*
Get
the
number
of
distinct
weights
across
facilities
for
a
given
potw
*/
create
table
maxw
as
select
distinct
npdes,
count(
distinct
weights)
as
numwghts
from
starter
group
by
npdes;

/*
Get
the
maximum
number
of
different
weights
among
the
potws
*/
create
table
maxwg
as
select
max(
numwghts)
as
maxnum
from
maxw;

/*
Save
the
maximum
number
of
weights
in
a
macro
variable.
This
is
the
*/
/*
number
of
build
loops
needed
to
exhaust
the
data.
*/
select
maxnum
into
:
max_
loop
from
maxwg;
quit;

/*
Run
the
initial
build
loop
*/
%
buildloop(
first=
1);

/*
Use
a
temporary
data
set
of
1
observation
to
allow
for
the
looping
of
*/
/*
of
the
build
events.
*/
data
_
temp;
set
maxwg;

/*
We
did
one
loop
already,
so
subtract
it
from
the
total
needed
*/
stopit
=
&
max_
loop
­
1;

/*
Call
the
macro
for
each
of
the
remaining
loops
needed
*/
do
i
=
1
to
stopit;
call
execute('%
buildloop(
first=
0)');
end;
run;
247
/*
Save
the
output
data
set
as
the
event
file
for
use
in
the
remainder
of
*/
/*
this
program
and
in
the
sludge
benefits
program
(
Sub
10).
*/
data
rundat.
potwevnt;
set
outset;

/*
rename
*/
evnt_
flo
=
potflow;
event_
wt
=
weights;
run;

/*
Calculate
influent
concentrations
*/
proc
sql;
create
table
potw2
as
select
npdes,
casno,
sum(
base)/
avg(
evnt_
flo)
as
concb,
sum(
treat1)/
avg(
evnt_
flo)
as
conct1,
sum(
treat2)/
avg(
evnt_
flo)
as
conct2,
event_
wt
from
rundat.
potwevnt
group
by
casno,
npdes,
event_
wt
order
by
casno,
npdes,
event_
wt;
quit;

/*
Get
Inhibition
Values
*/

data
limits;
set
mpm2.
chemdata;
if
inhibit;
keep
casno
inhibit;
run;

proc
sort;
by
casno;
quit;

/*
Compare
influent
concentrations
with
inhibition
criteria
*/

data
inhibit;
merge
potw2
limits;
by
casno;
if
inhibit;

keep
npdes
casno
inhibit
concb
conct1
conct2
event_
wt;

if
concb
<
inhibit
then
testb=
0;
else
testb=
1;
if
conct1
<
inhibit
then
testn1=
0;
else
testn1=
1;
if
conct2
<
inhibit
then
testn2=
0;
else
testn2=
1;

keep
npdes
casno
testb
testn1
testn2
event_
wt;
run;

proc
sort
data=
inhibit;
by
npdes
casno
event_
wt;
quit;

/*
Proc
SQL
calculates:

1.
Total
number
exceedence
events
by
pollutant;
2.
Number
of
exceedence
events
per
POTW/
option;
3.
Total
Number
of
affected
POTWs
on
a
sample/
national
basis
*/
248
proc
sql;

/*
Total
number
of
exceedence
events
by
pollutant
*/

create
table
inhbn0
as
select
inhibit.
casno,
min(
chemical)
as
chemname,
sum(
testb)
as
occurb,
sum(
testn1)
as
occurn1,
sum(
testn2)
as
occurn2
from
inhibit,
mpm2.
chemdata
where
testb>
0
and
inhibit.
casno=
chemdata.
casno
group
by
inhibit.
casno
order
by
inhibit.
casno;

/*
Total
number
of
exceedence
events
by
POTW/
option
*/

create
table
inhbn1
as
select
npdes,
sum(
testb)
as
excurb,
sum(
testn1)
as
excurn1,
sum(
testn2)
as
excurn2,
event_
wt,
case
when
sum(
testb)>
0
then
1
else
0
end
as
potwb,
case
when
sum(
testn1)>
0
then
1
else
0
end
as
potwn1,
case
when
sum(
testn2)>
0
then
1
else
0
end
as
potwn2
from
inhibit
where
testb>
0
group
by
npdes,
event_
wt
order
by
npdes,
event_
wt;

/*
Total
Number
of
Exceedence
Events
by
Chemical
on
a
National
Basis
*/

create
table
inh_
ntl
as
select
chemical,
sum(
testb*
event_
wt)
as
chemb,
sum(
testn1*
event_
wt)
as
chemn1,
sum(
testn2*
event_
wt)
as
chemn2
from
inhibit,
mpm2.
chemdata
where
testb>
0
and
inhibit.
casno=
chemdata.
casno
group
by
chemical
order
by
chemical;

/*
Total
Number
of
Exceedence
Events
on
a
National
Basis
*/

create
table
inh_
ntl2
as
select
sum(
excurb*
event_
wt)
label='
Number
of
Exceedence
Events
(
Baseline)',
sum(
potwb*
event_
wt)
label='
Number
of
Affected
POTWs
(
Baseline)',
sum
(
excurn1*
event_
wt)
label='
Number
of
Exceedence
Events
(
Opt
1)',
sum(
potwn1*
event_
wt)
label='
Number
of
Affected
POTWs
(
Opt
1)',
sum
(
excurn2*
event_
wt)
label='
Number
of
Exceedence
Events
(
Opt
2)',
sum(
potwn2*
event_
wt)
label='
Number
of
Affected
POTWs
(
Opt
2)'
from
inhbn1;

/*
Total
Number
of
Exceedence
Events
on
a
Sample
Basis
*/

create
table
inh_
smpl
as
select
excurb
label='
Number
of
Exceedence
Events
(
Baseline)',
potwb
label='
Number
of
Affected
POTWs
(
Baseline)',
excurn1
label='
Number
of
Exceedence
Events
(
Opt
1)',
potwn1
label='
Number
of
Affected
POTWs
(
Opt
1)',
249
excurn2
label='
Number
of
Exceedence
Events
(
Opt
2)',
potwn2
label='
Number
of
Affected
POTWs
(
Opt
2)'
from
inhbn1;
quit;

proc
print
data=
inh_
ntl2
label
;

title3
'
Total
Number
of
POTWs
Affected
by
Inhibition
Problems
caused
by';
title4
'
MP&
M
discharges
on
a
national
basis.';

proc
print
data=
inh_
ntl;
label
chemb
='
Number
of
Exceedence
Events
(
Baseline)'
chemn1
='
Number
of
Exceedence
Events
(
Opt
1)'
chemn2
='
Number
of
Exceedence
Events
(
Opt
2)';
title3
'
Total
number
of
exceedence
events
caused
by
MP&
M';
title4
'
discharges
by
chemical
on
a
national
basis';

proc
print
data=
inhbn0;
label
occurb
='
Number
of
Exceedence
Events
(
Baseline)'
occurn1
='
Number
of
Exceedence
Events
(
Opt
1)'
occurn2
='
Number
of
Exceedence
Events
(
Opt
2)';
title3
'
Total
number
of
excedence
events
caused
MP&
M
discharges';
title4
'
by
chemical
on
a
sample
basis';

proc
print
data=
inh_
smpl;
sum
excurb
excurn1
excurn2
potwb
potwn1
potwn2;
label
excurb
=
'
Number
of
Exceedence
Events
(
Baseline)'
excurn1
=
'
Number
of
Exceedence
Events
(
Opt
1)'
excurn2
=
'
Number
of
Exceedence
Events
(
Opt
2)'
potwb=
'
Number
of
Affected
POTWs
(
Baseline)'
potwn1=
'
Number
of
Affected
POTWs
(
Opt
1)'
potwn2=
'
Number
of
Affected
POTWs
(
Opt
2)';
title3
'
Total
Number
of
Exceedence
Events
by
NPDES
on
a
sample
basis';
quit;

data
reduc;
set
inhbn1;

if
excurn1
<
excurb
and
excurn1
>
0
then
red1
=
1;
else
red1
=
0;
if
excurn2
<
excurb
and
excurn2
>
0
then
red2
=
1;
else
red2
=
0;
run;

proc
means
sum
data=
reduc;
var
red1
red2;
label
red1
=
'#
POTWs
with
red.
poll.
inhibit.(
Opt1)'
red2
=
'#
POTWs
with
red.
poll.
inhibit.(
Opt2)';
title3
'
POTWS
with
Reduced
Inhibitions';
title4
'
SAMPLE';
quit;

proc
means
sum
data=
reduc;
weight
event_
wt;
250
var
red1
red2;
label
red1
=
'#
POTWs
with
red.
poll.
inhibit.(
Opt1)'
red2
=
'#
POTWs
with
red.
poll.
inhibit.(
Opt2)';
title3
'
POTWS
with
Reduced
Inhibitions';
title4
'
NATIONAL';
quit;

/*
End
POTW
Inhibitions
(
Sub
9).
sas
*/
251
Program
Output
252
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
65
POTW
Inhibitions
(
Sub
9)
10:
59
Friday,
February
7,
2003
Total
Number
of
POTWs
Affected
by
Inhibition
Problems
caused
by
MP&
M
discharges
on
a
national
basis.

Number
of
Number
of
Number
of
Number
of
Number
of
Number
of
Exceedence
Affected
Exceedence
Affected
Exceedence
Affected
Events
POTWs
Events
POTWs
(
Opt
Events
POTWs
(
Opt
Obs
(
Baseline)
(
Baseline)
(
Opt
1)
1)
(
Opt
2)
2)

1
139.186
51.1227
115.188
30.4689
0
0
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
66
POTW
Inhibitions
(
Sub
9)
10:
59
Friday,
February
7,
2003
Total
number
of
exceedence
events
caused
by
MP&
M
discharges
by
chemical
on
a
national
basis
Obs
CHEMICAL
chemb
chemn1
chemn2
1
Chromium
30.4689
27.1252
0
2
Copper
27.1252
27.1252
0
3
Lead
39.2507
30.4689
0
4
Silver
42.3408
30.4689
0
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
70
POTW
Inhibitions
(
Sub
9)
10:
59
Friday,
February
7,
2003
POTWS
with
Reduced
Inhibitions
NATIONAL
The
MEANS
Procedure
Variable
Label
Sum
                                                                  
red1
#
POTWs
with
red.
poll.
inhibit.(
Opt1)
3.3436324
red2
#
POTWs
with
red.
poll.
inhibit.(
Opt2)
0
                                                                  
253
Sludge
Benefits
254
"
POTW
Inhibitions
(
Sub
9).
sas"
Using
the
set
of
loadings
discharged
to
POTWs
by
MP&
M
facilities,
POTW
specific
pollutant
events
are
calculated
The
data
set
of
these
events
is
outputed.
See
POTW
Inhibitions
from
MP&
M
Facilities
for
program
code
and
output.
255
"
Sldg
MP&
M
Based
(
Sub
10).
sas"
Using
the
data
set
of
POTW
pollutants
events,
MP&
M
pollutant
concentrations
in
sewage
sludge
are
estimated.
These
concentrations
are
compared
with
use/
disposal
criteria
for
given
disposal
practices.
Shifts
in
POTW
disposal
practices
from
reduced
MP&
M
loadings
are
determined
and
monetized.
256
/*
Program:
Sldg
MP&
M
Based
(
Sub
10).
sas
Authors:
Stuart
Smith,
Elena
Besedin,
Rob
Sartain
(
based
on
sldg.
sas
for
the
IL
project.)
Date
Modified:
08/
12/
2002
Modified
By:
Stuart
Smith,
Abt.
Associates,
Inc.

1.
Calculates
MP&
M
pollutant
concentrations
in
the
sewage
sludge
generated
by
POTWs
associated
with
the
MP&
M
sample
facilities;
2.
Compares
the
estimated
sludge
pollutant
concentrations
with
the
the
sewage
sludge
use/
disposal
criteria;
3.
Identifies
POTWs
in
which
pollutant
concentrations
exceed
sewage
sludge
use/
disposal
criteria
for
a
given
use/
disposal
practice;
4.
Estimates
shifts
in
sewage
sludge
use/
disposal
practices
due
to
the
reduced
MP&
M
discharges.
*/

title2
'
Sludge
MP&
M
Based
(
Sub
10)';

/*
Separate
potws
by
flow
volume
STRATUM
=
1;
small
size
(
daily
flow
rate
from
2
to
10
mg/
day)
STRATUM
=
2;
medium
size
(
daily
flow
rate
from
10
to
50
mg/
day)
STRATUM
=
3;
large
size
(
daily
flow
rate
>
50
mg/
day)

convert
the
event
flow
in
L/
day
to
MG/
day
dayflow
=
(
evnt_
flo*
0.2641721)/
1000000;

if
dayflow
<
10
then
strat=
1;
if
dayflow
>=
10
and
dayflow
<
50
then
strat=
2;
if
dayflow
>=
50
then
strat=
3;
*/

/*
Bring
in
the
potw
event
loadings
file
and
generate
stratums
*/
proc
sql;

create
table
potw_
0
as
select
npdes,
casno,
base
as
ldb,
treat1
as
ldt1,
treat2
as
ldt2,
event_
wt
as
smplwt,
evnt_
flo
as
potwflow,
facs,
size
as
facsze,
case
when
((
evnt_
flo*
0.2641721)/
1000000)
<
10
then
1
when
((
evnt_
flo*
0.2641721)/
1000000)
>=
50
then
3
else
2
end
as
stratum
from
rundat.
potwevnt
order
by
npdes,
casno,
smplwt;

/*
Calculate
Influent
Concentrations
and
obatin
sludge
criterion
*/

create
table
potw_
t
as
select
npdes,
stratum,
casno,
facs,(
ldb/
potwflow)
as
concb,(
ldt1/
potwflow)
as
conc1,(
ldt2/
potwflow)
as
conc2,
la_
h,
la_
l,
sludcrit,
surfdis,
257
smplwt,
twf_
remr.
name,
potw_
rem
as
potwrem,
facsze
as
size
from
potw_
0,
mpm2.
sldg_
cri,
mpm2.
twf_
remr
where
potw_
0.
casno
=
sldg_
cri.
casnum
and
potw_
0.
casno
=
twf_
remr.
cas
and
potw_
rem
is
not
missing
order
by
npdes,
casno,
smplwt;
quit;

/*
Calculate
Sludge
Concentrations
*/
/*
sewage
sludge
generation
factor
is
5.96
*/

data
conc_
sl;
set
potw_
t;

/*
Calculate
the
total
concentrations
*/
if
stratum
=
1
then
do;
if
size
=
'
s'
then
avgfac
=
32.81;
if
size
=
'
m'
then
avgfac
=
2.48;
if
size
=
'
l'
then
avgfac
=
1.21;

if
casno
=
'
7439921'
then
cncb=(
avgfac*
concb)/(
facs);
/*
Lead*/
if
casno
=
'
7440382'
then
cncb=(
avgfac*
concb)/(
facs);
/*
Arse*/
if
casno
=
'
7440020'
then
cncb=(
avgfac*
concb)/(
facs);
/*
Nick*/
if
casno
=
'
7440439'
then
cncb=(
avgfac*
concb)/(
facs);
/*
Cadm*/
if
casno
=
'
7440508'
then
cncb=(
avgfac*
concb)/(
facs);
/*
Copp*/
if
casno
=
'
7440666'
then
cncb=(
avgfac*
concb)/(
facs);
/*
Zinc*/
if
casno
=
'
7782492'
then
cncb=(
avgfac*
concb)/(
facs);
/*
Seln*/
if
casno
=
'
7439976'
then
cncb=(
avgfac*
concb)/(
facs);
/*
Merc*/

/*
Calculate
loadings
from
non­
MP&
M
facilities.
These
loadings
don't
change
under
the
post­
complaince
scenario.
*/
cnc1
=
(
conc1*
avgfac)/
facs;
cnc2
=
(
conc2*
avgfac)/
facs;
end;
if
stratum
=
2
then
do;
if
size
=
'
s'
then
avgfac
=
72.12;
if
size
=
'
m'
then
avgfac
=
7.99;
if
size
=
'
l'
then
avgfac
=
2.66;

if
casno
=
'
7439921'
then
cncb=(
avgfac*
concb)/(
facs);
/*
Lead*/
if
casno
=
'
7440382'
then
cncb=(
avgfac*
concb)/(
facs);
/*
Arse*/
if
casno
=
'
7440020'
then
cncb=(
avgfac*
concb)/(
facs);
/*
Nick*/
if
casno
=
'
7440439'
then
cncb=(
avgfac*
concb)/(
facs);
/*
Cadm*/
if
casno
=
'
7440508'
then
cncb=(
avgfac*
concb)/(
facs);
/*
Copp*/
if
casno
=
'
7440666'
then
cncb=(
avgfac*
concb)/(
facs);
/*
Zinc*/
if
casno
=
'
7782492'
then
cncb=(
avgfac*
concb)/(
facs);
/*
Seln*/
if
casno
=
'
7439976'
then
cncb=(
avgfac*
concb)/(
facs);
/*
Merc*/

/*
Calculate
loadings
from
non­
MP&
M
facilities.
These
loadings
don't
change
under
the
post­
complaince
scenario.
*/
cnc1
=
(
conc1*
avgfac)/
facs;
cnc2
=
(
conc2*
avgfac)/
facs;
end;
if
stratum
=
3
then
do;
258
if
size
=
'
s'
then
avgfac
=
147.68;
if
size
=
'
m'
then
avgfac
=
24.46;
if
size
=
'
l'
then
avgfac
=
10.43;

if
casno
=
'
7439921'
then
cncb=(
avgfac*
concb)/(
facs);
/*
Lead*/
if
casno
=
'
7440382'
then
cncb=(
avgfac*
concb)/(
facs);
/*
Arse*/
if
casno
=
'
7440020'
then
cncb=(
avgfac*
concb)/(
facs);
/*
Nick*/
if
casno
=
'
7440439'
then
cncb=(
avgfac*
concb)/(
facs);
/*
Cadm*/
if
casno
=
'
7440508'
then
cncb=(
avgfac*
concb)/(
facs);
/*
Copp*/
if
casno
=
'
7440666'
then
cncb=(
avgfac*
concb)/(
facs);
/*
Zinc*/
if
casno
=
'
7782492'
then
cncb=(
avgfac*
concb)/(
facs);
/*
Seln*/
if
casno
=
'
7439976'
then
cncb=(
avgfac*
concb)/(
facs);
/*
Merc*/

/*
Calculate
loadings
from
non­
MP&
M
facilities.
These
loadings
don't
change
under
the
post­
complaince
scenario.
*/
cnc1
=
(
conc1*
avgfac)/
facs;
cnc2
=
(
conc2*
avgfac)/
facs;
end;
run;

/*
Sum
up
the
loadings
across
chemicals
and
POTWs
*/

/*
Separate
POTWS
by
size
*/
proc
sql;

create
table
small
as
select
distinct
npdes,
1
as
small
from
conc_
sl
where
size='
s'
order
by
npdes;

create
table
med
as
select
distinct
npdes,
1
as
med
from
conc_
sl
where
size='
m'
order
by
npdes;

create
table
large
as
select
distinct
npdes,
1
as
large
from
conc_
sl
where
size='
l'
order
by
npdes;

/*
Sum
over
checmicals
and
POTWs
*/
create
table
bypotw
as
select
npdes,
casno,
min(
stratum)
as
stratum,
sum(
cncb)
as
bas,
sum(
cnc1)
as
treat1,
sum(
cnc2)
as
treat2,
avg(
la_
h)
as
la_
h,
avg(
la_
l)
as
la_
l,
avg(
sludcrit)
as
sludcrit,
avg(
surfdis)
as
surfdis,
smplwt,
avg(
potwrem)
as
potwrem,
min(
name)
as
name
from
conc_
sl
group
by
npdes,
casno,
smplwt
order
by
npdes,
casno,
smplwt;
quit;
259
/*
Merge
sums
and
sizes
*/
data
concsl2;
merge
bypotw
small
med
large;
by
npdes;

if
small=.
then
small
=
0;
if
med=.
then
med
=
0;
if
large=.
then
large
=
0;

array
sm{*}
sm1
­
sm8;
array
md{*}
md1
­
md8;
array
lg{*}
lg1
­
lg8;

/*
Percentage
of
chemical
coming
from
MP&
M
facilities
based
on
National
Sludge
Survey
of
POTWS
*/
sm1=
0.138;
sm2=
0.074;
sm3=
0.251;
sm4=
0.161;
sm5=
0.189;
sm6=
0.202;
sm7=
0.072;
sm8=
0.079;

md1=
0.198;
md2=
0.140;
md3=
0.244;
md4=
0.234;
md5=
0.216;
md6=
0.160;
md7=
0.085;
md8=
0.208;

lg1=
0.103;
lg2=
0.070;
lg3=
0.158;
lg4=
0.128;
lg5=
0.109;
lg6=
0.082;
lg7=
0.033;
lg8=
0.060;

/*
Calculate
the
amount
of
sludge
coming
from
Non­
MP&
M
facilities
*/
if
casno
=
'
7439921'
then
other=
bas/(
sm1*
small
+
md1*
med
+
lg1*
large);/*
Lead*/
if
casno
=
'
7440382'
then
other=
bas/(
sm2*
small
+
md2*
med
+
lg2*
large);/*
Arse*/
if
casno
=
'
7440020'
then
other=
bas/(
sm3*
small
+
md3*
med
+
lg3*
large);/*
Nick*/
if
casno
=
'
7440439'
then
other=
bas/(
sm4*
small
+
md4*
med
+
lg4*
large);/*
Cadm*/
if
casno
=
'
7440508'
then
other=
bas/(
sm5*
small
+
md5*
med
+
lg5*
large);/*
Copp*/
if
casno
=
'
7440666'
then
other=
bas/(
sm6*
small
+
md6*
med
+
lg6*
large);/*
Zinc*/
if
casno
=
'
7782492'
then
other=
bas/(
sm7*
small
+
md7*
med
+
lg7*
large);/*
Seln*/
if
casno
=
'
7439976'
then
other=
bas/(
sm8*
small
+
md8*
med
+
lg8*
large);/*
Merc*/

/*
Total
concentration
is
the
sum
of
MP&
M
loadings
and
loadings
from
Non­
MP&
M
facilities
*/
cncb
=
bas
+
other;
cnc1
=
treat1
+
other;
cnc2
=
treat2
+
other;

/*
Apply
sludge
generation
factor
and
account
for
removal
percentage
*/

sludgeb
=
cncb
*
(
potwrem/
100)
*
5.96;
sludge1
=
cnc1
*
(
potwrem/
100)
*
5.96;
sludge2
=
cnc2
*
(
potwrem/
100)
*
5.96;

/*
Calculate
Pre
and
Post
Compliance
Concentrations
*/

base
=
sludgeb;
post1
=
sludge1;
post2
=
sludge2;

run;
260
/*
Compare
Calculated
Sludge
Concentrations
With
the
Sludge
Disposal
Criteria*/

data
sludge1;
set
concsl2;

/*
Compare
to
limits
for
land­
applied
high
*/
if
base
<
la_
h
then
critb_
h
=
0;
else
critb_
h
=
1;
if
post1
<
la_
h
then
crit1_
h
=
0;
else
crit1_
h
=
1;
if
post2
<
la_
h
then
crit2_
h
=
0;
else
crit2_
h
=
1;

/*
Compare
to
limits
for
land­
applied
low
*/
if
base
<
la_
l
then
critb_
l
=
0;
else
critb_
l
=
1;
if
post1
<
la_
l
then
crit1_
l
=
0;
else
crit1_
l
=
1;
if
post2
<
la_
l
then
crit2_
l
=
0;
else
crit2_
l
=
1;

/*
Assume
those
not
qualified
for
la_
l
use
mix
disposal
*/
if
critb_
l
=
1
then
critb_
m
=
1;
else
critb_
m
=
0;
if
crit1_
l
=
1
then
crit1_
m
=
1;
else
crit1_
m
=
0;
if
crit2_
l
=
1
then
crit2_
m
=
1;
else
crit2_
m
=
0;

run;

/*
Calculate
Sludge
Quantity
produced
by
the
POTWs
associated
with
MP&
M
facilities
in
millions
of
dry
metric
tons
(
DMT)
*/
proc
sql;
create
table
sldg_
wht
as
select
npdes,((
poflow*
0.2641721*
365)/
1000000)*
0.6363
as
sl_
wght
from
rundat.
potw_
in
where
npdes
^=
'
'
and
npdes
^=
'
Not
Found'
order
by
npdes;
quit;

/*
Keep
one
observation
per
unique
NPDES
*/
proc
sort
nodupkey
data=
sldg_
wht;
by
npdes;
quit;

/*
Estimate
Number
of
Exceedence
Events
by
Stratum/
Chemicals
on
a
Sample
Basis
*/

proc
sql;

create
table
sldg_
1
as
select
stratum,
casno,
min(
name)
as
polltnt,
sum(
critb_
h)
as
occ_
bh,
sum(
crit1_
h)
as
occ_
1h,
sum(
crit2_
h)
as
occ_
2h,
sum(
critb_
l)
as
occ_
bl,
sum(
crit1_
l)
as
occ_
1l,
sum(
crit2_
l)
as
occ_
2l,
sum
(
critb_
m)
as
occ_
bm,
sum(
crit1_
m)
as
occ_
1m,
sum(
crit2_
m)
as
occ_
2m,
sum(
sl_
wght)
as
weight,
case
when
sum(
crit1_
h)>
0
then
sum(
sl_
wght)
else
0
end
as
weight1,
case
when
sum(
crit2_
h)>
0
then
sum(
sl_
wght)
else
0
261
end
as
weight2
from
sludge1,
sldg_
wht
where
critb_
h>
0
and
sludge1.
npdes
=
sldg_
wht.
npdes
group
by
stratum,
casno
order
by
stratum,
casno;

create
table
chem_
nat
as
select
stratum,
casno,
min(
name)
as
polltnt,
sum(
critb_
h*
smplwt)
as
occ_
bh,
sum(
crit1_
h*
smplwt)
as
occ_
1h,
sum(
crit2_
h*
smplwt)
as
occ_
2h,
sum(
critb_
l*
smplwt)
as
occ_
bl,
sum(
crit1_
l*
smplwt)
as
occ_
1l,
sum(
crit2_
l*
smplwt)
as
occ_
2l,
sum
(
critb_
m*
smplwt)
as
occ_
bm,
sum(
crit1_
m*
smplwt)
as
occ_
1m,
sum(
crit2_
m*
smplwt)
as
occ_
2m,
sum(
sl_
wght*
smplwt)
as
weight,
case
when
sum(
crit1_
h)>
0
then
sum(
sl_
wght*
smplwt)
else
0
end
as
weight1,
case
when
sum(
crit2_
h)>
0
then
sum(
sl_
wght*
smplwt)
else
0
end
as
weight2
from
sludge1,
sldg_
wht
where
critb_
h>
0
and
sludge1.
npdes
=
sldg_
wht.
npdes
group
by
stratum,
casno
order
by
stratum,
casno;

/*
Estimate
Number
of
Exceedence
Events
by
POTW/
Option
on
a
Sample
Basis
*/

create
table
sldg_
2
as
select
sludge1.
npdes,
stratum,
sum(
critb_
h)
as
hla_
b,
sum(
crit1_
h)
as
hla_
1,
sum(
crit2_
h)
as
hla_
2,
sum(
critb_
l)
as
lla_
b,
sum(
crit1_
l)
as
lla_
1,
sum(
crit2_
l)
as
lla_
2,
sum(
critb_
m)
as
mixb,
sum(
crit1_
m)
as
mix1,
sum(
crit2_
m)
as
mix2,
smplwt,
case
when
sum(
critb_
h)>
0
then
avg(
sl_
wght)
else
0
end
as
weight,
case
when
sum(
crit1_
h)>
0
then
avg(
sl_
wght)
else
0
end
as
weight1,
case
when
sum(
crit2_
h)>
0
then
avg(
sl_
wght)
else
0
end
as
weight2,
case
when
sum(
critb_
h)>
0
then
1
else
0
end
as
potw_
hb,
case
when
sum(
crit1_
h)
>
0
then
1
else
0
262
end
as
potw_
h1,
case
when
sum(
crit2_
h)
>
0
then
1
else
0
end
as
potw_
h2,
case
when
sum(
critb_
l)>
0
then
1
else
0
end
as
potw_
lb,
case
when
sum(
crit1_
l)>
0
then
1
else
0
end
as
potw_
l1,
case
when
sum(
crit2_
l)>
0
then
1
else
0
end
as
potw_
l2,
case
when
sum
(
critb_
m)>
0
then
1
else
0
end
as
potw_
mb,
case
when
sum(
crit1_
m)>
0
then
1
else
0
end
as
potw_
m1,
case
when
sum(
crit2_
m)>
0
then
1
else
0
end
as
potw_
m2
from
sludge1,
sldg_
wht
where
critb_
h>
0
and
sludge1.
npdes
=
sldg_
wht.
npdes
group
by
stratum,
sludge1.
npdes,
smplwt
order
by
stratum,
npdes,
smplwt;
quit;

data
sludge2;
set
sldg_
2;
proc
sort
nodupkey;
by
stratum
npdes
smplwt;
quit;

proc
sql;

/*
Estimate
the
Total
Number
of
Exceedence
Events
on
a
National
Basis
by
Sewage
Sludge
Disposal
Practice/
Option
*/

create
table
ntl_
slg1
as
select
stratum,
sum(
hla_
b*
smplwt)
as
ex_
bh,
sum(
hla_
1*
smplwt)
as
ex_
1h,
sum(
hla_
2*
smplwt)
as
ex_
2h,
sum(
lla_
b*
smplwt)
as
ex_
bl,
sum(
lla_
1*
smplwt)
as
ex_
1l,
sum(
lla_
2*
smplwt)
as
ex_
2l,
sum(
mixb*
smplwt)
as
ex_
bm,
sum(
mix1*
smplwt)
as
ex_
1m,
sum(
mix2*
smplwt)
as
ex_
2m,
sum(
weight*
smplwt)
as
t_
wght,
sum(
weight1*
smplwt)
as
t_
1wght,
sum(
weight2*
smplwt)
as
t_
2wght
from
sludge2
where
hla_
b>
0
group
by
stratum
263
order
by
stratum;

/*
Estimate
the
Total
Number
of
POTWs
That
Don't
Meet
a
Given
Sludge
Disposal
Standard
*/

create
table
ntl_
slg2
as
select
stratum,
sum(
potw_
hb*
smplwt)
as
ex_
bh,
sum(
potw_
h1*
smplwt)
as
ex_
1h,
sum(
potw_
h2*
smplwt)
as
ex_
2h,
sum(
potw_
lb*
smplwt)
as
ex_
bl,
sum(
potw_
l1*
smplwt)
as
ex_
1l,
sum(
potw_
l2*
smplwt)
as
ex_
2l,
sum(
potw_
mb*
smplwt)
as
ex_
bm,
sum(
potw_
m1*
smplwt)
as
ex_
1m,
sum(
potw_
m2*
smplwt)
as
ex_
2m,
sum(
weight*
smplwt)
as
t_
wght,
sum(
weight1*
smplwt)
as
t_
1wght,
sum(
weight2*
smplwt)
as
t_
2wght
from
sludge2
where
hla_
b>
0
group
by
stratum
order
by
stratum;
quit;

/*
Indentify
Shifts
in
Sludge
Use/
Disposal
Practices
from
Land
Application
Low
to
Land
Application
High
on
a
Sample
Basis
*/
proc
sql;

create
table
shifts1
as
select
stratum,
npdes,
weight,
count(
distinct
npdes)
as
upgrade,
smplwt,
case
when
hla_
1=
0
then
'
lla_
llh'
when
hla_
1>
0
and
lla_
1=
0
then
'
nswitch'
else
'
downgrd'
end
as
switch1,
case
when
hla_
2=
0
then
'
lla_
llh'
when
hla_
2>
0
and
lla_
2=
0
then
'
nswitch'
else
'
downgrd'
end
as
switch2
from
sludge2
where
hla_
b
>
0
and
lla_
b
=
0
order
by
stratum,
npdes,
smplwt;
quit;

data
shift11;
set
shifts1;
proc
sort;
by
stratum
npdes
switch1
switch2;
quit;

/*
Indentify
Shifts
in
the
Sewage
Sludge
Disposal
Practices
from
mix
to
(
1)
Land
Application
High;
(
2)
Land
Application
Low
;
*/

proc
sql;
create
table
shifts3
as
select
stratum,
npdes,
weight,
count(
distinct
npdes)
as
upgrade,
smplwt,
case
264
when
hla_
1=
0
then
'
mix_
llh'
when
hla_
1>
0
and
lla_
1=
0
then
'
mix_
lla'
else
'
nswitch'
end
as
switch1,
case
when
hla_
2=
0
then
'
mix_
llh'
when
hla_
2>
0
and
lla_
2=
0
then
'
mix_
lla'
else
'
nswitch'
end
as
switch2
from
sludge2
where
mixb>
0
order
by
stratum,
npdes,
smplwt;
quit;

data
shift13;
set
shifts3;
proc
sort;
by
stratum
npdes
switch1
switch2;
quit;

/*
Calculate
Savings
From
Shifts
in
Sewage
Sludge
Disposal
Practices
Note
that
Savings
From
the
Reduced
Record
Keeping
is
Estimated
Separately
*/

data
savings;
set
shift11
shift13;
if
npdes
ne
'
';

keep
stratum
npdes
switch1
switch2
weight
smplwt;
run;

/*
Estimate
Cost
Savings
from
Shifts
to
Less
Costly
Sewage
Sludge
Disposal
Practices
on
a
Sample
Basis
The
amount
newly
qualified
(
weight)
sludge
must
be
adjusted
since
not
all
can
be
land
applied.
43.3%
of
the
benefitting
sludge
can
be
land
applied.
Of
the
remaining
56.7%
of
the
sludge,
11%
can
be
bagged
and
sold,
which
is
6.4%
of
the
total
newly
qualified.

So,
the
benefitting
sludge
is
really
the
43.3%
that
can
be
land
applied
AND
the
6.4%
which
is
bagged
and
sold.

Thus,
49.7%
of
the
total
newly
qualified
sludge
for
land
application
is
used
in
the
cost
savings
estimates.
*/

proc
sql;

create
table
svngs
as
select
stratum,
npdes,
switch1,
switch2,
weight,
smplwt,
case
when
switch1='
lla_
llh'
then
weight*
0.684
when
switch1='
mix_
llh'
then
0.497*
weight*
0.75*
0.39*
103.82
+
0.497*
weight*
0.75*
0.61*
100.44
+
0.497*
weight*
0.25*
0.39*
95.91
+
0.497*
weight*
0.25*
0.61*
69.96
when
switch1='
mix_
lla'
then
0.497*
weight*
0.39*
103.82
+
0.497*
weight*
0.61*
100.44
when
switch1='
nswitch'
then
0
265
else
0
end
as
savel1,
case
when
switch2='
lla_
llh'
then
weight*
0.684
when
switch2='
mix_
llh'
then
0.497*
weight*
0.75*
0.39*
103.82
+
0.497*
weight*
0.75*
0.61*
100.44
+
0.497*
weight*
0.25*
0.39*
95.91
+
0.497*
weight*
0.25*
0.61*
69.96
when
switch2='
mix_
lla'
then
0.497*
weight*
0.39*
103.82
+
0.497*
weight*
0.61*
100.44
when
switch2='
nswitch'
then
0
else
0
end
as
savel2,
case
when
switch1='
lla_
llh'
then
weight*
1.362
when
switch1='
mix_
llh'
then
0.497*
weight*
0.75*
0.39*
103.82
+
0.497*
weight*
0.75*
0.61*
100.44
+
0.497*
weight*
0.25*
0.39*
95.91
+
0.497*
weight*
0.25*
0.61*
69.96
when
switch1='
mix_
lla'
then
0.497*
weight*
0.39*
103.82
+
0.497*
weight*
0.61*
100.44
when
switch1='
nswitch'
then
0
else
0
end
as
saveh1,
case
when
switch2='
lla_
llh'
then
weight*
1.362
when
switch2='
mix_
llh'
then
0.497*
weight*
0.75*
0.39*
103.82
+
0.497*
weight*
0.75*
0.61*
100.44
+
0.497*
weight*
0.25*
0.39*
95.91
+
0.497*
weight*
0.25*
0.61*
69.96
when
switch2='
mix_
lla'
then
0.497*
weight*
0.39*
103.82
+
0.497*
weight*
0.61*
100.44
when
switch2='
nswitch'
then
0
else
0
end
as
saveh2
from
savings
order
by
stratum,
npdes,
switch1,
switch2;
quit;

/*
Estimate
Cost
Savings
from
Shifts
to
Less
Costly
Sewage
Sludge
Disposal
Practices
on
a
National
Basis
*/

proc
sql;
create
table
ntlshft1
as
select
stratum,
switch1,
sum(
smplwt)
as
potwntl,
sum(
weight*
smplwt)
as
totwght,
sum(
savel1*
smplwt)
as
lowsave1,
sum(
saveh1*
smplwt)
as
hghsave1
from
svngs
group
by
stratum,
switch1
order
by
stratum,
switch1;

create
table
ntlshft2
as
select
stratum,
switch2,
sum(
smplwt)
as
potwntl,
sum(
weight*
smplwt)
as
totwght,
sum(
savel2*
smplwt)
as
lowsave2,
sum(
saveh2*
smplwt)
as
hghsave2
from
svngs
group
by
stratum,
switch2
order
by
stratum,
switch2;
266
quit;

proc
print
data=
sldg_
1;
label
occ_
bh=
'
Execeedence
of
LA­
High
Value
(
Baseline)'
occ_
1h=
'
Execeedence
of
LA­
High
Value
(
Option
1)'
occ_
2h=
'
Execeedence
of
LA­
High
Value
(
Option
2)'
occ_
bl=
'
Execeedence
of
LA­
Low
Value
(
Baseline)'
occ_
1l=
'
Execeedence
of
LA­
Low
Value
(
Option
1)'
occ_
2l=
'
Execeedence
of
LA­
Low
Value
(
Option
2)'
occ_
bs=
'
Execeedence
of
Surf.
Disp.
Value
(
Baseline)'
occ_
1s=
'
Execeedence
of
Surf.
Disp.
Value
(
Option
1)'
occ_
2s=
'
Execeedence
of
Surf.
Disp.
Value
(
Option
2)'
weight
=
'
Sludge
Quantity
DMT
(
Baseline)'
weight1
=
'
Sludge
Quantity
DMT
(
Option
1)'
weight2
=
'
Sludge
Quantity
DMT
(
Option
2)';
title3
'
Sewage
Sludge
Contamination
Problems
Caused
by
';
title4
'
MP&
M
dischages
by
Pollutant
(
Sample)';
quit;

proc
print
data=
chem_
nat;
label
occ_
bh=
'
Execeedence
of
LA­
High
Value
(
Baseline)'
occ_
1h=
'
Execeedence
of
LA­
High
Value
(
Option
1)'
occ_
2h=
'
Execeedence
of
LA­
High
Value
(
Option
2)'
occ_
bl=
'
Execeedence
of
LA­
Low
Value
(
Baseline)'
occ_
1l=
'
Execeedence
of
LA­
Low
Value
(
Option
1)'
occ_
2l=
'
Execeedence
of
LA­
Low
Value
(
Option
2)'
occ_
bs=
'
Execeedence
of
Surf.
Disp.
Value
(
Baseline)'
occ_
1s=
'
Execeedence
of
Surf.
Disp.
Value
(
Option
1)'
occ_
2s=
'
Execeedence
of
Surf.
Disp.
Value
(
Option
2)'
weight
=
'
Sludge
Quantity
DMT
(
Baseline)'
weight1
=
'
Sludge
Quantity
DMT
(
Option
1)'
weight2
=
'
Sludge
Quantity
DMT
(
Option
2)';
title3
'
Sewage
Sludge
Contamination
Problems
Caused
by
';
title4
'
MP&
M
dischages
by
Pollutant
(
National)';
quit;

proc
means
sum
data=
sldg_
2;
var
hla_
b
hla_
1
hla_
2
lla_
b
lla_
1
lla_
2
mixb
mix1
mix2
weight
weight1
weight2
potw_
hb
potw_
h1
potw_
h2
potw_
lb
potw_
l1
potw_
l2
potw_
mb
potw_
m1
potw_
m2;
label
hla_
b='
Execeedences
of
LA­
High
Value
(
BL)'
hla_
1='
Execeedences
of
LA­
High
Value
(
Opt1)'
hla_
2='
Execeedences
of
LA­
High
Value
(
Opt2)'
lla_
b=
'
Execeedences
of
LA­
Low
Value
(
BL)'
lla_
1=
'
Execeedences
of
LA­
Low
Value
(
Opt1)'
lla_
2=
'
Execeedences
of
LA­
Low
Value
(
Opt2)'
mixb=
'
Execeedences
of
Mix
Value
(
BL)'
mix1=
'
Execeedences
of
Mix
Value
(
Opt1)'
mix2=
'
Execeedences
of
Mix
Value
(
Opt2)'
weight
=
'
Sludge
Quantity
DMT
(
Baseline)'
weight1
=
'
Sludge
Quantity
DMT
(
Option
1)'
weight2
=
'
Sludge
Quantity
DMT
(
Option
2)'
potw_
hb
=
'
Number
of
POTW
exceeding
LA­
High
(
BL)'
267
potw_
h1
=
'
Number
of
POTW
exceeding
LA­
High
(
Opt1)'
potw_
h2
=
'
Number
of
POTW
exceeding
LA­
High
(
Opt2)'
potw_
lb
=
'
Number
of
POTW
exceeding
LA­
Low
(
Bl)'
potw_
l1
=
'
Number
of
POTW
exceeding
LA­
Low
(
Opt1)'
potw_
l2
=
'
Number
of
POTW
exceeding
LA­
Low
(
Opt2)'
potw_
mb
=
'
Number
of
POTW
exceeding
Mix
(
Bl)'
potw_
m1
=
'
Number
of
POTW
exceeding
Mix
(
Opt1)'
potw_
m2
=
'
Number
of
POTW
exceeding
Mix
(
Opt2)';

title3
'
Total
Number
of
Exceedances
by
Disposal
Method/
Stratum
on
(
Sample)';
quit;

proc
means
sum
data=
svngs;
var
weight
savel1
saveh1
savel2
saveh2;
label
switch1='
Shift
Category
Opt
1'
switch2='
Shift
Category
Opt
2'
weight
=
'
Sudge
DMT
Newly
Qualified
for
a
Practice'
savel1
=
'
Low
Cost
Savings
Estimates
Opt
1'
saveh1
=
'
High
Cost
Savings
Estimates
Opt
1'
savel2
=
'
Low
Cost
Savings
Estimates
Opt
2'
saveh2
=
'
High
Cost
Savings
Estimates
Opt
2';
title3
'
Cost
Savings
Resulting
from
Shifts
to
Less
Costly';
title4
'
Sewage
Sludge
Disposal
Practices
on
a
Sample
Basis';
quit;

proc
means
sum
data=
ntl_
slg2;
var
ex_
bh
ex_
1h
ex_
2h
ex_
bl
ex_
1l
ex_
2l
ex_
bm
ex_
1m
ex_
2m
t_
wght
t_
1wght
t_
2wght;
label
ex_
bh
='
Execeedences
of
LA­
High
Value
(
BL)'
ex_
1h='
Execeedences
of
LA­
High
Value
(
Opt1)'
ex_
2h='
Execeedences
of
LA­
High
Value
(
Opt2)'
ex_
bl=
'
Execeedences
of
LA­
Low
Value
(
BL)'
ex_
1l=
'
Execeedences
of
LA­
Low
Value
(
Opt1)'
ex_
2l=
'
Execeedences
of
LA­
Low
Value
(
Opt2)'
ex_
bm=
'
Execeedences
of
Mix
Value(
BL)'
ex_
1m=
'
Execeedences
of
Mix
Value
(
Opt1)'
ex_
2m=
'
Execeedences
of
Mix
Value
(
Opt2)'
t_
wght
=
'
Sludge
Quantity
DMT
(
BL)'
t_
1wght
=
'
Sludge
Quantity
DMT
(
Opt1)'
t_
2wght
=
'
Sludge
Quantity
DMT
(
Opt2)';
title3
'
Total
Number
of
POTWs
exceeding
a
Sludge
Disposal
Method(
National)';
quit;

proc
print
data=
ntlshft1;
sum
lowsave1
hghsave1;
label
switch1='
Shift
Category'
potwntl=
'
Number
of
Upgrading
POTWs'
totwght
=
'
Sludge
(
DMT)
Newly
Qualified
for
a
Practice'
Lowsave1
=
'
Low
Cost
Savings
Estimates'
Hghsave1
=
'
High
Cost
Savings
Estimates';

title3
'
Cost
Savings
Resulting
From
Shifts
to
Less
Costly';
title4
'
Sludge
Disposal
Practices
on
a
National
Basis';
title5
'
Option
1';
268
quit;

proc
print
data=
ntlshft2;
sum
lowsave2
hghsave2;
label
switch2='
Shift
Category'
potwntl=
'
Number
of
Upgrading
POTWs'
totwght
=
'
Sludge
(
DMT)
Newly
Qualified
for
a
Practice'
Lowsave2
=
'
Low
Cost
Savings
Estimates'
Hghsave2
=
'
High
Cost
Savings
Estimates';

title3
'
Cost
Savings
Resulting
From
Shifts
to
Less
Costly';
title4
'
Sludge
Disposal
Practices
on
a
National
Basis';
title5
'
Option
2';
quit;

/*
End
Sldg
MP&
M
Based
(
Sub
10).
sas
*/
269
Program
Output
270
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
72
Sludge
MP&
M
Based
(
Sub
10)
10:
59
Friday,
February
7,
2003
Sewage
Sludge
Contamination
Problems
Caused
by
MP&
M
dischages
by
Pollutant
(
National)

Obs
stratum
CASNO
polltnt
occ_
bh
occ_
1h
occ_
2h
occ_
bl
occ_
1l
1
1
7439921
Lead
220.171
220.171
204.956
93.271
93.271
2
1
7440020
Nickel
722.796
646.214
626.443
722.796
646.214
3
1
7440382
Arsenic
83.688
83.688
4.072
4.072
4.072
4
1
7440439
Cadmium
564.304
549.494
542.807
477.722
477.722
5
1
7440508
Copper
516.049
482.625
470.753
99.958
99.958
6
1
7440666
Zinc
216.127
200.911
185.779
65.691
65.691
7
1
7782492
Selenium
109.428
109.428
109.428
31.572
31.572
8
2
7439921
Lead
5.627
5.627
0.000
0.000
0.000
9
2
7440020
Nickel
32.138
32.138
32.138
32.138
32.138
10
2
7440439
Cadmium
114.705
114.705
92.115
65.326
65.326
11
2
7440508
Copper
9.569
9.569
5.627
0.000
0.000
12
3
7439921
Lead
8.217
8.217
8.217
0.000
0.000
13
3
7440020
Nickel
8.217
8.217
8.217
8.217
8.217
14
3
7440439
Cadmium
74.518
74.518
71.174
32.214
32.214
15
3
7440508
Copper
8.217
8.217
8.217
0.000
0.000
16
3
7440666
Zinc
8.217
8.217
8.217
0.000
0.000
Obs
occ_
2l
occ_
bm
occ_
1m
occ_
2m
weight
weight1
weight2
1
93.271
93.271
93.271
93.271
60462.62
60462.62
60462.62
2
626.443
722.796
646.214
626.443
148866.70
148866.70
148866.70
3
4.072
4.072
4.072
4.072
11123.45
11123.45
11123.45
4
453.978
477.722
477.722
453.978
240931.32
240931.32
240931.32
5
99.958
99.958
99.958
99.958
77686.19
77686.19
77686.19
6
62.347
65.691
65.691
62.347
56456.92
56456.92
56456.92
7
31.572
31.572
31.572
31.572
19949.57
19949.57
19949.57
8
0.000
0.000
0.000
0.000
13377.19
13377.19
0.00
9
32.138
32.138
32.138
32.138
190996.12
190996.12
190996.12
10
65.326
65.326
65.326
65.326
579175.21
579175.21
579175.21
11
0.000
0.000
0.000
0.000
33997.92
33997.92
33997.92
12
0.000
0.000
0.000
0.000
130888.39
130888.39
130888.39
13
8.217
8.217
8.217
8.217
130888.39
130888.39
130888.39
14
32.214
32.214
32.214
32.214
1824663.82
1824663.82
1824663.82
15
0.000
0.000
0.000
0.000
130888.39
130888.39
130888.39
16
0.000
0.000
0.000
0.000
130888.39
130888.39
130888.39
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
75
Sludge
MP&
M
Based
(
Sub
10)
10:
59
Friday,
February
7,
2003
Total
Number
of
POTWs
exceeding
a
Sludge
Disposal
Method(
National)

The
MEANS
Procedure
Variable
Label
Sum
                                                                
ex_
bh
Execeedences
of
LA­
High
Value
(
BL)
1019.76
ex_
1h
Execeedences
of
LA­
High
Value
(
Opt1)
1004.95
ex_
2h
Execeedences
of
LA­
High
Value
(
Opt2)
975.6693539
271
ex_
bl
Execeedences
of
LA­
Low
Value
(
BL)
856.0269055
ex_
1l
Execeedences
of
LA­
Low
Value
(
Opt1)
856.0269055
ex_
2l
Execeedences
of
LA­
Low
Value
(
Opt2)
852.6832731
ex_
bm
Execeedences
of
Mix
Value(
BL)
856.0269055
ex_
1m
Execeedences
of
Mix
Value
(
Opt1)
856.0269055
ex_
2m
Execeedences
of
Mix
Value
(
Opt2)
852.6832731
t_
wght
Sludge
Quantity
DMT
(
BL)
2663743.61
t_
1wght
Sludge
Quantity
DMT
(
Opt1)
2647195.25
t_
2wght
Sludge
Quantity
DMT
(
Opt2)
2319026.34
                                                                
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
76
Sludge
MP&
M
Based
(
Sub
10)
10:
59
Friday,
February
7,
2003
Cost
Savings
Resulting
From
Shifts
to
Less
Costly
Sludge
Disposal
Practices
on
a
National
Basis
Option
1
Obs
stratum
switch1
potwntl
totwght
lowsave1
hghsave1
1
1
lla_
llh
14.810
16548.36
11319.08
22538.87
2
1
nswitch
815.724
243356.22
0.00
0.00
3
2
nswitch
114.705
579175.21
0.00
0.00
4
3
nswitch
74.518
1824663.82
0.00
0.00
========
========
11319.08
22538.87