1 Economic, Environmental, and Benefits Analysis of the Final Metal Products and Machinery Rule Programs and Output Tables for the Final Rule for the State of Ohio 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 2 Final Option Benefits for the state of Ohio MP& M Ohio Case Study Benefits Programs and Data Sets . . . . . . . . . . . . . . . . . . . . . . . 4 Estimating Ohio MP& M Discharge Loadings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 " Master . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 " Create Datasets ( Sub 1). sas" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 " Tally the loadings for all options ( Sub Final). sas" . . . . . . . . . . . . . . . . 27 " Toxic loadings for all options. sas" . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Human Health Benefits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Cancer from Fish Consumption . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 " Create Datasets ( Sub1). sas" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 " Human Health AWQC ( Sub 2). sas" . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 " Cancer fish ( Sub 4) all risk values. sas" . . . . . . . . . . . . . . . . . . . . . . . . . 64 Cancer from Drinking Water . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 " Create Revised Datasets for Brad  Final ( No GMs). sas" . . . . . . . . . . . 82 Water Quality Modeling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 " Modify Brad Datasets for Final ( No GMs) run. sas" . . . . . . . . . . . . . . . 89 " Drinking Water Cancer ( Sub 6). sas" . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 Systemic Risk from Fish Consumption . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 " Create Datasets ( Sub1). sas" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 " Human Health AWQC ( Sub 2). sas" . . . . . . . . . . . . . . . . . . . . . . . . . . 104 " Systemic Cancer ( Sub 5). sas" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 Systemic Risk from Drinking Water . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 " Create Revised Datasets for Brad  Final ( No GMs). sas" . . . . . . . . . . 117 Water Quality Modeling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 " Systemic Cancer Assoc DW ( Sub 14). sas" . . . . . . . . . . . . . . . . . . . . . 119 Lead Benefits for Adults . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 " Cancer fish ( Sub 4). sas" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 " Lead Benefits ( Sub 12). sas" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 " Subsistence Lead Benefits ( Sub 17). sas" . . . . . . . . . . . . . . . . . . . . . . 146 Lead Benefits for Children . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 " Cancer fish ( Sub 4). sas" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 " NeoNatal Mortality Benefits ( Sub 15). sas" . . . . . . . . . . . . . . . . . . . . . 168 Integrated Exposure Uptake Biokinetic Model ( IEUBK) . . . . . . . . . . . 175 " Gen4. txt" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 " Create Lookup Table. sas" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 " Cnc_ fmt3. sas" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 " Child Lead Benefits ( Sub 16). sas" . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 Recreational Benefits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 " Human Health AWQC ( Sub 2). sas" . . . . . . . . . . . . . . . . . . . . . . . . . . 192 " Aquatic Life AWQC ( Sub 3). sas" . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 " TKN from event loadings. sas" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 " Pull out TKN only. sas" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 3 " Merge TKN for Ohio Reaches. sas" . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 " Alt Merge AWQC Exc for Ohio Reaches. sas" . . . . . . . . . . . . . . . . . . 220 Recreational Fishing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 " Fishing Welfare. sas" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Recreational Boating . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 " Boating Welfare. sas" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 Near water Recreation ( Viewing) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 " Viewing Welfare. sas" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 Recreational Swimming . . . . . . . . . . . . . . . . . . . . . . . . . . 254 " Swimming Welfare. sas" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 POTW Benefits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 POTW Inhibitions from Ohio MP& M Facilities . . . . . . . . . . . . . . . . . . . . . . . 265 " Create POTW_ IN Datasets. sas" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 " POTW Inhibitions ( Sub 9). sas" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 Sludge Benefits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 " POTW Inhibitions ( Sub 9). sas" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 " Sldg MP& M Based ( Sub 10). sas" . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 4 MP& M Ohio Case Study Benefits Programs and Data Sets Programs Used in the Ohio Case Study Benefits Run Program Name Dataset DCN Description " Random Assigns to POTWs ( Run 2). xls" Data utilized None 37825 Randomly assigns representative indirect facilities to POTWs in Ohio.

Data created None 37825 " Master Benefits Ohio. sas" Data utilized None Main program calling subroutines to estimate benefits in Ohio.

Data created None " Create Datasets ( Sub 1). sas" Data utilized fac_ info. sd2 37810 Ohio MP& M facilities and PCS direct dischargers and receiving reach information.

Ohioclos. sd2 37816 Facility closures under the final option ( no closures).

Scrload. sd2 37818 Baseline and final option loadings for the Ohio MP& M screener facilities.

mpmload. sd2 37817 Baseline and final option loadings for the Ohio National survey facilities.

pcsload. sd2 37814 Baseline loadings from PCS direct dischargers in Ohio.

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

Data created event_ ld. sd2 MP& M pollutant discharge events to Ohio RF1 reaches, lakes, and lake Erie from direct dischargers and POTWs ( post removal). Programs Used in the Ohio Case Study Benefits Run Program Name Dataset DCN Description 5 " Create POTW_ IN Datasets. sas" Data utilized fac_ info. sd2 37810 Ohio MP& M facility and PCS direct dischargers and receiving reach information.

Ohioclos. sd2 37816 Facility closures in the baseline and under the preferred option ( 5).

Scrload. sd2 37818 Baseline and preferred option loadings for the Ohio MP& M screener facilities.

mpmload. sd2 37817 Baseline and preferred option loadings for the Ohio National survey facilities.

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

" Create Revised Datasets for Brad  Final ( No GMs). sas" Data utilized fac_ info. sd2 37810 Ohio MP& M facility and PCS direct dischargers and receiving reach information.

Ohioclos. sd2 37816 Facility closures under the final option ( no closures).

Scrload. sd2 37818 Baseline and final option loadings for the Ohio MP& M screener facilities.

mpmload. sd2 37817 Baseline and final option loadings for the Ohio National survey facilities.

pcsload. sd2 37814 Baseline loadings from PCS direct dischargers in Ohio.

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

chemdata. sd2 37812 MP& M pollutant data ( e. g., awqc values, reference dose, cancer slope factor). Programs Used in the Ohio Case Study Benefits Run Program Name Dataset DCN Description 6 Data created bf_ pref. sd2 MP& M pollutant discharge events to Ohio RF1 reaches from direct dischargers and POTWs ( post removal).

" Modify Brad Datasets for Final ( No GMs) run. sas" Data utilized fnlmean. sd2 37819 Water quality modeling output dataset with instream concentrations for Ohio RF1 reaches using mean flow for reaches.

fnllow. sd2 37820 Water quality modeling output dataset with instream concentrations for Ohio RF1 reaches using low flow for reaches.

Data created brdevnt. sd2 37821 MP& M pollutant in stream concentrations in Ohio RF1 reaches based on mean flow.

brdevnt2. sd2 37822 MP& M pollutant in stream concentrations in Ohio RF1 reaches based on low flow.

" Human Health AWQC ( Sub 2). sas" Data utilized event_ ld. sd2 MP& M pollutant discharge events to Ohio lakes and lake Erie from direct dischargers and POTWs ( post removal).

brdevnt. sd2 37821 MP& M pollutant in stream concentrations in Ohio RF1 reaches.

chemdata. sd2 37812 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. Programs Used in the Ohio Case Study Benefits Run Program Name Dataset DCN Description 7 " Aquatic Life AWQC ( Sub 3). sas" Data utilized event_ ld. sd2 MP& M pollutant discharge events to RF1 reaches, lakes, and lake Erie from direct dischargers and POTWs ( post removal).

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

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

shoremi. sd2 37806 Number of river and ocean shore miles by state.

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

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

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

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

us_ rchmi. sd2 37802 Number of river miles by county. Programs Used in the Ohio Case Study Benefits Run Program Name Dataset DCN Description 8 cnc_ hh. sd2 MP& M pollutant in stream concentrations for each RF1 reach.

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

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

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

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

Data created None " Systemic Cancer Assoc DW ( Sub 14). sas" Data utilized fnlmean. sd2 37819 In stream concentrations for six carcinogens on affected Ohio RF1 reaches with drinking water intakes and populations exposed.

chemdata. sd2 37812 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.

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

facsize. sd2 37811 MP& M facility size ( small, medium, or large) based on discharge flow. Programs Used in the Ohio Case Study Benefits Run Program Name Dataset DCN Description 9 potwevnt. sd2 MP& M pollutant discharge events to POTWs.

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

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

Data created None " 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 Ohio Adult Lead. xls Excel file with table of 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 Gen3. txt 37651 Output dataset from the IEUBK model run. Programs Used in the Ohio Case Study Benefits Run Program Name Dataset DCN Description 10 Data created ublook4. sd2 37669 Crosswalk of lead concentrations in fish tissue and resulting child blood lead levels.

Cnc_ fmt3. sas 37651 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 ublook3 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 37669 Crosswalk of lead concentrations in fish tissue and resulting child blood lead levels.

Data created Ohio Child Lead. xls Excel file of child lead benefits.

" Tally the Loadings for all options ( Sub final). sas" Data utilized fac_ info. sd2 37810 Ohio MP& M facility and PCS direct dischargers and receiving reach information.

Ohioclos. sd2 37816 Facility closures under the final option. ( No closures)

Scrload. sd2 37818 Baseline and final option loadings for the Ohio MP& M screener facilities.

mpmload. sd2 37817 Baseline and final option loadings for the Ohio National survey facilities. Programs Used in the Ohio Case Study Benefits Run Program Name Dataset DCN Description 11 pcsload. sd2 37814 Baseline loadings from PCS direct dischargers in Ohio.

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

Data created None " Toxic Loadings for all options. sas" Data utilized fac_ info. sd2 37810 Ohio MP& M facility and PCS direct dischargers and receiving reach information.

Ohioclos. sd2 37816 Facility closures under the final option. ( No closures)

Scrload. sd2 37818 Baseline and final option loadings for the Ohio MP& M screener facilities.

mpmload. sd2 37817 Baseline and final option loadings for the Ohio National survey facilities.

pcsload. sd2 37814 Baseline loadings from PCS direct dischargers in Ohio.

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

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

Data created None " Pull out TKN only. sas" Data utilized fnllow. sd2 37820 Water quality modeling output dataset with instream concentrations for Ohio RF1 reaches using low flow.

Data created brdtkn. sd2 Estimated TKN in stream concentrations on Ohio RF1 reaches. Programs Used in the Ohio Case Study Benefits Run Program Name Dataset DCN Description 12 " TKN From event loadings. sas" Data utilized event_ ld. sd2 MP& M pollutant discharge events to Ohio RF1 reaches, lakes, and lake Erie from direct dischargers and POTWs ( post removal).

Data created mpmtkn. sd2 Estimated TKN in stream concentrations in Ohio lakes and lake Erie sites.

" Merge TKN for Ohio Reaches. sas" Data utilized brdtkn. sd2 Estimated TKN in stream concentrations on Ohio RF1 reaches.

mpmtkn. sd2 Estimated TKN in stream concentrations in Ohio lakes and lake Erie sites.

rch_ info. sd2 37757 Dataset of Ohio RF1 sites and site atribute information used in the Random Utility Model.

Data created None " Merge AWQC exceedences for Ohio reaches. sas" Data utilized rec_ al. sd2 Aquatic life AWQC exceedences for affected RF1 reaches.

rch_ info. sd2 37757 Dataset of Ohio RF1 sites and site atribute information used in the Random Utility Model.

Data created None " Boating Welfare. sas" Data utilized rch_ info. sd2 37757 Dataset of Ohio RF1 sites and site attribute information used in the Random Utility Model.

fullset2. sd2 37758 Dataset of Boating participants demographic information.

matrix4. sd2 37759 Dataset of distances from Ohio zip code centroids to RF1 reaches. Programs Used in the Ohio Case Study Benefits Run Program Name Dataset DCN Description 13 Data created None " Fishing Welfare. sas" Data utilized rch_ info. sd2 37757 Dataset of Ohio RF1 sites and site attribute information used in the Random Utility Model.

fullset2. sd2 37758 Dataset of Fishing participants demographic information.

matrix4. sd2 37759 Dataset of distances from Ohio zipcode centroids to RF1 reaches.

Data created None " Viewing Welfare. sas" Data utilized rch_ info. sd2 37757 Dataset of Ohio RF1 sites and site attribute information used in the Random Utility Model.

fullset2. sd2 37758 Dataset of Viewing participants demographic information.

matrix4. sd2 37759 Dataset of distances from Ohio zip code centroids to RF1 reaches.

Data created None " Swimming Welfare. sas" Data utilized rch_ info. sd2 37757 Dataset of Ohio RF1 sites and site attribute information used in the Random Utility Model.

fullset2. sd2 37758 Dataset of Swimming participants demographic information.

matrix4. sd2 37759 Dataset of distances from Ohio zip code centroids to RF1 reaches.

Data created None " Rum_ ben ( Final Rule). xls" Data utilized None Programs Used in the Ohio Case Study Benefits Run Program Name Dataset DCN Description 14 Data created None 37824 15 15 Estimating Ohio MP& M Discharge Loadings 16 16 " Master Benefits Ohio. sas" Using the loadings estimates from ERG, PCS loadings data, as well as estimated facility closures, a set of loadings from MP& M facilities is generated. 17 17 /*****************************************************************************/ /* PROGRAM DOCUMENTATION */ /*****************************************************************************/ /* Program: Master Benefits Ohio. sas */ /* Author: Stuart Smith */ /* Date: 09/ 26/ 2000 */ /* Updated: 11/ 25/ 2002 */ /* */ /* This is the master benefits program for MP& M benefits calculations. */ /* 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. */ /*****************************************************************************/ /*****************************************************************************/ /* ADMINISTARTIVE REQUIREMENTS */ /*****************************************************************************/ /* */ /*****************************************************************************/ /* 1. ASSIGN MACRO VARIABLES FOR CURRENT RUN */ /*****************************************************************************/

% let prg_ path = H:\ ENVR\ Smithse\ mpm_ ohio\ Programs; /* Programs Folder*/

% let ohio = " H:\ ENVR\ Smithse\ mpm_ ohio\ Input Data\ Static"; /* Static data*/ /* DO NOT CHANGE*/

% let rundat = " H:\ ENVR\ Smithse\ mpm_ ohio\ Input Data\ Final ( No GMs)"; /* Run specific input data*/ /* MUST BE AN EXISTING DIRECTORY !!*/

% let results = " H:\ ENVR\ Smithse\ mpm_ ohio\ Results\ Final ( No GMs)"; /* Run specific results folder*/ /* MUST BE AN EXISTING DIRECTORY !!*/

/* Dataset to be used for drinking water related benefits */ /* This is concentrations from mean flow values */ % let dwset = fnlmean;

/* Set the overall Title for output*/ % let thetitle = " MPM Ohio CS Benefits ( Opt1= Final No GMs, Opt2= none) & sysdate";

libname ohio v6 & ohio; /* assign library for static data*/ libname rundat v6 & rundat; /* assign library for input data*/ libname results v6 & results; /* assign library for results*/ libname library v6 & ohio; /* assign library for custom formats*/

title & thetitle; /* set the title*/

/*****************************************************************************/ /* 2. PULL IN AND RUN THE SUBROUTINE PROGRAMS */ /*****************************************************************************/ 18 18 /*****************************************************************************/ /* Sub 1: Create Event Loadings Dataset */ /*****************************************************************************/ /*****************************************************************************/

/* Full name: Create Datasets ( Sub 1). sas */ % include "& prg_ path\ Create Datasets ( Sub 1). sas" / source2;

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

/* Full name: Human Health AQWC ( Sub 2). sas */ % include "& prg_ path\ Human Health AWQC ( Sub 2). sas" / source2;

/*****************************************************************************/ /*****************************************************************************/ /* Sub 3: Aquatic Life AWQC Exceedences */ /*****************************************************************************/ /*****************************************************************************/

/* Full name: Aquatic Life AQWC ( Sub 3). sas */ % include "& prg_ path\ Aquatic Life AWQC ( Sub 3). sas" / source2;

/*****************************************************************************/ /*****************************************************************************/ /* Sub 4: Cancer Fish */ /*****************************************************************************/ /*****************************************************************************/

/* Full name: Cancer fish ( Sub 4). sas */ % include "& prg_ path\ Cancer fish ( Sub 4). sas" / source2;

/*****************************************************************************/ /*****************************************************************************/ /* Sub 5: Systemic Cancer */ /*****************************************************************************/ /*****************************************************************************/

/* Full name: Systemic Cancer ( Sub 5). sas */ % include "& prg_ path\ Systemic Cancer ( Sub 5). sas" / source2;

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

/* Full name: Drinking Water Cancer ( Sub 6) 04 canc_ B less than 0.65. sas */ % include "& prg_ path\ Drinking Water Cancer ( Sub 6) 04 canc_ B less than 0.65. sas" / source2; 19 19 /*****************************************************************************/ /*****************************************************************************/ /* Sub 14: Systemic Cancer Drinking Water */ /*****************************************************************************/ /*****************************************************************************/

/* Full name: Systemic Cancer Assoc DW ( Sub 14). sas */ % include "& prg_ path\ Systemic Cancer Assoc DW ( Sub 14). sas" / source2;

/*****************************************************************************/ /*****************************************************************************/ /* Sub 9a: Create POTW_ IN Dataset */ /*****************************************************************************/ /*****************************************************************************/

/* Full name: Create POTW_ IN Datasets. sas % include "& prg_ path\ Create POTW_ IN Datasets. sas" / source2;*/

/*****************************************************************************/ /*****************************************************************************/ /* Sub 9: POTW Inihibitions */ /*****************************************************************************/ /*****************************************************************************/

/* Full name: POTW Inhibitions ( Sub 9). sas % include "& prg_ path\ POTW Inhibitions ( Sub 9). sas" / source2;*/

/*****************************************************************************/ /*****************************************************************************/ /* Sub 10: Sludge */ /*****************************************************************************/ /*****************************************************************************/

/* Full name: Sldg MP& M Based ( Sub 10) 02 5.96 sludge generation factor. sas % include "& prg_ path\ Sldg MP& M Based ( Sub 10) 02 5.96 sludge generation factor. sas" / source2; */

/*****************************************************************************/ /*****************************************************************************/ /* Sub 13: Adult Lead  Recreational ( Sport) */ /*****************************************************************************/ /*****************************************************************************/

/* Full name: Lead Benefits ( Sub 12)  New Output. sas */ % include "& prg_ path\ Lead Benefits ( Sub 12)  New Output. sas" / source2;

/*****************************************************************************/ /*****************************************************************************/ /* Sub 17: Adult Lead  Subsistance ( Sub) */ /*****************************************************************************/ /*****************************************************************************/ 20 20 /* Full name: Subsistence Lead Benefits ( Sub 17)  New Output. sas */ % include "& prg_ path\ Subsistence Lead Benefits ( Sub 17)  New Output. sas" / source;

/*****************************************************************************/ /*****************************************************************************/ /* Sub 15: Neo natal Mortality */ /*****************************************************************************/ /*****************************************************************************/

/* Full name: NeoNatal Mortality Benefits ( Sub 15). sas */ % include "& prg_ path\ NeoNatal Mortality Benefits ( Sub 15). sas" / source2;

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

/* Full name: Child Lead Benefits ( Sub 16) 04 seven years. sas */ % include "& prg_ path\ Child Lead Benefits ( Sub 16) 04 seven years. sas" / source2;

/*****************************************************************************/ /*****************************************************************************/ /* Sub Final: Tally Loadings */ /*****************************************************************************/ /*****************************************************************************/

/* Full name: Tally the loadings for all options ( Sub Final). sas */ % include "& prg_ path\ Tally the loadings for all options ( Sub Final). sas" / source2;

/*****************************************************************************/ /*****************************************************************************/ /* Sub 18: Toxic Weighted Loadings */ /*****************************************************************************/ /*****************************************************************************/

/* Full name: Toxic loadings for all options. sas */ % include "& prg_ path\ Toxic loadings for all options. sas" / source2;

/*****************************************************************************/

quit;

/*****************************************************************************/ /* END Master Benefits Ohio. sas */ /*****************************************************************************/ /*****************************************************************************/ 21 21 " Create Datasets ( Sub 1). sas" Using the generated set of Ohio 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. 22 22 /*****************************************************************************/ /* PROGRAM DOCUMENTATION */ /*****************************************************************************/ /* Program: Create Datasets ( Sub 1). sas */ /* Author: Stuart Smith */ /* Date: 08/ 16/ 2000 */ /* Updated: 11/ 25/ 2002 */ /*

*/ /* This program merges facility data and loadings among various input sets */ /* and generates two files for use in calculating instream concentrations. */ /*****************************************************************************/

/*****************************************************************************/ /* BEGIN MAIN PROGRAM CODE */ /*****************************************************************************/

/*****************************************************************************/ /* Merge the facility data with it's loadings */ /*****************************************************************************/

proc sql;

/* Ohio Screeners */ create table scrn as select fac_ info. siteid, potw_ npd as npdes, discharg, reachnmb, fac_ info. source, segl, mnflo, svten, acute, chronic, dcp, wbtype, surface, drainage, potwflow, casnum as casno, loads0, case when opt2 = 1 then 0 else loads2 end as loads2, case when opt5 = 1 then 0 else loads5 end as loads5 from ohio. fac_ info, rundat. scrload, rundat. ohioclos where fac_ info. siteid = scrload. siteid and fac_ info. source = ' screener' and fac_ info. siteid = ohioclos. siteid and base = 1;

/* MP& M facilities */ create table mpm as select fac_ info. siteid, potw_ npd as npdes, reachnmb, discharg, fac_ info. source, segl, mnflo, svten, acute, chronic, dcp, wbtype, surface, drainage, potwflow, casnum as casno, loads0, case when opt2 = 1 then 0 else loads2 end as loads2, case when opt5 = 1 then 0 else loads5 end as loads5 from ohio. fac_ info, rundat. mpmload, rundat. ohioclos where fac_ info. siteid = mpmload. siteid and fac_ info. source = ' mpm' and fac_ info. siteid = ohioclos. siteid and base = 1; 23 23 /* PCS direct dischargers */ /* No closures apply to this group */ create table pcs as select siteid, potw_ npd as npdes, reachnmb, discharg, source, segl, mnflo, svten, acute, chronic, dcp, wbtype, surface, drainage, potwflow, cas_ no as casno, lby0 as loads0, lby0 as loads2, lby0 as loads5 from ohio. fac_ info, ohio. pcsload where fac_ info. potw_ npd = pcsload. npdes and source = ' pcsdirect';

/* Random assigns linked to mpm data */ create table rand_ pcs as select fac_ info. siteid, siteref, potw_ npd as npdes, reachnmb, discharg, fac_ info. source, segl, mnflo, svten, acute, chronic, dcp, wbtype, surface, drainage, potwflow, casnum as casno, loads0, case when opt2 = 1 then 0 else loads2 end as loads2, case when opt5 = 1 then 0 else loads5 end as loads5 from ohio. fac_ info, rundat. scrload, rundat. ohioclos where fac_ info. siteref = scrload. siteid and fac_ info. source = ' random' and fac_ info. siteid = ohioclos. siteid and base = 1;

/* Sum the random over the npdes */ create table rand2 as select npdes, max( reachnmb) as reachnmb, max( segl) as segl, max( mnflo) as mnflo, max( svten) as svten, max( acute) as acute, max( chronic) as chronic, max( dcp) as dcp, max( surface) as surface, max( drainage) as drainage, casno, sum( loads0) as loads0, sum( loads2) as loads2, sum( loads5) as loads5, max( potwflow) as potwflow from rand_ pcs where npdes ^= ' ' group by npdes, casno order by npdes, casno;

quit;

/*****************************************************************************/ /* Delete rather large intermediate data set to free space */ /*****************************************************************************/

proc datasets library= work; delete rand_ pcs; quit;

/*****************************************************************************/ /* Label all random assigns as indirect */ /*****************************************************************************/

data rand2; set rand2;

discharg = ' indirect'; run; 24 24 /*****************************************************************************/ /* Combine the directs from all areas */ /*****************************************************************************/

data directs; set scrn mpm pcs;

/* Remove facilities who are not direct dischargers */ if discharg ^= ' direct' then delete;

/* Fill in missing direct discharger flow with the average used in the */ /* National Anlysis */

/* This value is 171.404 million gallons per year */ if potwflow= 0 or potwflow = . then potwflow = 171.404;

/* Convert from millions of gallons per year to liters per day */ /* 365 days per year, 1000000, 3.875 liters per gallon */ poflow = ( potwflow/ 365) * 10** 6 * 3.875; run;

/*****************************************************************************/ /* Combine the indirects from all areas */ /*****************************************************************************/

data indir; set scrn mpm rand2;

/* Remove facilities who are not indirect dischargers */ if discharg ^= ' indirect' then delete;

/* Remove facilities for which the water treatment facility NPDES */ /* is not known */ if npdes = ' ' then delete;

/* Fill in missing indirect discharger flow with the average */ /* This value is 171.404 million gallons per year */ if potwflow= 0 or potwflow=. then potwflow = 171.404;

/* Convert from millions of gallons per year to liters per day */ /* 365 days per year, 1000000, 3.875 liters per gallon */ poflow = ( potwflow/ 365) * 10** 6 * 3.875; run;

/*****************************************************************************/ /* PROCESS INDIRECTS */ /*****************************************************************************/

proc sql; 25 25 /* Allow for potw removals */ create table indies2 as select npdes, reachnmb, casno, poflow, loads0*( 1( potw_ rem/ 100)) as base, loads2*( 1( potw_ rem/ 100)) as treat2, loads5*( 1( potw_ rem/ 100)) as treat5 from indir, ohio. twf_ remr where indir. casno = twf_ remr. cas order by npdes, casno; quit;

/*****************************************************************************/ /* Merge in the pcs loadings */ /*****************************************************************************/

data indies3; merge indies2 ohio. pcsload( rename=( cas_ no= casno) keep= lby0 npdes cas_ no); by npdes casno; if reachnmb=. then delete; run;

/*****************************************************************************/ /* Generate the correct loads */ /*****************************************************************************/ /* An attempt is being made to account for the full baseline loadings on a */ /* reach based on all facilities discharging to that reach and not solely the*/ /* loadings from MP& M facilities. Thus, PCS data is used to augment the total*/ /* baseline loadings if the PCS loadings are greater than the baseline */ /* from the MP& M based estimated loadings. If the MP& M estimated loadings are*/ /* greater than the PCS loadings, it is assumed that the MP& M loadings are */ /* accounting for all of the baseline loadings. */ /*****************************************************************************/

data indies4; set indies3;

if base=. then delete; if lby0 = . or lby0 < base then do; /* MP& M baseline larger, ignore PCS data */ loads0 = base; loads2 = treat2; loads5 = treat5; end; else do; /* PCS greater than MP& M baseline */ diff = lby0  base; /* Get difference between baselines*/ loads0 = lby0; /* Set baseline to PCS value*/ loads2 = treat2 + diff; /* Apply difference to option levels*/ loads5 = treat5 + diff; /* Apply difference to option levels*/ end; run; 26 26 /*****************************************************************************/ /* Combine the indirects and directs */ /*****************************************************************************/

data both; set indies4 directs;

/* Transform loadings from pounds per year to micrograms per day */ /* ( pounds per year/ 365 days per year) * 0.4536924 kg per pound * */ /* 1000 kg per gram * 1,000,000 ug per gram */ base = ( loads0/ 365) * 0.4535924 * 10** 9; treat2 = ( loads2/ 365) * 0.4535924 * 10** 9; treat5 = ( loads5/ 365) * 0.4535924 * 10** 9; run;

proc sql; create table master as select reachnmb, casno, sum( base) as base, sum( treat2) as treat2, sum( treat5) as treat5, max( poflow) as poflow from both where reachnmb ^= 0 group by reachnmb, casno order by reachnmb, casno; quit;

/*****************************************************************************/ /* Create the datasets for benefit calculation */ /*****************************************************************************/

proc sql; create table rundat. event_ ld as select reachnmb, casno, base, treat2 as treat1, treat5 as treat2, poflow as evnt_ flo, 1 as event_ wt from master; quit;

/*****************************************************************************/ /* END MAIN PROGRAM CODE */ /*****************************************************************************/ 27 27 " Tally the loadings for all options ( Sub Final). sas" Summarize the loadings from Ohio MP& M facilities. 28 28 /*****************************************************************************/ /* PROGRAM DOCUMENTATION */ /*****************************************************************************/ /* Program: Tally the loadings for all options ( Sub Final). sas */ /* Author: Abt Associates, Inc. Stuart Smith */ /* Date: 08/ 16/ 2000 */ /* Updated: 07/ 26/ 2002 */ /*

*/ /* Sum laodings by discharge type and then by chemical groups */ /*****************************************************************************/

/*****************************************************************************/ /* SET TITLE FOR SUBROUTINE */ /*****************************************************************************/

title2 ' Tally Loadings for Options ( Sub Final)';

/*****************************************************************************/ /* BEGIN MAIN PROGRAM CODE */ /*****************************************************************************/

/*****************************************************************************/ /* Merge the facility data with it's loadings */ /*****************************************************************************/

proc sql; /* screeners */ create table scrn as select fac_ info. siteid, discharg, casnum as casno, loads0 as baseload, case when opt2 = 1 then 0 else loads2 end as treat1, case when opt5 = 1 then 0 else loads5 end as treat2, potw_ rem from ohio. fac_ info, rundat. scrload, rundat. ohioclos, ohio. twf_ remr where fac_ info. siteid = scrload. siteid and fac_ info. source = ' screener' and fac_ info. siteid = ohioclos. siteid and base = 1 and scrload. casnum = twf_ remr. cas;

/* mpm facilities */ create table mpm as select fac_ info. siteid, discharg, casnum as casno, loads0 as baseload, case when opt2 = 1 then 0 else loads2 end as treat1, case when opt5 = 1 then 0 else loads5 end as treat2, potw_ rem from ohio. fac_ info, rundat. mpmload, rundat. ohioclos, ohio. twf_ remr where fac_ info. siteid = mpmload. siteid and fac_ info. source = ' mpm' and fac_ info. siteid = ohioclos. siteid and base = 1 29 29 and mpmload. casnum = twf_ remr. cas;

/* pcs direct dischargers */ create table pcs as select siteid, discharg, cas_ no as casno, lby0 as baseload, lby0 as treat1, lby0 as treat2, potw_ rem from ohio. fac_ info, ohio. pcsload, ohio. twf_ remr where fac_ info. potw_ npd = pcsload. npdes and source = ' pcsdirect' and pcsload. cas_ no = twf_ remr. cas;

/* random assigns linked to mpm data */ create table rand_ pcs as select fac_ info. siteid, siteref, discharg, casnum as casno, loads0 as baseload, case when opt2 = 1 then 0 else loads2 end as treat1, case when opt5 = 1 then 0 else loads5 end as treat2, potw_ rem from ohio. fac_ info, rundat. scrload, rundat. ohioclos, ohio. twf_ remr where fac_ info. siteref = scrload. siteid and fac_ info. source = ' random' and fac_ info. siteid = ohioclos. siteid and base = 1 and scrload. casnum = twf_ remr. cas; quit;

/*****************************************************************************/ /* Combine everyone */ /*****************************************************************************/

data facload; set scrn mpm pcs rand_ pcs; drop siteref; run;

/*****************************************************************************/ /* Dump the large separate datasets to save memory space */ /*****************************************************************************/

proc datasets library= work; delete rand_ pcs; delete pcs; delete mpm; delete scrn; quit;

/*****************************************************************************/ /* POTW Removals for Indirects */ /*****************************************************************************/

data facloads; set facload;

if discharg = ' indirect' then do; baseload = baseload*( 1( potw_ rem/ 100)); treat1 = treat1*( 1( potw_ rem/ 100)); 30 30 treat2 = treat2*( 1( potw_ rem/ 100)); end; run;

/*****************************************************************************/ /* Calculate total loadings from mpm facilities */ /*****************************************************************************/

proc sql;

create table indload as select sum( baseload) as baseld, sum( treat1) as newld1, sum( treat2) as newld2, count( distinct casno) as pollts from facload where discharg = ' indirect' and casno not in (' C010',' C003'); /* remove TDS and BOD*/

create table ntlload as select sum( baseload) as baseld, sum( treat1) as newld1, sum( treat2) as newld2, count( distinct casno) as pollts from facloads where discharg = ' indirect' and casno not in (' C010',' C003'); /* remove TDS and BOD*/

create table ntlloadd as select sum( baseload) as baseld, sum( treat1) as newld1, sum( treat2) as newld2, count( distinct casno) as pollts from facloads where discharg = ' direct' and casno not in (' C010',' C003'); /* remove TDS and BOD*/

create table inhval as select sum( baseload) as baseld, sum( treat1) as newld1, sum( treat2) as newld2, count( distinct facloads. casno) as pollts, count( distinct chemdata. casno) as chems from facloads, ohio. chemdata where facloads. casno= chemdata. casno and inhibit is not missing;

create table aqtox_ c as select sum( baseload) as baseld, sum( treat1) as newld1, sum( treat2) as newld2, count( distinct facloads. casno) as pollts, count( distinct chemdata. casno) as chems from facloads, ohio. chemdata where facloads. casno= chemdata. casno and fcval__ i is not missing;

create table aqtox_ a as select sum( baseload) as baseld, sum( treat1) as 31 31 newld1, sum( treat2) as newld2, count( distinct facloads. casno) as pollts, count( distinct chemdata. casno) as chems from facloads, ohio. chemdata where facloads. casno= chemdata. casno and faval__ i is not missing;

create table biosol as select sum( baseload) as baseld, sum( treat1) as newld1, sum( treat2) as newld2, 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';

create table hh_ car as select sum( baseload) as baseld, sum( treat1) as newld1, sum( treat2) as newld2, count( distinct facloads. casno) as pollts, count( distinct chemdata. casno) as chems from facloads, ohio. chemdata where facloads. casno= chemdata. casno and slope_ fa is not missing;

create table hh_ sys as select sum( baseload) as baseld, sum( treat1) as newld1, sum( treat2) as newld2, count( distinct facloads. casno) as pollts, count( distinct chemdata. casno) as chems from facloads, ohio. chemdata where facloads. casno= chemdata. casno and referenc is not missing;

create table haps as select sum( baseload) as baseld, sum( treat1) as newld1, sum( treat2) as newld2, count( distinct facloads. casno) as pollts, count( distinct chemdata. casno) as chems from facloads, ohio. chemdata where facloads. casno= chemdata. casno and hazardou = 1;

create table pps as select sum( baseload) as baseld, sum( treat1) as newld1, sum( treat2) as newld2, count( distinct facloads. casno) as pollts, count( distinct chemdata. casno) as chems from facloads, ohio. chemdata where facloads. casno= chemdata. casno and priority = 1;

create table convp as select facloads. casno, sum( baseload) as baseld, sum( treat1) as newld1, sum( treat2) as newld2, count( distinct facloads. casno) as pollts, count( distinct 32 32 chemdata. casno) as chems from facloads, ohio. chemdata where facloads. casno= chemdata. casno and ( conventi = 1 or facloads. casno=' C037' or facloads. casno=' C036' or facloads. casno=' C004') group by facloads. casno order by casno;

create table otherp as select sum( baseload) as baseld, sum( treat1) as newld1, sum( treat2) as newld2, count( distinct facloads. casno) as pollts, count( distinct chemdata. casno) as chems from facloads, ohio. chemdata where facloads. casno= chemdata. casno and other_ po = 1;

create table leadp as select sum( baseload) as baseld, sum( treat1) as newld1, sum( treat2) as newld2, count( distinct facloads. casno) as pollts, count( distinct chemdata. casno) as chems from facloads, ohio. chemdata where facloads. casno= chemdata. casno and facloads. casno = ' 7439921';

create table tknp as select sum( baseload) as baseld, sum( treat1) as newld1, sum( treat2) as newld2, count( distinct facloads. casno) as pollts, count( distinct chemdata. casno) as chems from facloads, ohio. chemdata where facloads. casno= chemdata. casno and facloads. casno = ' C021';

/*****************************************************************************/ /* Generate an output table of all values */ /*****************************************************************************/

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

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

proc print data= indload; title3 ' Ohio Loads to POTWs ( Indirects)'; title4 '( minus TDS and BOD)  No POTW removals'; quit; proc print data= ntlload; title3 ' Ohio Loads to from Indirects'; title4 '( minus TDS and BOD)  with POTW removals'; quit; proc print data= ntlloadd; title3 ' Ohio Loads ( Direct Dischargers)'; title4 '( minus TDS and BOD)'; quit; proc print data= master2; title3 ' Master List for Table ( National)'; 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; proc print data= tknp; title3 ' TKN Only'; quit;

/*****************************************************************************/ /* END MAIN PROGRAM CODE */ /*****************************************************************************/ 34 34 Program Output 35 35 MPM Ohio CS Benefits ( Opt1= Final No GMs, Opt2= none) 29NOV02 Tally Loadings for Options ( Sub Final) 10: 29 Friday, November 29, 2002 Ohio Loads to POTWs ( Indirects) ( minus TDS and BOD)  No POTW removals Obs baseld newld1 newld2 pollts 1 127611377.41 127611377.41 0 125 MPM Ohio CS Benefits ( Opt1= Final No GMs, Opt2= none) 29NOV02 Tally Loadings for Options ( Sub Final) 10: 29 Friday, November 29, 2002 Ohio Loads to from Indirects ( minus TDS and BOD)  with POTW removals Obs baseld newld1 newld2 pollts 1 25666113.67 25666113.67 0 125 MPM Ohio CS Benefits ( Opt1= Final No GMs, Opt2= none) 29NOV02 Tally Loadings for Options ( Sub Final) 10: 29 Friday, November 29, 2002 Ohio Loads ( Direct Dischargers) ( minus TDS and BOD)

Obs baseld newld1 newld2 pollts 1 83640910.11 83157652.09 81699923.76 125 MPM Ohio CS Benefits ( Opt1= Final No GMs, Opt2= none) 29NOV02 Tally Loadings for Options ( Sub Final) 10: 29 Friday, November 29, 2002 Master List for Table ( National)

Sludge_ Acute_ Chronic_ Obs _ NAME_ Inhibition Biosolids HAPs Toxics Toxics Carcinogens Systemic 1 base 1792428.21 256326.32 15267.26 12355512.58 13936545.87 8513.42 752668.46 2 opt1 1785587.56 254323.16 15097.40 12312840.43 13864349.85 8460.97 747174.82 3 opt2 1001620.45 71150.28 2968.50 10988056.73 11065063.70 2601.06 182093.13 4 poll 86.00 8.00 35.00 106.00 113.00 13.00 76.00 MPM Ohio CS Benefits ( Opt1= Final No GMs, Opt2= none) 29NOV02 Tally Loadings for Options ( Sub Final) 10: 29 Friday, November 29, 2002 Priority Pollutants Obs baseld newld1 newld2 pollts chems 1 195746.29 194047.51 11499.13 42 42 MPM Ohio CS Benefits ( Opt1= Final No GMs, Opt2= none) 29NOV02 Tally Loadings for Options ( Sub Final) 10: 29 Friday, November 29, 2002 Conventional Pollutants Obs casno baseld newld1 newld2 pollts chems 1 C003 2459784.82 2394561.53 589390.78 1 1 2 C004 10205512.49 10019322.04 0.00 1 1 3 C009 69600083.41 69587552.44 67781043.06 1 1 4 C036 5511553.55 5401366.63 2553697.80 1 1 5 C037 2120721.58 2087174.99 0.00 1 1 MPM Ohio CS Benefits ( Opt1= Final No GMs, Opt2= none) 29NOV02 Tally Loadings for Options ( Sub Final) 10: 29 Friday, November 29, 2002 Other Pollutants Obs baseld newld1 newld2 pollts chems 1 43797409.80 43438568.44 21151453.04 82 82 MPM Ohio CS Benefits ( Opt1= Final No GMs, Opt2= none) 29NOV02 Tally Loadings for Options ( Sub Final) 10: 29 Friday, November 29, 2002 Lead Only Obs baseld newld1 newld2 pollts chems 1 35014.93 34797.87 1496.41 1 1 MPM Ohio CS Benefits ( Opt1= Final No GMs, Opt2= none) 29NOV02 Tally Loadings for Options ( Sub Final) 10: 29 Friday, November 29, 2002 TKN Only 36 36 Obs baseld newld1 newld2 pollts chems 1 92811.50 92798.69 12542.31 1 1 37 37 " Toxic loadings for all options. sas" Summarize toxic weighted loadings from Ohio MP& M facilities. 38 38 /*****************************************************************************/ /* PROGRAM DOCUMENTATION */ /*****************************************************************************/ /* Program: Toxic loadings for all options. sas */ /* Author: Abt Associates, Inc. Stuart Smith */ /* Date: 08/ 16/ 2000 */ /* Updated: 07/ 26/ 2002 */ /*

*/ /* Generate summary statistics of toxic weighted loadings */ /*****************************************************************************/

/*****************************************************************************/ /* SET TITLE FOR SUBROUTINE */ /*****************************************************************************/

title2 ' Toxic Loadings for all options';

/*****************************************************************************/ /* BEGIN MAIN PROGRAM CODE */ /*****************************************************************************/

/*****************************************************************************/ /* Merge the facility data with it's loadings */ /*****************************************************************************/

proc sql; /* screeners */ create table scrn as select fac_ info. siteid, discharg, casnum as casno, loads0 as baseload, case when opt2 = 1 then 0 else loads2 end as treat1, case when opt5 = 1 then 0 else loads5 end as treat2, twf, potw_ rem from ohio. fac_ info, rundat. scrload, rundat. ohioclos, ohio. twf_ remr where fac_ info. siteid = scrload. siteid and fac_ info. source = ' screener' and fac_ info. siteid = ohioclos. siteid and base = 1 and scrload. casnum = twf_ remr. cas;

/* mpm facilities */ create table mpm as select fac_ info. siteid, discharg, casnum as casno, loads0 as baseload, case when opt2 = 1 then 0 else loads2 end as treat1, case when opt5 = 1 then 0 else loads5 end as treat2, twf, potw_ rem 39 39 from ohio. fac_ info, rundat. mpmload, rundat. ohioclos, ohio. twf_ remr where fac_ info. siteid = mpmload. siteid and fac_ info. source = ' mpm' and fac_ info. siteid = ohioclos. siteid and base = 1 and mpmload. casnum = twf_ remr. cas;

/* pcs direct dischargers */ create table pcs as select siteid, discharg, cas_ no as casno, lby0 as baseload, lby0 as treat1, lby0 as treat2, twf from ohio. fac_ info, ohio. pcsload, ohio. twf_ remr where fac_ info. potw_ npd = pcsload. npdes and source = ' pcsdirect' and pcsload. cas_ no = twf_ remr. cas;

/* random assigns linked to mpm data */ create table rand_ pcs as select fac_ info. siteid, siteref, discharg, casnum as casno, loads0 as baseload, case when opt2 = 1 then 0 else loads2 end as treat1, case when opt5 = 1 then 0 else loads5 end as treat2, twf, potw_ rem from ohio. fac_ info, rundat. scrload, rundat. ohioclos, ohio. twf_ remr where fac_ info. siteref = scrload. siteid and fac_ info. source = ' random' and fac_ info. siteid = ohioclos. siteid and base = 1 and scrload. casnum = twf_ remr. cas; quit;

/*****************************************************************************/ /* Combine everyone */ /*****************************************************************************/

data facload; set scrn mpm pcs rand_ pcs;

base = baseload; trt1 = treat1; trt2 = treat2;

drop siteref baseload treat1 treat2; run;

/*****************************************************************************/ /* Dump the large separate datasets to save memory space */ /*****************************************************************************/

proc datasets library= work; delete rand_ pcs; delete pcs; delete mpm; delete scrn; quit;

/*****************************************************************************/ 40 40 /* POTW Removals for Indirects */ /*****************************************************************************/

data facloads; set facload;

if discharg = ' indirect' then do; baseload = base*( 1( potw_ rem/ 100)); treat1 = trt1*( 1( potw_ rem/ 100)); treat2 = trt2*( 1( potw_ rem/ 100)); end; else do; baseload = base; treat1 = trt1; treat2 = trt2; end;

drop base trt1 trt2; run;

/*****************************************************************************/ /* Calculate total toxic weighted loadings from mpm facilities */ /*****************************************************************************/

proc sql;

create table ntlload as select sum( baseload* twf) as baseld, sum( treat1* twf) as newld1, sum( treat2* twf) as newld2, count( distinct casno) as pollts from facloads where discharg = ' indirect' and casno not in (' C010',' C003'); /* remove TDS and BOD*/

create table ntlloadd as select sum( baseload* twf) as baseld, sum( treat1* twf) as newld1, sum( treat2* twf) as newld2, count( distinct casno) as pollts from facloads where discharg = ' direct' and casno not in (' C010',' C003'); /* remove TDS and BOD*/

create table inhval as select sum( baseload* twf) as baseld, sum( treat1* twf) as newld1, sum( treat2* twf) as newld2, count( distinct facloads. casno) as pollts, count( distinct chemdata. casno) as chems from facloads, ohio. chemdata where facloads. casno= chemdata. casno and inhibit is not missing;

create table aqtox_ c as select sum( baseload* twf) as baseld, sum( treat1* twf) as 41 41 newld1, sum( treat2* twf) as newld2, count( distinct facloads. casno) as pollts, count( distinct chemdata. casno) as chems from facloads, ohio. chemdata where facloads. casno= chemdata. casno and fcval__ i is not missing;

create table aqtox_ a as select sum( baseload* twf) as baseld, sum( treat1* twf) as newld1, sum( treat2* twf) as newld2, count( distinct facloads. casno) as pollts, count( distinct chemdata. casno) as chems from facloads, ohio. chemdata where facloads. casno= chemdata. casno and faval__ i is not missing;

create table biosol as select sum( baseload* twf) as baseld, sum( treat1* twf) as newld1, sum( treat2* twf) as newld2, 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';

create table hh_ car as select sum( baseload* twf) as baseld, sum( treat1* twf) as newld1, sum( treat2* twf) as newld2, count( distinct facloads. casno) as pollts, count( distinct chemdata. casno) as chems from facloads, ohio. chemdata where facloads. casno= chemdata. casno and slope_ fa is not missing;

create table hh_ sys as select sum( baseload* twf) as baseld, sum( treat1* twf) as newld1, sum( treat2* twf) as newld2, count( distinct facloads. casno) as pollts, count( distinct chemdata. casno) as chems from facloads, ohio. chemdata where facloads. casno= chemdata. casno and referenc is not missing;

create table haps as select sum( baseload* twf) as baseld, sum( treat1* twf) as newld1, sum( treat2* twf) as newld2, count( distinct facloads. casno) as pollts, count( distinct chemdata. casno) as chems from facloads, ohio. chemdata where facloads. casno= chemdata. casno and hazardou = 1;

create table pps as select sum( baseload* twf) as baseld, sum( treat1* twf) as newld1, sum( treat2* twf) as newld2, count( distinct facloads. casno) as pollts, count( distinct 42 42 chemdata. casno) as chems from facloads, ohio. chemdata where facloads. casno= chemdata. casno and priority = 1;

create table convp as select facloads. casno, sum( baseload* twf) as baseld, sum( treat1* twf) as newld1, sum( treat2* twf) as newld2, count( distinct facloads. casno) as pollts, count( distinct chemdata. casno) as chems from facloads, ohio. chemdata where facloads. casno= chemdata. casno and ( conventi = 1 or facloads. casno=' C037' or facloads. casno=' C036') group by facloads. casno order by casno;

create table otherp as select sum( baseload* twf) as baseld, sum( treat1* twf) as newld1, sum( treat2* twf) as newld2, count( distinct facloads. casno) as pollts, count( distinct chemdata. casno) as chems from facloads, ohio. chemdata where facloads. casno= chemdata. casno and other_ po = 1;

create table leadp as select sum( baseload* twf) as baseld, sum( treat1* twf) as newld1, sum( treat2* twf) as newld2, count( distinct facloads. casno) as pollts, count( distinct chemdata. casno) as chems from facloads, ohio. 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 opt1, newld2 as opt2, chems as poll from inhval; insert into master select ' Biosolids' as cat, baseld as base, newld1 as opt1, newld2 as opt2, 8 as poll from biosol; insert into master select ' HAPs' as cat, baseld as base, newld1 as opt1, newld2 as opt2, chems as poll from haps; insert into master select ' Acute Toxics' as cat, baseld as base, newld1 as opt1, newld2 as opt2, chems as poll from aqtox_ a; insert into master select ' Chronic Toxics' as cat, baseld as base, newld1 as opt1, newld2 as 43 43 opt2, chems as poll from aqtox_ c; insert into master select ' Carcinogens' as cat, baseld as base, newld1 as opt1, newld2 as opt2, chems as poll from hh_ car; insert into master select ' Systemic' as cat, baseld as base, newld1 as opt1, newld2 as opt2, chems as poll from hh_ sys; quit;

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

proc print data= ntlload; title3 ' TX Ohio Loads to POTWs ( Indirects)'; quit; proc print data= ntlloadd; title3 ' TX Ohio Loads ( Direct Dischargers)'; quit; proc print data= master2; title3 ' TX Master List for Table ( National)'; quit; proc print data= pps; title3 ' TX Priority Pollutants'; quit; proc print data= convp; title3 ' TX Conventional Pollutants'; quit; proc print data= otherp; title3 ' TX Other Pollutants'; quit; proc print data= leadp; title3 ' TX Lead Only'; quit;

/*****************************************************************************/ /* END MAIN PROGRAM CODE */ /*****************************************************************************/ 44 44 Program Output 45 45 MPM Ohio CS Benefits ( Opt1= Final No GMs, Opt2= none) 29NOV02 Toxic Loadings for all options 10: 29 Friday, November 29, 2002 TX Ohio Loads to POTWs ( Indirects)

Obs baseld newld1 newld2 pollts 1 213036.78 213036.78 0 125 MPM Ohio CS Benefits ( Opt1= Final No GMs, Opt2= none) 29NOV02 Toxic Loadings for all options 10: 29 Friday, November 29, 2002 TX Ohio Loads ( Direct Dischargers)

Obs baseld newld1 newld2 pollts 1 35782.52 33617.58 25070.05 125 MPM Ohio CS Benefits ( Opt1= Final No GMs, Opt2= none) 29NOV02 Toxic Loadings for all options 10: 29 Friday, November 29, 2002 TX Master List for Table ( National)

Sludge_ Acute_ Chronic_ Obs _ NAME_ Inhibition Biosolids HAPs Toxics Toxics Carcinogens Systemic 1 base 241113.63 116656.54 1029.28 177635.21 248595.37 4729.83 121278.39 2 opt1 239240.12 115624.66 1016.97 176480.79 246431.75 4700.15 120337.58 3 opt2 22837.21 11368.84 71.05 17268.96 25010.50 1812.84 15005.87 4 poll 86.00 8.00 35.00 106.00 113.00 13.00 76.00 MPM Ohio CS Benefits ( Opt1= Final No GMs, Opt2= none) 29NOV02 Toxic Loadings for all options 10: 29 Friday, November 29, 2002 TX Priority Pollutants Obs baseld newld1 newld2 pollts chems 1 150063.27 148994.16 9772.10 42 42 MPM Ohio CS Benefits ( Opt1= Final No GMs, Opt2= none) 29NOV02 Toxic Loadings for all options 10: 29 Friday, November 29, 2002 TX Conventional Pollutants Obs casno baseld newld1 newld2 pollts chems 1 C003 0 0 0 1 1 2 C009 0 0 0 1 1 3 C036 0 0 0 1 1 4 C037 0 0 0 1 1 MPM Ohio CS Benefits ( Opt1= Final No GMs, Opt2= none) 29NOV02 Toxic Loadings for all options 10: 29 Friday, November 29, 2002 TX Other Pollutants Obs baseld newld1 newld2 pollts chems 1 98756.04 97660.21 15297.95 82 82 MPM Ohio CS Benefits ( Opt1= Final No GMs, Opt2= none) 29NOV02 Toxic Loadings for all options 10: 29 Friday, November 29, 2002 TX Lead Only Obs baseld newld1 newld2 pollts chems 1 77032.85 76555.32 3292.10 1 1 46 46 Human Health Benefits 47 47 Cancer from Fish Consumption 48 48 " Create Datasets ( Sub1). sas" Generates a data set of pollutant loading events for each Ohio RF1 reach receiving MP& M discharges. See Estimating Ohio MP& M Discharge Loadings for program code. 49 49 " Human Health AWQC ( Sub 2). sas" Calculates in stream pollutant concentrations and generates a data set of pollutant concentrations for each RF1 reach. 50 50 /*****************************************************************************/ /* PROGRAM DOCUMENTATION */ /*****************************************************************************/ /* Program: Human Health AWQC ( Sub 2). sas */ /* Author: Stuart Smith */ /* Date: 4/ 21/ 2000 */ /* Updated: 7/ 25/ 2002 */ /*

*/ /* This subroutine calculates AWQC exceedences for Human Health. */ /*****************************************************************************/

/*****************************************************************************/ /* SET TITLE FOR SUBROUTINE */ /*****************************************************************************/

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

/*****************************************************************************/ /* BEGIN MAIN PROGRAM CODE */ /*****************************************************************************/

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

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

data rchs; set ohio. fac_ info; keep reachnmb segl mnflo svten acute chronic dcp wbtype surface drainage volume; run;

/* Sort by unique reach number and keep only one instance*/ proc sort nodupkey data= rchs; by reachnmb; quit;

/* Sort pollutant data by chemical cas number*/ Proc sort data = ohio. chemdata; by casno; quit;

Proc sql; create table stream as select event_ ld. 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, 51 51 dcp, wbtype, biodegre as decay, surface, drainage, volume from rundat. event_ ld, ohio. chemdata, rchs where event_ ld. casno = chemdata. casno and event_ ld. reachnmb = rchs. reachnmb 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';

/* TEMPORARY FIX  Hard code CDF to 10 for lake erie reaches. Those that have a cdf ( all equal 4.85) are changed to 10. All others remain missing for now.

Stuart Smith 07.16.02 ( evnt_ flo* cdf) changed to ( evnt_ flo* 10) See below.

*/

if cdf ^= . then do; /* We have CDF, so use this*/ cnc_ base = base/( evnt_ flo* 10); cnc_ trt1 = treat1/( evnt_ flo* 10); cnc_ trt2 = treat2/( evnt_ flo* 10); end; else if dcp ^=. then do; /* BENCHMARK LOAD, 907.2 IS CONVERSION FROM KG TO TONS */ benchld = 10000* 907.2; 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;

/*****************************************************************************/ 52 52 /* 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;

/* We have drainage area and surface area information*/ 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 */ 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;

/*****************************************************************************/ /* COMBINE THE LAKE REACHES */ /*****************************************************************************/

data freshwat; set lakes_ dl lakes; run;

proc sort data= freshwat; by reachnmb casno;

/*****************************************************************************/ /* Pull in estimated in stream concentrations using mean flow */ /* These values are calculated by the decay model outside of this analysis */ /*****************************************************************************/

data brad; set rundat. brdevnt;

cnc_ aqcb = base; cnc_ aqc1 = treat1; 53 53 cnc_ aqc2 = treat2;

cnc_ aqab = cnc_ aqcb; cnc_ aqa1 = cnc_ aqc1; cnc_ aqa2 = cnc_ aqc2;

if cnc_ aqcb=. then delete; event_ wt = weight;

keep reachnmb casno cnc_ aqcb cnc_ aqc1 cnc_ aqc2 cnc_ aqab cnc_ aqa1 cnc_ aqa2 event_ wt; run;

data freshwat2; merge brad freshwat; by reachnmb casno; run;

/*****************************************************************************/ /* OBTAIN HUMAN HEALTH CRITERIA FOR FRESHWATER REACHES */ /*****************************************************************************/

proc sql;

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

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;

/***********************************************************************/ /* END FRESHWATER REACHES */ 54 54 /***********************************************************************/

data rundat. cnc_ hh; set freshwat2; run;

data allreach; set frshwtr3; awt= 1; /* adjustment weight, not used but may be required in future*/ /* 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;

/* adjustment weight variable awt replaced with a 1 */ /* not relevant to this analysis. */ create table hh_ awqc as select reachnmb, sum( orgh2o_ b) as testb1, sum( orgh2ot1) as testt1_ 1, 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 */ 55 55 /* Adjustment weight awt replaced with a 1, not relevant to this analysis */

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 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; 56 56 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 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 57 57 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; if multi_ 1=. then multi_ 1= 0; if multi_ 2=. then multi_ 2= 0; run;

/*****************************************************************************/ /* CALCULATE THE TOTAL NUMBER OF AWQC EXCEEDENCES BY CHEMICAL */ /*****************************************************************************/

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, 58 58 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;

/* Spit out the affected reaches for the recreational benefits program */

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 natexb1 natex1_ 1 natex2_ 1 natexb2 natex1_ 2 natex2_ 2 rchb rch1 rch2 orgb org1 org2; label reachnmb= ' Reach Id' natexb1 = ' Exceed, H20 and Organisms ( BL)' natex1_ 1 = ' Exceed, H2O and organisms ( Opt 1)' natex2_ 1 = ' Exceed, H2O and organisms ( Opt 2)' natexb2 = ' Exceed, organisms only ( BL)' natex1_ 2 =' Exceed, organisms only ( Opt 1)' natex2_ 2 =' Exceed, organisms only ( 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';

proc means sum data= chm_ awqc; var ntlbw ntltw1 ntltw2 ntlbo ntlto1 ntlto2 chemb chem1 chem2 chmorgb chmorg1 chmorg2; label ntlbw = ' Exceed, H20 and Organisms ( BL)' ntltw1 = ' Exceed, H2O and organisms ( Opt 1)' ntltw2 = ' Exceed, H2O and organisms ( Opt 2)' 59 59 ntlbo = ' Exceed, organisms only ( BL)' ntlto1 = ' Exceed, organisms only ( Opt 1)' ntlto2 = ' Exceed, organisms only ( 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';

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 ( BL)' t1_ ntlt1 = ' H20 and Organisms ( Opt 1)' t2_ ntlt1 = ' H20 and Organisms ( Opt 2)' t_ ntlb2 = ' Organisms Only ( 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 '; quit;

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;

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; 60 60 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;

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 Ohio Reaches'; quit;

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

/*****************************************************************************/ /* END MAIN PROGRAM CODE */ /*****************************************************************************/ 61 61 Program Output 62 62 MPM Ohio CS Benefits ( Opt1= Final No GMs, Opt2= none) 29NOV02 Human Health AWQC Exceedences Program Output ( Sub 2) 10: 29 Friday, November 29, 2002 Exceedence of Human Health AWQC Limits by Option The MEANS Procedure Variable Label Sum                                                               natexb1 Exceed, H20 and Organisms ( BL) 16.0000000 natex1_ 1 Exceed, H2O and organisms ( Opt 1) 11.0000000 natex2_ 1 Exceed, H2O and organisms ( Opt 2) . natexb2 Exceed, organisms only ( BL) 5.0000000 natex1_ 2 Exceed, organisms only ( Opt 1) 3.0000000 natex2_ 2 Exceed, organisms only ( Opt 2) . rchb Number of h20 reaches ( BL) 3.0000000 rch1 Number of h20 reaches ( Opt 1) 3.0000000 rch2 Number of h20 reaches ( Opt 2) 0 orgb Number of org reaches ( BL) 2.0000000 org1 Number of org reaches ( Opt1) 2.0000000 org2 Number of org reaches ( Opt2) 0                                                               MPM Ohio CS Benefits ( Opt1= Final No GMs, Opt2= none) 29NOV02 Human Health AWQC Exceedences Program Output ( Sub 2) 10: 29 Friday, November 29, 2002 Exceedence of Human Health AWQC Limits by Pollutant The MEANS Procedure Variable Label Sum                                                               ntlbw Exceed, H20 and Organisms ( BL) 16.0000000 ntltw1 Exceed, H2O and organisms ( Opt 1) 11.0000000 ntltw2 Exceed, H2O and organisms ( Opt 2) . ntlbo Exceed, organisms only ( BL) 5.0000000 ntlto1 Exceed, organisms only ( Opt 1) 3.0000000 ntlto2 Exceed, organisms only ( Opt 2) . chemb Number of h20/ org poll ( BL) 11.0000000 chem1 Number of h20/ org poll ( Opt1) 7.0000000 chem2 Number of h20/ org poll ( Opt2) 0 chmorgb Number of org poll ( BL) 4.0000000 chmorg1 Number of org poll ( Opt1) 2.0000000 chmorg2 Number of org poll ( Opt2) 0                                                               MPM Ohio CS Benefits ( Opt1= Final No GMs, Opt2= none) 29NOV02 Human Health AWQC Exceedences Program Output ( Sub 2) 10: 29 Friday, November 29, 2002 Total Number of Reaches Exceeding AWQC Limits for Consumption of Water and Organisms/ Organisms only The MEANS Procedure Variable Label Sum                                                       t_ ntlb1 H20 and Organisms ( BL) 3.0000000 t_ ntlb2 Organisms Only ( BL) 2.0000000 t1_ ntlt1 H20 and Organisms ( Opt 1) 3.0000000 t1_ ntlt2 Organisms Only ( Opt 1) 2.0000000 t2_ ntlt1 H20 and Organisms ( Opt 2) 0 t2_ ntlt2 Organisms Only ( Opt 2) 0 multi_ b Either ( BL) 3.0000000 multi_ 1 Either ( Opt 1) 3.0000000 multi_ 2 Either ( Opt 2) 0                                                       MPM Ohio CS Benefits ( Opt1= Final No GMs, Opt2= none) 29NOV02 Human Health AWQC Exceedences Program Output ( Sub 2) 10: 29 Friday, November 29, 2002 AWQC Eliminations and Reductions ( National) Number of Ohio Reaches The MEANS Procedure Variable Label Sum 63 63                                                            elim1_ 1 Elim. H20 and Organisms ( Opt1) 0 elim2_ 1 Elim. H20 and Organisms ( Opt2) 3.0000000 elim1_ 2 Elim. Organisms ( Opt1) 0 elim2_ 2 Elim. Organisms ( Opt2) 2.0000000 red1_ 1 Redu. H20 and Organisms ( Opt1) 1.0000000 red2_ 1 Redu. H20 and Organisms ( Opt2) 0 red1_ 2 Redu. Organisms ( Opt1) 1.0000000 red2_ 2 Redu. Organisms ( Opt2) 0 reduc1 Total Reaches Reducing ( Opt1) 1.0000000 reduc2 Total Reaches Reducing ( Opt2) 0                                                            MPM Ohio CS Benefits ( Opt1= Final No GMs, Opt2= none) 29NOV02 Human Health AWQC Exceedences Program Output ( Sub 2) 10: 29 Friday, November 29, 2002 Exceedences by Chemical 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 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 Aniline 1 . . . . . 1 . . . . . 1 0 0 0 0 0 2 Arsenic 2 2 . 2 2 . 2 2 . 2 2 . 1 1 0 1 1 0 3 Bis( 2 ethylhexyl) phthalate 2 1 . . . . 2 1 . . . . 1 1 0 0 0 0 4 Cadmium 1 . . . . . 1 . . . . . 1 0 0 0 0 0 5 Dichloroethene, 1,1 2 2 . . . . 2 2 . . . . 1 1 0 0 0 0 6 Dioxane, 1,4 1 . . . . . 1 . . . . . 1 0 0 0 0 0 7 Iron 1 1 . . . . 1 1 . . . . 1 1 0 0 0 0 8 Manganese 1 . . 1 . . 1 . . 1 . . 1 0 0 1 0 0 9 Mercury 1 1 . 1 1 . 1 1 . 1 1 . 1 1 0 1 1 0 10 Nitrosodimethylamine, N 3 3 . . . . 3 3 . . . . 1 1 0 0 0 0 11 Thallium 1 1 . 1 . . 1 1 . 1 . . 1 1 0 1 0 0 64 64 " Cancer fish ( Sub 4) all risk values. 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. 65 65 /*****************************************************************************/ /* PROGRAM DOCUMENTATION */ /*****************************************************************************/ /* Program: Cancer fish ( Sub 4). sas */ /* Author: Stuart Smith */ /* Date: 4/ 21/ 2000 */ /* Updated: 11/ 01/ 2002 */ /* */ /* 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. */

/*****************************************************************************/

/*****************************************************************************/ /* SET TITLE FOR SUBROUTINE */ /*****************************************************************************/

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

/*****************************************************************************/ /* BEGIN MAIN PROGRAM CODE */ /*****************************************************************************/

/*****************************************************************************/ /* 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 ohio. 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, 66 66 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 ohio. fac_ info; run;

proc sort data= facs; by siteid; quit;

data cnty; set facs;

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

keep reachnmb cntyfip1 cntyfip8; run;

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

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

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

proc sort data= cnty3; by cntyfip; quit;

/*****************************************************************************/ /* OBTAIN REACH MILES BY COUNTY */ /*****************************************************************************/

data rchmile; 67 67 set ohio. 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;

proc sort data= miles; by reachnmb; quit;

/*****************************************************************************/ /* Merge in Fishing Advisory Data with County mile data */ /*****************************************************************************/

proc sort data= ohio. fishadv1; by reachnmb; quit;

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

/* Hard Wire Statewide Advisories */ 68 68 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 missing the percentage of water miles for the given reach, use */ /* mean vale of 6% ( 0.06) */ /* Average family size is assumed to be 2.62 persons */ /* Subsistance population assumed to be 5% ( 0.05) of the sport pop. */

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 = . then delete; if fwsptpop=. then delete; run; 69 69 proc sort data= canc; by reachnmb casno event_ wt; quit;

/*****************************************************************************/ /* Output lead concentrations on reaches where the concentration is */ /* greater than 1 ug/ l. This data used in the lead benefits programs */ /*****************************************************************************/

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, ohio. 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.008; /* consumption rate 1 child : 8.0 ( rec.) grams/ day */ cr2 = 0.017; /* consumption rate 2 adult: 17.5 ( rec.) grams/ day */ cr3 = 0.065; /* consumption rate 3 child: 65.55 ( 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.) */ 70 70 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 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; quit;

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

proc means data= valsub; title3 ' Average Lifetime Cancer Risk Subsistance'; quit; 71 71 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; sptpop = fwsptpop + swsptpop; subpop = fwsubpop + swsubpop;

totc_ b = fwtotc_ b + swtotc_ b; totc_ 1 = fwtotc_ 1 + swtotc_ 1; 72 72 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;

proc means sum; var totspt_ b totsub_ b totspt_ 1 totsub_ 1 totspt_ 2 totsub_ 2 totc_ b totc_ 1 totc_ 2 sptpop subpop; 73 73 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;

proc sql; create table byrch as select reachnmb, sum( base) as base, sum( treat1) as treat1, sum( treat2) as treat2, sum( sptpop) as sptpop, sum( subpop) as subpop, sum( totc_ b) as totc_ b, sum( totc_ 1) as totc_ 1, sum( totc_ 2) as totc_ 2 from canc2a group by reachnmb order by reachnmb; quit;

proc print data= byrch; title3 ' NATIONAL Cancer by reach'; quit;

/*****************************************************************************/ /* Calculate decrease in cancer cases under the options and the monetized */ /* benefit based on the value of a statistical life ( in $ 1999) */ /* lower $ 2.6 mln */ /* upper $ 13.6 mln */ /* mid $ 7.9 */ /* KUNAL SHARMA ( 03.20.02)  Mid Value Has Changed. See Below. */ /*****************************************************************************/

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; 74 74 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; 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; weight weight; var mid1 mid2; label mid1 = ' Mid Benefits ( Opt1)' mid2 = ' Mid Benefits ( Opt2)'; title3 ' Monetized Benefits ($ 2001)'; quit;

proc sort; by casno; quit;

proc means sum; weight weight; by casno; var mid1 mid2; label mid1 = ' Mid Benefits ( Opt1)' mid2 = ' Mid Benefits ( Opt2)'; title3 ' Monetized Benefits ($ 2001) by Pollutant'; quit;

proc sql; 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 75 75 order by casno; quit;

proc print data= bychemn; label diff1 = ' Saved Cases ( opt1)' diff2 = ' Saved Cases ( opt2)' midpt1 = ' Midpoint Benefits ( opt1)' midpt2 = ' Midpoint Benefits ( opt2)'; title3 ' Benefits by Chemical Casno ($ 2001)'; quit;

/*****************************************************************************/ /* END MAIN PROGRAM CODE */ /*****************************************************************************/ 76 76 Program Output 77 77 MPM Ohio CS Benefits ( Opt1= Final No GMs, Opt2= none) 29NOV02 Cancer from Fish Consumption ( Sub 4) 13: 00 Friday, November 29, 2002 Average Lifetime Cancer Risk Recreational The MEANS Procedure Variable N Mean Std Dev Minimum Maximum                                                                                REACHNMB 23 4313065832 402936554 4100001001 5120101013 rsk_ bspt 23 3.1950353E 6 0.000012748 4.964859E 17 0.000060311 rsk_ 1spt 23 1.3017865E 6 4.3428006E 6 4.964859E 17 0.000016766 rsk_ 2spt 23 7.875826E 11 2.616005E 10 0 9.672594E 10                                                                                MPM Ohio CS Benefits ( Opt1= Final No GMs, Opt2= none) 29NOV02 Cancer from Fish Consumption ( Sub 4) 13: 00 Friday, November 29, 2002 Average Lifetime Cancer Risk Subsistance The MEANS Procedure Variable N Mean Std Dev Minimum Maximum                                                                                REACHNMB 23 4313065832 402936554 4100001001 5120101013 rsk_ bsub 23 0.000026487 0.000105686 4.11595E 16 0.000499990 rsk_ 1sub 23 0.000010792 0.000036003 4.11595E 16 0.000138997 rsk_ 2sub 23 6.529188E 10 2.1687107E 9 0 8.0187388E 9                                                                                MPM Ohio CS Benefits ( Opt1= Final No GMs, Opt2= none) 29NOV02 Cancer from Fish Consumption ( Sub 4) 13: 00 Friday, November 29, 2002 SAMPLE Cancer estimates The MEANS Procedure Variable Label Sum                                                             totspt_ b Total Sport Cases ( BL) 0.0023462 totsub_ b Total Subsistence Cases ( BL) 0.000974333 totspt_ 1 Total Sport Cases ( Opt 1) 0.000769840 totsub_ 1 Total Subsistence Cases ( Opt1 ) 0.000319388 totspt_ 2 Total Sport Cases ( Opt 2) 4.039003E 8 totsub_ 2 Total Subsistence Cases ( Opt 2) 1.6751893E 8 totc_ b Total Cancer Cases ( BL) 0.0033205 totc_ 1 Total Cancer Cases ( Opt 1) 0.0010892 totc_ 2 Total Cancer Cases ( Opt 2) 5.7141923E 8 sptpop Exposed Sport Population 1490238.00 subpop Exposed Subsistence Population 74527.00                                                             MPM Ohio CS Benefits ( Opt1= Final No GMs, Opt2= none) 29NOV02 Cancer from Fish Consumption ( Sub 4) 13: 00 Friday, November 29, 2002 NATIONAL Cancer estimates The MEANS Procedure Variable Label Sum                                                             totspt_ b Total Sport Cases ( BL) 0.0023462 totsub_ b Total Subsistence Cases ( BL) 0.000974333 totspt_ 1 Total Sport Cases ( Opt 1) 0.000769840 totsub_ 1 Total Subsistence Cases ( Opt1 ) 0.000319388 totspt_ 2 Total Sport Cases ( Opt 2) 4.039003E 8 totsub_ 2 Total Subsistence Cases ( Opt 2) 1.6751893E 8 totc_ b Total Cancer Cases ( BL) 0.0033205 totc_ 1 Total Cancer Cases ( Opt 1) 0.0010892 totc_ 2 Total Cancer Cases ( Opt 2) 5.7141923E 8 sptpop Exposed Sport Population 1490238.00 subpop Exposed Subsistence Population 74527.00                                                             78 78 MPM Ohio CS Benefits ( Opt1= Final No GMs, Opt2= none) 29NOV02 Cancer from Fish Consumption ( Sub 4) 13: 00 Friday, November 29, 2002 Monetized Benefits ($ 2001)

The MEANS Procedure Variable Label Sum                                                 mid1 Mid Benefits ( Opt1) 14503.21 mid2 Mid Benefits ( Opt2) 21582.82                                                 MPM Ohio CS Benefits ( Opt1= Final No GMs, Opt2= none) 29NOV02 Cancer from Fish Consumption ( Sub 4) 13: 00 Friday, November 29, 2002 Monetized Benefits ($ 2001) by Pollutant  CASNO= 117817

The MEANS Procedure Variable Label Sum                                                 mid1 Mid Benefits ( Opt1) 281.6509050 mid2 Mid Benefits ( Opt2) 577.5226061                                                  CASNO= 123911

Variable Label Sum                                                 mid1 Mid Benefits ( Opt1) 8.9817015 mid2 Mid Benefits ( Opt2) 9.7155103                                                  CASNO= 127184

Variable Label Sum                                                 mid1 Mid Benefits ( Opt1) 256.3534047 mid2 Mid Benefits ( Opt2) 354.0688947                                                  CASNO= 62533

Variable Label Sum                                                 mid1 Mid Benefits ( Opt1) 232.4117576 mid2 Mid Benefits ( Opt2) 239.2664074                                                  CASNO= 62759

Variable Label Sum                                                 mid1 Mid Benefits ( Opt1) 0 mid2 Mid Benefits ( Opt2) 658.6375163                                                  CASNO= 67663

Variable Label Sum                                                 mid1 Mid Benefits ( Opt1) 3.6853219 79 79 mid2 Mid Benefits ( Opt2) 5.1300883                                                 MPM Ohio CS Benefits ( Opt1= Final No GMs, Opt2= none) 29NOV02 Cancer from Fish Consumption ( Sub 4) 13: 00 Friday, November 29, 2002 Monetized Benefits ($ 2001) by Pollutant  CASNO= 7440382

The MEANS Procedure Variable Label Sum                                                 mid1 Mid Benefits ( Opt1) 12988.53 mid2 Mid Benefits ( Opt2) 18707.37                                                  CASNO= 75003

Variable Label Sum                                                 mid1 Mid Benefits ( Opt1) 5.0830374 mid2 Mid Benefits ( Opt2) 10.3305030                                                  CASNO= 75092

Variable Label Sum                                                 mid1 Mid Benefits ( Opt1) 1.1563429 mid2 Mid Benefits ( Opt2) 1.6092987                                                  CASNO= 75354

Variable Label Sum                                                 mid1 Mid Benefits ( Opt1) 541.3194067 mid2 Mid Benefits ( Opt2) 751.3926860                                                  CASNO= 78591

Variable Label Sum                                                 mid1 Mid Benefits ( Opt1) 1.0129558 mid2 Mid Benefits ( Opt2) 1.2747406                                                  CASNO= 79016

Variable Label Sum                                                 mid1 Mid Benefits ( Opt1) 20.7957897 mid2 Mid Benefits ( Opt2) 28.1388833                                                 MPM Ohio CS Benefits ( Opt1= Final No GMs, Opt2= none) 29NOV02 Cancer from Fish Consumption ( Sub 4) 13: 00 Friday, November 29, 2002 Monetized Benefits ($ 2001) by Pollutant 80 80  CASNO= 86306

The MEANS Procedure Variable Label Sum                                                 mid1 Mid Benefits ( Opt1) 162.2287400 mid2 Mid Benefits ( Opt2) 238.3631497                                                 MPM Ohio CS Benefits ( Opt1= Final No GMs, Opt2= none) 29NOV02 Cancer from Fish Consumption ( Sub 4) 13: 00 Friday, November 29, 2002 Benefits by Chemical Casno ($ 2001)

Obs CASNO diff1 diff2 ben1low ben1hg ben2low ben2hg midpt1 midpt2 1 117817 .000043331 .000088850 108.33 589.30 222.12 1208.35 281.65 577.52 2 123911 .000001382 .000001495 3.45 18.79 3.74 20.33 8.98 9.72 3 127184 .000039439 .000054472 98.60 536.37 136.18 740.82 256.35 354.07 4 62533 .000035756 .000036810 89.39 486.28 92.03 500.62 232.41 239.27 5 62759 0 .000101329 0.00 0.00 253.32 1378.07 0.00 658.64 6 67663 .000000567 .000000789 1.42 7.71 1.97 10.73 3.69 5.13 7 7440382 .001998236 .002878057 4995.59 27176.00 7195.14 39141.57 12988.53 18707.37 8 75003 .000000782 .000001589 1.96 10.64 3.97 21.61 5.08 10.33 9 75092 .000000178 .000000248 0.44 2.42 0.62 3.37 1.16 1.61 10 75354 .000083280 .000115599 208.20 1132.61 289.00 1572.14 541.32 751.39 11 78591 .000000156 .000000196 0.39 2.12 0.49 2.67 1.01 1.27 12 79016 .000003199 .000004329 8.00 43.51 10.82 58.88 20.80 28.14 13 86306 .000024958 .000036671 62.40 339.43 91.68 498.73 162.23 238.36 81 81 Cancer from Drinking Water 82 82 " Create Revised Datasets for Brad  Final ( No GMs). sas" Generates a data set of pollutant loadings discharged to Ohio RF1 reaches from direct dischargers and POTWs ( with removals) for the water quality modeling program. 83 83 /*****************************************************************************/ /* PROGRAM DOCUMENTATION */ /*****************************************************************************/ /* Program: Create Revised Datasets for Brad  Final ( No GMs). sas */ /* Author: Abt Associates, Inc. Stuart Smith */ /* Date: 08/ 13/ 2000 */ /* Updated: 11/ 25/ 2002 */ /*

*/ /* Merges facility data and loadings among many sets and generates two */ /* files for use in calculating instream concentrations. */ /*****************************************************************************/

/*****************************************************************************/ /* BEGIN MAIN PROGRAM CODE */ /*****************************************************************************/

/*****************************************************************************/ /* Static Library  DO NOT CHANGE */ /*****************************************************************************/

% let ohio = " H:\ ENVR\ Smithse\ mpm_ ohio\ Input Data\ Static";

/*****************************************************************************/ /* Run Specific Data Library. MUST BE AN EXISTING DIRECTORY !! */ /*****************************************************************************/

% let rundat = " H:\ ENVR\ Smithse\ mpm_ ohio\ Input Data\ Final ( No GMs)";

libname ohio v6 & ohio; libname rundat v6 & rundat;

/*****************************************************************************/ /* Merge the facility data with it's loadings */ /*****************************************************************************/

proc sql; /* screeners */ create table scrn as select fac_ info. siteid, potw_ npd as potw, discharg, reachnmb, fac_ info. source, casnum as casno, loads0, case when opt2 = 1 then 0 else loads2 end as loads2, case when opt5 = 1 then 0 else loads5 end as loads5 from ohio. fac_ info, rundat. scrload, rundat. ohioclos where fac_ info. siteid = scrload. siteid and fac_ info. source = ' screener' and fac_ info. siteid = ohioclos. siteid and base = 1; 84 84 /* mpm facilities */ create table mpm as select fac_ info. siteid, potw_ npd as potw, reachnmb, discharg, fac_ info. source, casnum as casno, loads0, case when opt2 = 1 then 0 else loads2 end as loads2, case when opt5 = 1 then 0 else loads5 end as loads5 from ohio. fac_ info, rundat. mpmload, rundat. ohioclos where fac_ info. siteid = mpmload. siteid and fac_ info. siteid = ohioclos. siteid and base = 1 and fac_ info. source = ' mpm';

/* pcs direct dischargers */ /* They have no closures */ create table pcs as select siteid, potw_ npd as potw, reachnmb, discharg, source, cas_ no as casno, lby0 as loads0, lby0 as loads2, lby0 as loads5 from ohio. fac_ info, ohio. pcsload where fac_ info. potw_ npd = pcsload. npdes and source = ' pcsdirect';

/* random assigns linked to mpm data */ create table rand_ pcs as select fac_ info. siteid, siteref, potw_ npd as potw, reachnmb, discharg, fac_ info. source, casnum as casno, loads0, case when opt2 = 1 then 0 else loads2 end as loads2, case when opt5 = 1 then 0 else loads5 end as loads5 from ohio. fac_ info, rundat. scrload, rundat. ohioclos where fac_ info. siteref = scrload. siteid and fac_ info. source = ' random' and fac_ info. siteid = ohioclos. siteid and base = 1; quit;

/*****************************************************************************/ /* Combine the directs from all areas */ /*****************************************************************************/

data directs; set scrn mpm pcs;

if discharg ^= ' direct' then delete; run;

/*****************************************************************************/ /* Combine the indirects from all areas */ /*****************************************************************************/

data indir; set scrn mpm rand_ pcs;

if discharg ^= ' indirect' then delete; if potw = ' ' then delete; run;

/*****************************************************************************/ 85 85 /* Process indirects */ /*****************************************************************************/

proc sql;

/* sum pollutants by potw */ create table indies as select potw, min( reachnmb) as reach, casno, sum( loads0) as base, sum( loads2) as treat1, sum( loads5) as treat2 from indir group by potw, casno order by potw, casno;

/* allow for potw removals */ create table indies2 as select potw as npdes, reach as reachnmb, indies. casno as cas_ no, base*( 1( potw_ rem/ 100)) as base, treat1*( 1( potw_ rem/ 100)) as treat1, treat2*( 1( potw_ rem/ 100)) as treat2 from indies, ohio. twf_ remr where indies. casno = twf_ remr. cas; quit;

/*****************************************************************************/ /* Merge in the pcs loadings */ /*****************************************************************************/

data indies3; merge indies2 ohio. pcsload( keep = lby0 npdes cas_ no); by npdes cas_ no; if reachnmb=. then delete; potw= npdes; casno= cas_ no; run;

/*****************************************************************************/ /* Generate the correct loads */ /*****************************************************************************/ /* An attempt is being made to account for the full baseline loadings on a */ /* reach based on all facilities discharging to that reach and not solely the*/ /* loadings from MP& M facilities. Thus, PCS data is used to augment the total*/ /* baseline loadings if the PCS loadings are greater than the baseline */ /* from the MP& M based estimated loadings. If the MP& M estimated loadings are*/ /* greater than the PCS loadings, it is assumed that the MP& M loadings are */ /* accounting for all of the baseline loadings. */ /*****************************************************************************/

data indies4; set indies3; 86 86 if base=. then delete; if lby0 = . or lby0 < base then do; /* MP& M baseline larger, ignore PCS data */ loads0 = base; loads2 = treat1; loads5 = treat2; end; else do; /* PCS greater than MP& M baseline */ diff = lby0  base; /* Get difference between baselines*/ loads0 = lby0; /* Set baseline to PCS value*/ loads2 = treat1 + diff; /* Apply difference to option levels*/ loads5 = treat2 + diff; /* Apply difference to option levels*/ end;

keep potw casno reachnmb loads0 loads2 loads5 weight; run;

/*****************************************************************************/ /* Get directs with the same variables as indirects */ /*****************************************************************************/

data directs2; set directs;

keep potw casno reachnmb loads0 loads2 loads5; run;

/*****************************************************************************/ /* Combine the indirects and directs */ /*****************************************************************************/

data both; set indies4 directs2; run;

/*****************************************************************************/ /* Sum up over potws and directs by reach */ /*****************************************************************************/

proc sql;

create table both2 as select reachnmb, casno, sum( loads0) as base, sum( loads2) as treat1, sum( loads5) as treat2 from both group by reachnmb, casno order by reachnmb, casno;

/* transform loadings to kg/ day and add in the decay rate */ /* allow for closures of MP& M Ohio facilities */

create table both3 as 87 87 select both2. reachnmb, both2. casno, (( base/ 365) * 0.4535924) as base, (( treat1/ 365) * 0.4535924) as treat1, (( treat2/ 365) * 0.4535924) as treat2, ( biodegre/ 24) as decay from both2, ohio. chemdata where both2. casno = chemdata. casno; quit;

data master; set both3;

if reachnmb = 0 then delete; run;

/*****************************************************************************/ /* Create the datasets for Brad */ /*****************************************************************************/

proc sql;

create table rundat. to_ brad as select reachnmb, casno, base, treat1, treat2, decay from master; quit;

/*****************************************************************************/ /* END MAIN PROGRAM CODE */ /*****************************************************************************/ 88 88 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 ( http:// www. epa. gov/ opptintr/ env_ ind/ index. html). See DCN 37554. 89 89 " Modify Brad Datasets for Final ( No GMs) run. sas" This program modifies the output from the Water Quality Modeling for use in the benefits programs. 90 90 /*****************************************************************************/ /* PROGRAM DOCUMENTATION */ /*****************************************************************************/ /* Program: Modify Brad Datasets for Final ( No GMs) run. sas */ /* Author: Abt Associates, Inc. Stuart Smith */ /* Date: 08/ 23/ 2000 */ /* Updated: 11/ 25/ 2002 */ /*

*/ /* This program takes the output from the decay model and generates files */ /* with concetrations by reach for all chemicals. */ /* */ /* Two output files per policy grouping exist as two sets of reach flows are*/ /* used, normal ( mean flow) and low ( 7q10 flow). Mean flow concentrations */ /* are used for Human Health effects and low flow are used for Aquatic life */ /* effects. */ /*****************************************************************************/

/*****************************************************************************/ /* BEGIN MAIN PROGRAM CODE */ /*****************************************************************************/

libname brad v6 " H:\ ENVR\ Smithse\ mpm_ ohio\ Input Data\ Final ( No GMs)"; libname rundat v6 " H:\ ENVR\ Smithse\ mpm_ ohio\ Input Data\ Final ( No GMs)";

/*****************************************************************************/ /* Pull in the data sets and sum over the observations for each reach */ /*****************************************************************************/

proc sql;

create table prefsa as select onreach as reachnmb, casno, sum( baseconc) as base, sum( t1conc) as treat1, sum( t2conc) as treat2, avg( 1) as weight from brad. fnlmean group by onreach, casno order by reachnmb, casno;

create table prefsl as select onreach as reachnmb, casno, sum( baseconc) as base, sum( t1conc) as treat1, sum( t2conc) as treat2, avg( 1) as weight from brad. fnllow group by onreach, casno order by reachnmb, casno; quit; 91 91 /*****************************************************************************/ /* Save the concentrations data sets for the analysis */ /*****************************************************************************/

data rundat. brdevnt; set prefsa; run; data rundat. brdevnt2; set prefsl; run;

/*****************************************************************************/ /* END MAIN PROGRAM CODE */ /*****************************************************************************/ 92 92 " 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. 93 93 /*****************************************************************************/ /* PROGRAM DOCUMENTATION */ /*****************************************************************************/ /* Program: Drinking Water Cancer ( Sub 6) all risk values. sas */ /* Author: Stuart Smith */ /* Date: 04/ 21/ 2000 */ /* Updated: 11/ 25/ 2002 */ /*

*/ /* This program calculates cancer incidents due to drinking water */ /* consumption by exposed populations. */ /*****************************************************************************/

/*****************************************************************************/ /* SET TITLE FOR SUBROUTINE */ /*****************************************************************************/

title2 ' Drinking Water Cancer ( Sub 6)';

/*****************************************************************************/ /* BEGIN MAIN PROGRAM CODE */ /*****************************************************************************/

/*****************************************************************************/ /* Load concentrations estimated using mean flow from decay model. */ /*****************************************************************************/

data canc; set rundat.& dwset; if baseconc > 0; if intakect > 0;

weight = 1;

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 94 94 treat1, sum( t2conc) as treat2, avg( dwpop) as pop, avg( slope_ fa) as sf, avg( referenc) as rfd, weight as smplwt from canc, ohio. 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 */

/* Keep only carcinogens which have no DW criterion*/ if casno ^= ' 62533' and casno ^= ' 62759' and casno ^= ' 75003' and casno ^= ' 78591' and casno ^= ' 86306' and casno ^= ' 123911' then delete;

/* 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 */ lt = 70; /* lifetime: 70 years */

/* CALCULATE CANCER RISK */