Economic,
Environmental,
and
Benefits
Analysis
of
the
Final
Metal
Products
and
Machinery
Rule
Programs
and
Output
Tables
for
the
Directs
+
413
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
+
413
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
37702
Facility
closures
in
the
baseline
and
post­
compliance.

poll2cas.
sd2
37703
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
37704
MP&
M
facility
and
discharge
RF1
reach
information.

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

twf_
remr.
sd2
37706
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
37702
Facility
closures
in
the
baseline
and
post­
compliance.

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

chemdata.
sd2
37709
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
37702
Facility
closures
in
the
baseline
and
post­
compliance.

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

chemdata.
sd2
37709
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
37709
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
37709
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
37710
County
level
fishing
license
data
for
the
United
States.

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

fishadv1.
sd2
37712
Fishing
advisory
data
by
RF1
reach.

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

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

chemdata.
sd2
37709
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
37710
County
level
fishing
license
data
for
the
United
States.

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

fishadv1.
sd2
37712
Fishing
advisory
data
by
RF1
reach.

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

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

chemdata.
sd2
37709
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
37709
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
37709
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
37710
County
level
fishing
license
data
for
the
United
States.

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

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

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

avgdfish.
sd2
37715
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
37704
MP&
M
facility
and
discharge
RF1
reach
information.

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

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

recpcts.
sd2
37717
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
37722
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
37705
MP&
M
facility
size
(
small,
medium,
or
large)
based
on
discharge
flow.

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

chemdata.
sd2
37709
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
37718
Sewage
sludge
criteria
for
the
eight
MP&
M
sludge
pollutants.

twf_
remr.
sd2
37706
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
37720
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
37719
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
37719
Crosswalk
of
lead
concentrations
in
fish
tissue
and
resulting
child
blood
lead
levels.

Data
created
exlchld.
xls
37721
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)
National
Loads
to
POTWs
(
Indirects)
(
minus
TDS
and
BOD)
­
No
POTW
Removal
15:
45
Thursday,
February
6,
2003
Obs
baseld
newld1
newld2
sample_
b
sample_
1
sample_
2
pollts
1
52828607.49
52309229.47
0
4806475.48
4761258.77
0
125
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
101
Tally
Loadings
Preferred
(
Sub
13)
National
Loads
From
Indirects)
15:
45
Thursday,
February
6,
2003
(
minus
TDS
and
BOD)
with
POTW
Removals
Obs
baseld
newld1
newld2
sample_
b
sample_
1
sample_
2
pollts
1
10077218.72
9953852.75
0
913924.42
903412.99
0
125
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
102
Tally
Loadings
Preferred
(
Sub
13)
National
Loads
(
Direct
Dischargers)
(
minus
TDS
and
BOD)
15:
45
Thursday,
February
6,
2003
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)
Master
List
for
Table
(
National)
15:
45
Thursday,
February
6,
2003
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
952492.11
161027.33
3019.69
735345.12
1018358.82
739.547
537163.82
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)
Master
List
for
Table
(
Sample)
15:
45
Thursday,
February
6,
2003
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
73617.66
17658.54
267.798
61811.86
78911.67
52.5315
43451.43
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)
Priority
Pollutants
15:
45
Thursday,
February
6,
2003
Obs
baseld
newld1
newld2
sample_
b
sample_
1
sample_
2
pollts
chems
33
1
203020.90
131955.14
0
20098.93
14303.85
0
42
42
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
106
Tally
Loadings
Preferred
(
Sub
13)
Conventional
Pollutants
15:
45
Thursday,
February
6,
2003
Obs
casno
baseld
newld1
newld2
sample_
b
sample_
1
sample_
2
pollts
chems
1
C003
1100228.77
1002376.61
0
86962.85
78832.87
0
1
1
2
C004
13292030.29
8545986.29
0
1293954.32
762519.75
0
1
1
3
C009
703343.95
616417.18
0
48447.82
42749.72
0
1
1
4
C021
227814.74
227681.94
0
16542.73
16540.76
0
1
1
5
C036
553480.52
154298.45
0
49088.27
16076.24
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)
Other
Pollutants
15:
45
Thursday,
February
6,
2003
Obs
baseld
newld1
newld2
sample_
b
sample_
1
sample_
2
pollts
chems
1
14807008.76
9828006.51
0
1397265.57
845698.97
0
81
81
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
108
Tally
Loadings
Preferred
(
Sub
13)
Lead
Only
15:
45
Thursday,
February
6,
2003
Obs
baseld
newld1
newld2
sample_
b
sample_
1
sample_
2
pollts
chems
1
9555.45
6922.12
0
992.696
769.095
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)
15:
45
Thursday,
February
6,
2003
Obs
baseld
newld1
newld2
sample_
b
sample_
1
sample_
2
pollts
1
173881.13
107044.62
0
17292.04
11844.96
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)
15:
45
Thursday,
February
6,
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
15:
45
Thursday,
February
6,
2003
Obs
baseld
newld1
newld2
sample_
b
sample_
1
sample_
2
pollts
chems
1
948.160
946.266
0
79.5478
79.4646
0
13
13
MP&
M
National
Benefits
Preferred(
Opt1=
Pref,
Opt2=
NULL)
112
Toxic
Weight
Loadings
Preferred
(
Sub
18)
pref
Toxic
Wght
Lead
Only
15:
45
Thursday,
February
6,
2003
Obs
baseld
newld1
newld2
sample_
b
sample_
1
sample_
2
pollts
chems
1
21022.00
15228.67
0
2183.93
1692.01
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)
15:
45
Thursday,
February
6,
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)
11.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)
1.0000000
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)
120.5318734
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)
21.3819383
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)
1.0000000
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)
15:
45
Thursday,
February
6,
2003
The
MEANS
Procedure
Variable
Label
Sum
                                                                  
worgb
Exceed,
H20
and
Organisms
(
Smpl/
BL)
11.0000000
worgt1
Exceed,
H2O
and
organisms
(
Smpl/
Opt
1)
11.0000000
worgt2
Exceed,
H2O
and
organisms
(
Smpl/
Opt
2)
.
orgb
Exceed,
organisms
only
(
Smpl/
BL)
1.0000000
orgt1
Exceed,
organisms
only
(
Smpl/
Opt
1)
1.0000000
orgt2
Exceed,
organisms
only
(
Smpl/
Opt
2)
.
ntlbw
Exceed,
H20
and
Organisms
(
Ntl/
BL)
120.5318734
ntltw1
Exceed,
H2O
and
organisms
(
Ntl/
Opt
1)
120.5318734
ntltw2
Exceed,
H2O
and
organisms
(
Ntl/
Opt
2)
.
ntlbo
Exceed,
organisms
only
(
Ntl/
BL)
21.3819383
ntlto1
Exceed,
organisms
only
(
Ntl/
Opt
1)
21.3819383
ntlto2
Exceed,
organisms
only
(
Ntl/
Opt
2)
.
chemb
Number
of
h20/
org
poll
(
BL)
4.0000000
chem1
Number
of
h20/
org
poll
(
Opt1)
4.0000000
chem2
Number
of
h20/
org
poll
(
Opt2)
0
chmorgb
Number
of
org
poll
(
BL)
1.0000000
57
chmorg1
Number
of
org
poll
(
Opt1)
1.0000000
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
15:
45
Thursday,
February
6,
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)
21.3819383
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
15:
45
Thursday,
February
6,
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)
0
elim2_
2
Elim.
Organisms
(
Opt2)
21.3819383
red1_
1
Redu.
H20
and
Organisms
(
Opt1)
0
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)
0
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
15:
45
Thursday,
February
6,
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
1
.
.
.
.
21.3819
21.3819
.
.
.
.
1
1
0
0
0
0
3
Manganese
1
1
.
1
1
.
21.3819
21.3819
.
21.3819
21.3819
.
1
1
0
1
1
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
15:
45
Thursday,
February
6,
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.3082673E­
8
3.3569351E­
7
0
7.3661387E­
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
15:
45
Thursday,
February
6,
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.9324391E­
7
2.8103645E­
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
15:
45
Thursday,
February
6,
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.0236731
totsub_
1
Total
Subsistence
Cases
(
Opt1
)
0.0099099
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.0335830
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
15:
45
Thursday,
February
6,
2003
The
MEANS
Procedure
73
Variable
Label
Sum
                                                         
totb1_
lw
Total
Benefits
­
Low
(
Opt
1)
34.5508884
totb1_
hg
Total
Benefits
­
High
(
Opt
1)
187.9568328
totb2_
lw
Total
Benefits
­
Low
(
Opt
2)
83992.05
totb2_
hg
Total
Benefits
­
High
(
Opt
2)
456916.76
mid1
Mid
Benefits
(
Opt1)
89.8323098
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
15:
45
Thursday,
February
6,
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
15:
45
Thursday,
February
6,
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
7.1199784E­
6
totd2
0.0335808
totb1_
lw
Total
Benefits
­
Low
(
Opt
1)
17.7999461
totb1_
hg
Total
Benefits
­
High
(
Opt
1)
96.8317065
totb2_
lw
Total
Benefits
­
Low
(
Opt
2)
83952.03
totb2_
hg
Total
Benefits
­
High
(
Opt
2)
456699.02
mid1
Mid
Benefits
(
Opt1)
46.2798597
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
15:
45
Thursday,
February
6,
2003
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
CAS
Chemical
Identifier=
75092
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

The
MEANS
Procedure
Variable
Label
Sum
                                                         
totd1
2.1057401E­
9
totd2
5.3785951E­
7
totb1_
lw
Total
Benefits
­
Low
(
Opt
1)
0.0052644
totb1_
hg
Total
Benefits
­
High
(
Opt
1)
0.0286381
totb2_
lw
Total
Benefits
­
Low
(
Opt
2)
1.3446488
totb2_
hg
Total
Benefits
­
High
(
Opt
2)
7.3148893
mid1
Mid
Benefits
(
Opt1)
0.0136873
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
15:
45
Thursday,
February
6,
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
15:
45
Thursday,
February
6,
2003
Obs
CASNO
diff1
diff2
ben1low
ben1hg
ben2low
ben2hg
midpt1
midpt2
1
117817
.000003860
0.000004
9.6490
52.4905
10.65
57.93
25.0874
27.69
2
123911
.000000005
0.000000
0.0130
0.0706
0.04
0.24
0.0338
0.12
3
127184
.000000491
0.000001
1.2273
6.6768
2.14
11.62
3.1911
5.55
4
62533
.000000035
0.000000
0.0875
0.4760
0.30
1.65
0.2275
0.79
5
62759
0
0.000007
0.0000
0.0000
17.17
93.40
0.0000
44.64
6
67663
.000000007
0.000000
0.0176
0.0960
0.03
0.17
0.0459
0.08
7
7440382
.000007120
0.033581
17.7999
96.8317
83952.03
456699.02
46.2799
218275.27
8
75003
.000000045
0.000000
0.1136
0.6180
0.13
0.72
0.2954
0.34
9
75092
.000000002
0.000001
0.0053
0.0286
1.34
7.31
0.0137
3.50
10
75354
.000001037
0.000002
2.5917
14.0987
4.51
24.54
6.7384
11.73
11
78591
.000000003
0.000000
0.0078
0.0423
0.01
0.06
0.0202
0.03
12
79016
.000000037
0.000000
0.0919
0.5002
0.17
0.94
0.2391
0.45
13
86306
.000001178
0.000001
2.9462
16.0275
3.52
19.16
7.6602
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)
15:
45
Thursday,
February
6,
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)
15:
45
Thursday,
February
6,
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)
15:
45
Thursday,
February
6,
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)
15:
45
Thursday,
February
6,
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)
15:
45
Thursday,
February
6,
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)
15:
45
Thursday,
February
6,
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)
15:
45
Thursday,
February
6,
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)
15:
45
Thursday,
February
6,
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
1
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 
59815.00 
5.87 
*
                      
$
            
$
            
$
            
$
            
 
7
 
256700.00 
25.18 
225002.00 
22.07 
*
                      
$
            
$
            
$
            
$
            
 
8
 
321825.00 
31.57 
274873.00 
26.97 
*
                      
$
            
$
            
$
            
$
            
 
9
 
178380.00 
17.50 
162723.00 
15.96 
*
                      
$
            
$
            
$
            
$
            
 
10
 
37318.00 
3.66 
35207.00 
3.45 
*
                      
$
            
$
            
$
            
$
            
 
11
 
1503.00 
0.15 
1335.00 
0.13 
*
                      
$
            
$
            
$
            
$
            
 
All
 
1019316.00 
100.00 
1019316.00 
100.00 
S                       
             
             
             
            ÿ
Fish
Consumption
Hazard
Ratios
2
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 
57135.00 
5.89 
*
                      
$
            
$
            
$
            
$
            
 
7
 
251139.00 
25.87 
221502.00 
22.82 
*
                      
$
            
$
            
$
            
$
            
 
8
 
309520.00 
31.88 
264070.00 
27.20 
*
                      
$
            
$
            
$
            
$
            
 
9
 
162382.00 
16.73 
149114.00 
15.36 
*
                      
$
            
$
            
$
            
$
            
 
10
 
30057.00 
3.10 
28663.00 
2.95 
*
                      
$
            
$
            
$
            
$
            
 
All
 
970771.00 
100.00 
970771.00 
100.00 
S                       
             
             
             
            ÿ
Fish
Consumption
Hazard
Ratios
3
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 
13609.00 
28.03 
*
                      
$
            
$
            
$
            
$
            
 
10
 
7261.00 
14.96 
6544.00 
13.48 
*
                      
$
            
$
            
$
            
$
            
 
11
 
1503.00 
3.10 
1335.00 
2.75 
*
                      
$
            
$
            
$
            
$
            
 
All
 
48545.00 
100.00 
48545.00 
100.00 
S                       
             
             
             
            ÿ
117
Drinking
Water
Hazard
Ratios
4
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
15:
45
Thursday,
February
6,
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.
