Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart...
-
Upload
julius-cain -
Category
Documents
-
view
216 -
download
0
Transcript of Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart...
![Page 1: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/1.jpg)
Adventures in ODS: Adventures in ODS: Producing Customized ReportsProducing Customized Reports
Using Output from Multiple Using Output from Multiple SAS® ProceduresSAS® Procedures
Stuart Long ([email protected]) Westat, Durham, NC
Jeff Abolafia, Rho Inc, Chapel Hill, NC
Lawrence Park, Chapel Hill, NC
![Page 2: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/2.jpg)
SAS tools for automating the SAS tools for automating the generation of customized reports generation of customized reports
![Page 3: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/3.jpg)
SAS tools for automating the SAS tools for automating the generation of customized reports generation of customized reports
Output Delivery System (ODS)Output Delivery System (ODS)
![Page 4: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/4.jpg)
SAS tools for automating the SAS tools for automating the generation of customized reports generation of customized reports
Output Delivery System (ODS)Output Delivery System (ODS)
SAS Macro facilitySAS Macro facility
![Page 5: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/5.jpg)
Customized ReportsCustomized Reports
![Page 6: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/6.jpg)
Response Variable = Body Mass Index Class Covariates = race gender Continuous Covariates = age height Independent Mean Standard Model Parameter Estimates Variable Error N Crude SE Adjusted SE (a) (a) (a) (b) (b) (c) (c) -----------------------------------------------------------------------------------------
Years lived on farm 36.21 0.08 28166 0.030 0.001 0.021 0.002 Acres planted crops 47.03 0.04 28209 0.022 0.001 0.024 0.002
Customized ReportsCustomized Reports
![Page 7: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/7.jpg)
Response Variable = Body Mass Index Class Covariates = race gender Continuous Covariates = age height Independent Mean Standard Model Parameter Estimates Variable Error N Crude SE Adjusted SE (a) (a) (a) (b) (b) (c) (c) -----------------------------------------------------------------------------------------
Years lived on farm 36.21 0.08 28166 0.030 0.001 0.021 0.002 Acres planted crops 47.03 0.04 28209 0.022 0.001 0.024 0.002
Customized ReportsCustomized Reports PROC MEANS PROC MEANS
![Page 8: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/8.jpg)
Response Variable = Body Mass Index Class Covariates = race gender Continuous Covariates = age height Independent Mean Standard Model Parameter Estimates Variable Error N Crude SE Adjusted SE (a) (a) (a) (b) (b) (c) (c) -----------------------------------------------------------------------------------------
Years lived on farm 36.21 0.08 28166 0.030 0.001 0.021 0.002 Acres planted crops 47.03 0.04 28209 0.022 0.001 0.024 0.002
Customized ReportsCustomized ReportsCrude PROC GLMCrude PROC GLM
![Page 9: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/9.jpg)
Response Variable = Body Mass Index Class Covariates = race gender Continuous Covariates = age height Independent Mean Standard Model Parameter Estimates Variable Error N Crude SE Adjusted SE (a) (a) (a) (b) (b) (c) (c) -----------------------------------------------------------------------------------------
Years lived on farm 36.21 0.08 28166 0.030 0.001 0.021 0.002 Acres planted crops 47.03 0.04 28209 0.022 0.001 0.024 0.002
Customized ReportsCustomized ReportsAdjusted PROC GLMAdjusted PROC GLM
![Page 10: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/10.jpg)
Response Variable = Body Mass Index Class Covariates = race gender Continuous Covariates = age height Independent Mean Standard Model Parameter Estimates Variable Error N Crude SE Adjusted SE (a) (a) (a) (b) (b) (c) (c) -----------------------------------------------------------------------------------------
Years lived on farm 36.21 0.08 28166 0.030 0.001 0.021 0.002 Acres planted crops 47.03 0.04 28209 0.022 0.001 0.024 0.002
Customized ReportsCustomized ReportsAdditional Descriptive InformationAdditional Descriptive Information
![Page 11: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/11.jpg)
ODSODSAdditional Descriptive Information
PROCMEANS
![Page 12: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/12.jpg)
ODSODSAdditional Descriptive Information
PROCMEANS
AHS43300.sas 09:30 Thursday, February 28, 2008 1120
The MEANS Procedure
Analysis Variable : years_on_farm Years lived or worked on farm
Mean N Std Error Std Dev----------------------------------------------------- 36.2130062 53482 0.0789519 18.2585612-----------------------------------------------------
![Page 13: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/13.jpg)
ODSODSAdditional Descriptive Information
PROCMEANS
CrudePROCGLM
AHS43300.sas 09:30 Thursday, February 28, 2008 1120
The MEANS Procedure
Analysis Variable : years_on_farm Years lived or worked on farm
Mean N Std Error Std Dev----------------------------------------------------- 36.2130062 53482 0.0789519 18.2585612-----------------------------------------------------
![Page 14: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/14.jpg)
ODSODSAdditional Descriptive Information
PROCMEANS
CrudePROCGLM
AHS43300.sas 09:30 Thursday, February 28, 2008 1120
The MEANS Procedure
Analysis Variable : years_on_farm Years lived or worked on farm
Mean N Std Error Std Dev----------------------------------------------------- 36.2130062 53482 0.0789519 18.2585612-----------------------------------------------------
AHS43300.sas AHS43300.sas 09:30 Thursday, February 28, 2008 112109:30 Thursday, February 28, 2008 1121Phase 1 Release: P1REL0506Phase 1 Release: P1REL0506Phase 2 Release: P2REL0612.03Phase 2 Release: P2REL0612.03Phase 3 Release: Interim release P3REL0707.01Phase 3 Release: Interim release P3REL0707.01Spouses - Frequencies of Part 3: super-controlsSpouses - Frequencies of Part 3: super-controls
The GLM ProcedureThe GLM Procedure
Number of Observations Read 84742Number of Observations Read 84742Number of Observations Used 49624Number of Observations Used 49624
AHS43300.sas 09:30 Thursday, February AHS43300.sas 09:30 Thursday, February 28, 2008 112428, 2008 1124The GLM ProcedureThe GLM Procedure
Dependent Variable: bmi Body Mass IndexDependent Variable: bmi Body Mass Index
Sum ofSum ofSource DF Squares Mean Square F Value Pr > FSource DF Squares Mean Square F Value Pr > F
Model 1 14626.311 14626.311 695.33 <.0001Model 1 14626.311 14626.311 695.33 <.0001
Error 49622 1043803.927 21.035Error 49622 1043803.927 21.035
Corrected Total 49623 1058430.238Corrected Total 49623 1058430.238
R-Square Coeff Var Root MSE bmi MeanR-Square Coeff Var Root MSE bmi Mean
0.013819 17.55976 4.586404 26.118830.013819 17.55976 4.586404 26.11883
Source DF Type I SS Mean Square F Value Pr > FSource DF Type I SS Mean Square F Value Pr > F
years_on_farm 1 14626.31136 14626.31136 695.33 <.0001years_on_farm 1 14626.31136 14626.31136 695.33 <.0001
Source DF Type III SS Mean Square F Value Pr > FSource DF Type III SS Mean Square F Value Pr > F
years_on_farm 1 14626.31136 14626.31136 695.33 <.0001years_on_farm 1 14626.31136 14626.31136 695.33 <.0001
StandardStandardParameter Estimate Error t Value Pr > |t|Parameter Estimate Error t Value Pr > |t|
Intercept 25.02571119 0.04628587 540.68 <.0001Intercept 25.02571119 0.04628587 540.68 <.0001years_on_farm 0.02987844 0.00113309 26.37 <.0001years_on_farm 0.02987844 0.00113309 26.37 <.0001
![Page 15: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/15.jpg)
ODSODSAdditional Descriptive InformationPROCMEANS
AHS43300.sas 09:30 Thursday, February 28, 2008 1120
The MEANS Procedure
Analysis Variable : years_on_farm Years lived or worked on farm
Mean N Std Error Std Dev----------------------------------------------------- 36.2130062 53482 0.0789519 18.2585612-----------------------------------------------------
CrudePROCGLM
AHS43300.sas AHS43300.sas 09:30 Thursday, February 28, 2008 112109:30 Thursday, February 28, 2008 1121Phase 1 Release: P1REL0506Phase 1 Release: P1REL0506Phase 2 Release: P2REL0612.03Phase 2 Release: P2REL0612.03Phase 3 Release: Interim release P3REL0707.01Phase 3 Release: Interim release P3REL0707.01Spouses - Frequencies of Part 3: super-controlsSpouses - Frequencies of Part 3: super-controls
The GLM ProcedureThe GLM Procedure
Number of Observations Read 84742Number of Observations Read 84742Number of Observations Used 49624Number of Observations Used 49624
AHS43300.sas 09:30 Thursday, February AHS43300.sas 09:30 Thursday, February 28, 2008 112428, 2008 1124The GLM ProcedureThe GLM Procedure
Dependent Variable: bmi Body Mass IndexDependent Variable: bmi Body Mass Index
Sum ofSum ofSource DF Squares Mean Square F Value Pr > FSource DF Squares Mean Square F Value Pr > F
Model 1 14626.311 14626.311 695.33 <.0001Model 1 14626.311 14626.311 695.33 <.0001
Error 49622 1043803.927 21.035Error 49622 1043803.927 21.035
Corrected Total 49623 1058430.238Corrected Total 49623 1058430.238
R-Square Coeff Var Root MSE bmi MeanR-Square Coeff Var Root MSE bmi Mean
0.013819 17.55976 4.586404 26.118830.013819 17.55976 4.586404 26.11883
Source DF Type I SS Mean Square F Value Pr > FSource DF Type I SS Mean Square F Value Pr > F
years_on_farm 1 14626.31136 14626.31136 695.33 <.0001years_on_farm 1 14626.31136 14626.31136 695.33 <.0001
Source DF Type III SS Mean Square F Value Pr > FSource DF Type III SS Mean Square F Value Pr > F
years_on_farm 1 14626.31136 14626.31136 695.33 <.0001years_on_farm 1 14626.31136 14626.31136 695.33 <.0001
StandardStandardParameter Estimate Error t Value Pr > |t|Parameter Estimate Error t Value Pr > |t|
Intercept 25.02571119 0.04628587 540.68 <.0001Intercept 25.02571119 0.04628587 540.68 <.0001years_on_farm 0.02987844 0.00113309 26.37 <.0001years_on_farm 0.02987844 0.00113309 26.37 <.0001
AdjustedPROCGLM
![Page 16: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/16.jpg)
ODSODSAdditional Descriptive InformationPROCMEANS
AHS43300.sas 09:30 Thursday, February 28, 2008 1120
The MEANS Procedure
Analysis Variable : years_on_farm Years lived or worked on farm
Mean N Std Error Std Dev----------------------------------------------------- 36.2130062 53482 0.0789519 18.2585612-----------------------------------------------------
CrudePROCGLM
AHS43300.sas AHS43300.sas 09:30 Thursday, February 28, 2008 112109:30 Thursday, February 28, 2008 1121Phase 1 Release: P1REL0506Phase 1 Release: P1REL0506Phase 2 Release: P2REL0612.03Phase 2 Release: P2REL0612.03Phase 3 Release: Interim release P3REL0707.01Phase 3 Release: Interim release P3REL0707.01Spouses - Frequencies of Part 3: super-controlsSpouses - Frequencies of Part 3: super-controls
The GLM ProcedureThe GLM Procedure
Number of Observations Read 84742Number of Observations Read 84742Number of Observations Used 49624Number of Observations Used 49624
AHS43300.sas 09:30 Thursday, February AHS43300.sas 09:30 Thursday, February 28, 2008 112428, 2008 1124The GLM ProcedureThe GLM Procedure
Dependent Variable: bmi Body Mass IndexDependent Variable: bmi Body Mass Index
Sum ofSum ofSource DF Squares Mean Square F Value Pr > FSource DF Squares Mean Square F Value Pr > F
Model 1 14626.311 14626.311 695.33 <.0001Model 1 14626.311 14626.311 695.33 <.0001
Error 49622 1043803.927 21.035Error 49622 1043803.927 21.035
Corrected Total 49623 1058430.238Corrected Total 49623 1058430.238
R-Square Coeff Var Root MSE bmi MeanR-Square Coeff Var Root MSE bmi Mean
0.013819 17.55976 4.586404 26.118830.013819 17.55976 4.586404 26.11883
Source DF Type I SS Mean Square F Value Pr > FSource DF Type I SS Mean Square F Value Pr > F
years_on_farm 1 14626.31136 14626.31136 695.33 <.0001years_on_farm 1 14626.31136 14626.31136 695.33 <.0001
Source DF Type III SS Mean Square F Value Pr > FSource DF Type III SS Mean Square F Value Pr > F
years_on_farm 1 14626.31136 14626.31136 695.33 <.0001years_on_farm 1 14626.31136 14626.31136 695.33 <.0001
StandardStandardParameter Estimate Error t Value Pr > |t|Parameter Estimate Error t Value Pr > |t|
Intercept 25.02571119 0.04628587 540.68 <.0001Intercept 25.02571119 0.04628587 540.68 <.0001years_on_farm 0.02987844 0.00113309 26.37 <.0001years_on_farm 0.02987844 0.00113309 26.37 <.0001
AdjustedPROCGLM
AHS43300.sas 09:30 Thursday, February 28, 2008 AHS43300.sas 09:30 Thursday, February 28, 2008 11251125
The GLM ProcedureThe GLM Procedure
Class Level InformationClass Level Information
Class Levels ValuesClass Levels Values
race 5 1) White 2) Black 3) Native American 4) race 5 1) White 2) Black 3) Native American 4) Asian/PacificAsian/Pacific Islander 5) OtherIslander 5) Other
gender 2 1) Male 2) Femalegender 2 1) Male 2) Female
Number of Observations Read 84742Number of Observations Read 84742Number of Observations Used 31807Number of Observations Used 31807
AHS43300.sas 09:30 Thursday, February 28, 2008 1126AHS43300.sas 09:30 Thursday, February 28, 2008 1126
The GLM ProcedureThe GLM Procedure
Dependent Variable: bmi Body Mass IndexDependent Variable: bmi Body Mass Index
Sum ofSum ofSource DF Squares Mean Square F Value Pr > FSource DF Squares Mean Square F Value Pr > F
Model 8 25809.3778 3226.1722 140.96 <.0001Model 8 25809.3778 3226.1722 140.96 <.0001
Error 31798 727766.1040 22.8872Error 31798 727766.1040 22.8872
Corrected Total 31806 753575.4818Corrected Total 31806 753575.4818
R-Square Coeff Var Root MSE bmi MeanR-Square Coeff Var Root MSE bmi Mean
0.034249 18.68216 4.784053 25.607600.034249 18.68216 4.784053 25.60760
Source DF Type I SS Mean Square F Value Pr > FSource DF Type I SS Mean Square F Value Pr > F
race 4 5150.08 1287.520119 56.26 <.0001race 4 5150.08 1287.520119 56.26 <.0001gender 1 3862.26 3862.260203 168.75 <.0001gender 1 3862.26 3862.260203 168.75 <.0001height 1 7980.70 7980.705357 348.70 <.0001height 1 7980.70 7980.705357 348.70 <.0001age 1 7564.74 7564.740140 330.52 <.0001age 1 7564.74 7564.740140 330.52 <.0001years_on_farm 1 1251.59 1251.591649 54.69 <.0001years_on_farm 1 1251.59 1251.591649 54.69 <.0001
Source DF Type III SS Mean Square F Value Pr > FSource DF Type III SS Mean Square F Value Pr > F
race 4 4126.20 1031.551901 45.07 <.0001race 4 4126.20 1031.551901 45.07 <.0001gender 1 9300.84 9300.847470 406.38 <.0001gender 1 9300.84 9300.847470 406.38 <.0001height 1 5814.95 5814.952222 254.07 <.0001height 1 5814.95 5814.952222 254.07 <.0001age 1 1974.05 1974.050855 86.25 <.0001age 1 1974.05 1974.050855 86.25 <.0001years_on_farm 1 1251.59 1251.591649 54.69 <.0001years_on_farm 1 1251.59 1251.591649 54.69 <.0001
![Page 17: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/17.jpg)
ODSODSAdditional Descriptive InformationPROCMEANS
CrudePROCGLM
AHS43300.sas AHS43300.sas 09:30 Thursday, February 28, 2008 112109:30 Thursday, February 28, 2008 1121Phase 1 Release: P1REL0506Phase 1 Release: P1REL0506Phase 2 Release: P2REL0612.03Phase 2 Release: P2REL0612.03Phase 3 Release: Interim release P3REL0707.01Phase 3 Release: Interim release P3REL0707.01Spouses - Frequencies of Part 3: super-controlsSpouses - Frequencies of Part 3: super-controls
The GLM ProcedureThe GLM Procedure
Number of Observations Read 84742Number of Observations Read 84742Number of Observations Used 49624Number of Observations Used 49624
AHS43300.sas 09:30 Thursday, February AHS43300.sas 09:30 Thursday, February 28, 2008 112428, 2008 1124The GLM ProcedureThe GLM Procedure
Dependent Variable: bmi Body Mass IndexDependent Variable: bmi Body Mass Index
Sum ofSum ofSource DF Squares Mean Square F Value Pr > FSource DF Squares Mean Square F Value Pr > F
Model 1 14626.311 14626.311 695.33 <.0001Model 1 14626.311 14626.311 695.33 <.0001
Error 49622 1043803.927 21.035Error 49622 1043803.927 21.035
Corrected Total 49623 1058430.238Corrected Total 49623 1058430.238
R-Square Coeff Var Root MSE bmi MeanR-Square Coeff Var Root MSE bmi Mean
0.013819 17.55976 4.586404 26.118830.013819 17.55976 4.586404 26.11883
Source DF Type I SS Mean Square F Value Pr > FSource DF Type I SS Mean Square F Value Pr > F
years_on_farm 1 14626.31136 14626.31136 695.33 <.0001years_on_farm 1 14626.31136 14626.31136 695.33 <.0001
Source DF Type III SS Mean Square F Value Pr > FSource DF Type III SS Mean Square F Value Pr > F
years_on_farm 1 14626.31136 14626.31136 695.33 <.0001years_on_farm 1 14626.31136 14626.31136 695.33 <.0001
StandardStandardParameter Estimate Error t Value Pr > |t|Parameter Estimate Error t Value Pr > |t|
Intercept 25.02571119 0.04628587 540.68 <.0001Intercept 25.02571119 0.04628587 540.68 <.0001years_on_farm 0.02987844 0.00113309 26.37 <.0001years_on_farm 0.02987844 0.00113309 26.37 <.0001
AdjustedPROCGLM
AHS43300.sas 09:30 Thursday, February 28, 2008 AHS43300.sas 09:30 Thursday, February 28, 2008 11251125
The GLM ProcedureThe GLM Procedure
Class Level InformationClass Level Information
Class Levels ValuesClass Levels Values
race 5 1) White 2) Black 3) Native American 4) race 5 1) White 2) Black 3) Native American 4) Asian/PacificAsian/Pacific Islander 5) OtherIslander 5) Other
gender 2 1) Male 2) Femalegender 2 1) Male 2) Female
Number of Observations Read 84742Number of Observations Read 84742Number of Observations Used 31807Number of Observations Used 31807
AHS43300.sas 09:30 Thursday, February 28, 2008 1126AHS43300.sas 09:30 Thursday, February 28, 2008 1126
The GLM ProcedureThe GLM Procedure
Dependent Variable: bmi Body Mass IndexDependent Variable: bmi Body Mass Index
Sum ofSum ofSource DF Squares Mean Square F Value Pr > FSource DF Squares Mean Square F Value Pr > F
Model 8 25809.3778 3226.1722 140.96 <.0001Model 8 25809.3778 3226.1722 140.96 <.0001
Error 31798 727766.1040 22.8872Error 31798 727766.1040 22.8872
Corrected Total 31806 753575.4818Corrected Total 31806 753575.4818
R-Square Coeff Var Root MSE bmi MeanR-Square Coeff Var Root MSE bmi Mean
0.034249 18.68216 4.784053 25.607600.034249 18.68216 4.784053 25.60760
Source DF Type I SS Mean Square F Value Pr > FSource DF Type I SS Mean Square F Value Pr > F
race 4 5150.08 1287.520119 56.26 <.0001race 4 5150.08 1287.520119 56.26 <.0001gender 1 3862.26 3862.260203 168.75 <.0001gender 1 3862.26 3862.260203 168.75 <.0001height 1 7980.70 7980.705357 348.70 <.0001height 1 7980.70 7980.705357 348.70 <.0001age 1 7564.74 7564.740140 330.52 <.0001age 1 7564.74 7564.740140 330.52 <.0001years_on_farm 1 1251.59 1251.591649 54.69 <.0001years_on_farm 1 1251.59 1251.591649 54.69 <.0001
Source DF Type III SS Mean Square F Value Pr > FSource DF Type III SS Mean Square F Value Pr > F
race 4 4126.20 1031.551901 45.07 <.0001race 4 4126.20 1031.551901 45.07 <.0001gender 1 9300.84 9300.847470 406.38 <.0001gender 1 9300.84 9300.847470 406.38 <.0001height 1 5814.95 5814.952222 254.07 <.0001height 1 5814.95 5814.952222 254.07 <.0001age 1 1974.05 1974.050855 86.25 <.0001age 1 1974.05 1974.050855 86.25 <.0001years_on_farm 1 1251.59 1251.591649 54.69 <.0001years_on_farm 1 1251.59 1251.591649 54.69 <.0001
Data set
![Page 18: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/18.jpg)
ODSODSAdditional Descriptive InformationPROCMEANS
CrudePROCGLM
AdjustedPROCGLM
AHS43300.sas 09:30 Thursday, February 28, 2008 AHS43300.sas 09:30 Thursday, February 28, 2008 11251125
The GLM ProcedureThe GLM Procedure
Class Level InformationClass Level Information
Class Levels ValuesClass Levels Values
race 5 1) White 2) Black 3) Native American 4) race 5 1) White 2) Black 3) Native American 4) Asian/PacificAsian/Pacific Islander 5) OtherIslander 5) Other
gender 2 1) Male 2) Femalegender 2 1) Male 2) Female
Number of Observations Read 84742Number of Observations Read 84742Number of Observations Used 31807Number of Observations Used 31807
AHS43300.sas 09:30 Thursday, February 28, 2008 1126AHS43300.sas 09:30 Thursday, February 28, 2008 1126
The GLM ProcedureThe GLM Procedure
Dependent Variable: bmi Body Mass IndexDependent Variable: bmi Body Mass Index
Sum ofSum ofSource DF Squares Mean Square F Value Pr > FSource DF Squares Mean Square F Value Pr > F
Model 8 25809.3778 3226.1722 140.96 <.0001Model 8 25809.3778 3226.1722 140.96 <.0001
Error 31798 727766.1040 22.8872Error 31798 727766.1040 22.8872
Corrected Total 31806 753575.4818Corrected Total 31806 753575.4818
R-Square Coeff Var Root MSE bmi MeanR-Square Coeff Var Root MSE bmi Mean
0.034249 18.68216 4.784053 25.607600.034249 18.68216 4.784053 25.60760
Source DF Type I SS Mean Square F Value Pr > FSource DF Type I SS Mean Square F Value Pr > F
race 4 5150.08 1287.520119 56.26 <.0001race 4 5150.08 1287.520119 56.26 <.0001gender 1 3862.26 3862.260203 168.75 <.0001gender 1 3862.26 3862.260203 168.75 <.0001height 1 7980.70 7980.705357 348.70 <.0001height 1 7980.70 7980.705357 348.70 <.0001age 1 7564.74 7564.740140 330.52 <.0001age 1 7564.74 7564.740140 330.52 <.0001years_on_farm 1 1251.59 1251.591649 54.69 <.0001years_on_farm 1 1251.59 1251.591649 54.69 <.0001
Source DF Type III SS Mean Square F Value Pr > FSource DF Type III SS Mean Square F Value Pr > F
race 4 4126.20 1031.551901 45.07 <.0001race 4 4126.20 1031.551901 45.07 <.0001gender 1 9300.84 9300.847470 406.38 <.0001gender 1 9300.84 9300.847470 406.38 <.0001height 1 5814.95 5814.952222 254.07 <.0001height 1 5814.95 5814.952222 254.07 <.0001age 1 1974.05 1974.050855 86.25 <.0001age 1 1974.05 1974.050855 86.25 <.0001years_on_farm 1 1251.59 1251.591649 54.69 <.0001years_on_farm 1 1251.59 1251.591649 54.69 <.0001
Data set Data set
![Page 19: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/19.jpg)
ODSODSAdditional Descriptive InformationPROCMEANS
CrudePROCGLM
AdjustedPROCGLM
Data set Data set Data set
![Page 20: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/20.jpg)
ODSODSAdditional Descriptive InformationPROCMEANS
CrudePROCGLM
AdjustedPROCGLM
CompositeData set
![Page 21: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/21.jpg)
SAS Macro FacilitySAS Macro FacilityAdditional Descriptive InformationPROCMEANS
CrudePROCGLM
AdjustedPROCGLM
CompositeData set
![Page 22: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/22.jpg)
SAS Macro FacilitySAS Macro FacilityAdditional Descriptive InformationPROCMEANS
CrudePROCGLM
AdjustedPROCGLM
Data set Data set Data set
CompositeData set
![Page 23: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/23.jpg)
SAS Macro FacilitySAS Macro FacilityAdditional Descriptive InformationPROCMEANS
CrudePROCGLM
AdjustedPROCGLM
CompositeData set
![Page 24: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/24.jpg)
SAS Macro FacilitySAS Macro FacilityAdditional Descriptive InformationPROCMEANS
CrudePROCGLM
AdjustedPROCGLM
Data set Data set Data set
CompositeData set
![Page 25: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/25.jpg)
SAS Macro FacilitySAS Macro FacilityAdditional Descriptive InformationPROCMEANS
CrudePROCGLM
AdjustedPROCGLM
CompositeData set
![Page 26: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/26.jpg)
SAS Macro FacilitySAS Macro FacilityAdditional Descriptive InformationPROCMEANS
CrudePROCGLM
AdjustedPROCGLM
Data set Data set Data set
CompositeData set
![Page 27: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/27.jpg)
SAS Macro FacilitySAS Macro FacilityAdditional Descriptive InformationPROCMEANS
CrudePROCGLM
AdjustedPROCGLM
CompositeData set
![Page 28: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/28.jpg)
SAS Macro FacilitySAS Macro FacilityAdditional Descriptive InformationPROCMEANS
CrudePROCGLM
AdjustedPROCGLM
Data set Data set Data set
CompositeData set
![Page 29: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/29.jpg)
SAS Macro FacilitySAS Macro FacilityAdditional Descriptive InformationPROCMEANS
CrudePROCGLM
AdjustedPROCGLM
CompositeData set
![Page 30: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/30.jpg)
SAS Macro FacilitySAS Macro FacilityAdditional Descriptive InformationPROCMEANS
CrudePROCGLM
AdjustedPROCGLM
Data set Data set Data set
CompositeData set
![Page 31: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/31.jpg)
SAS Macro FacilitySAS Macro FacilityAdditional Descriptive InformationPROCMEANS
CrudePROCGLM
AdjustedPROCGLM
CompositeData set
![Page 32: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/32.jpg)
The programmer must identify the mainThe programmer must identify the main
tasks required to complete this analysistasks required to complete this analysis
![Page 33: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/33.jpg)
1.1. Initialize the Base Data Set Initialize the Base Data Set
The programmer must identify the mainThe programmer must identify the main
tasks required to complete this analysistasks required to complete this analysis
![Page 34: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/34.jpg)
The programmer must identify the mainThe programmer must identify the main
tasks required to complete this analysistasks required to complete this analysis
1.1. Initialize the Base Data Set Initialize the Base Data Set
2.2. Produce a Summary Data Set of Mean StatisticsProduce a Summary Data Set of Mean Statistics
![Page 35: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/35.jpg)
The programmer must identify the mainThe programmer must identify the main
tasks required to complete this analysistasks required to complete this analysis
1.1. Initialize the Base Data Set Initialize the Base Data Set
2.2. Produce a Summary Data Set of Mean StatisticsProduce a Summary Data Set of Mean Statistics
3.3. Produce a Summary Data Set of Crude Model EstimatesProduce a Summary Data Set of Crude Model Estimates
![Page 36: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/36.jpg)
The programmer must identify the mainThe programmer must identify the main
tasks required to complete this analysistasks required to complete this analysis
1.1. Initialize the Base Data Set Initialize the Base Data Set
2.2. Produce a Summary Data Set of Mean StatisticsProduce a Summary Data Set of Mean Statistics
3.3. Produce a Summary Data Set of Crude Model EstimatesProduce a Summary Data Set of Crude Model Estimates
4.4. Produce a Summary Data Set of Adjusted Model EstimatesProduce a Summary Data Set of Adjusted Model Estimates
![Page 37: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/37.jpg)
The programmer must identify the mainThe programmer must identify the main
tasks required to complete this analysistasks required to complete this analysis
1.1. Initialize the Base Data Set Initialize the Base Data Set
2.2. Produce a Summary Data Set of Mean StatisticsProduce a Summary Data Set of Mean Statistics
3.3. Produce a Summary Data Set of Crude Model EstimatesProduce a Summary Data Set of Crude Model Estimates
4.4. Produce a Summary Data Set of Adjusted Model EstimatesProduce a Summary Data Set of Adjusted Model Estimates
5.5. Append the Summary Data Sets to the Base Data SetAppend the Summary Data Sets to the Base Data Set
![Page 38: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/38.jpg)
The programmer must identify the mainThe programmer must identify the main
tasks required to complete this analysistasks required to complete this analysis
1.1. Initialize the Base Data Set Initialize the Base Data Set
2.2. Produce a Summary Data Set of Mean StatisticsProduce a Summary Data Set of Mean Statistics
3.3. Produce a Summary Data Set of Crude Model EstimatesProduce a Summary Data Set of Crude Model Estimates
4.4. Produce a Summary Data Set of Adjusted Model EstimatesProduce a Summary Data Set of Adjusted Model Estimates
5.5. Append the Summary Data Sets to the Base Data SetAppend the Summary Data Sets to the Base Data Set
6.6. Create a Supervisory Macro to Delegate these Tasks through Create a Supervisory Macro to Delegate these Tasks through Invocations of other Macro ModulesInvocations of other Macro Modules
![Page 39: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/39.jpg)
Secondary Tasks are Required to Secondary Tasks are Required to
Support these Main TasksSupport these Main Tasks
1.1. Initialize the Base Data Set Initialize the Base Data Set
2.2. Produce a Summary Data Set of Mean StatisticsProduce a Summary Data Set of Mean Statistics
3.3. Produce a Summary Data Set of Crude Model EstimatesProduce a Summary Data Set of Crude Model Estimates
4.4. Produce a Summary Data Set of Adjusted Model EstimatesProduce a Summary Data Set of Adjusted Model Estimates
5.5. Append the Summary Data Sets to the Base Data SetAppend the Summary Data Sets to the Base Data Set
6.6. Create a Supervisory Macro to Delegate these Tasks through Create a Supervisory Macro to Delegate these Tasks through Invocations of other Macro ModulesInvocations of other Macro Modules
![Page 40: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/40.jpg)
1.1. Initialize the Base Data Set Initialize the Base Data Set
2.2. Produce a Summary Data Set of Mean StatisticsProduce a Summary Data Set of Mean Statistics
3.3. Produce a Summary Data Set of Crude Model EstimatesProduce a Summary Data Set of Crude Model Estimates
4.4. Produce a Summary Data Set of Adjusted Model EstimatesProduce a Summary Data Set of Adjusted Model Estimates
5.5. Append the Summary Data Sets to the Base Data SetAppend the Summary Data Sets to the Base Data Set
6.6. Create a Supervisory Macro to Delegate these Tasks through Create a Supervisory Macro to Delegate these Tasks through Invocations of other Macro ModulesInvocations of other Macro Modules
7.7. Validate the User Supplied InformationValidate the User Supplied Information
Secondary Tasks are Required to Secondary Tasks are Required to
Support these Main TasksSupport these Main Tasks
![Page 41: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/41.jpg)
1.1. Initialize the Base Data Set Initialize the Base Data Set
2.2. Produce a Summary Data Set of Mean StatisticsProduce a Summary Data Set of Mean Statistics
3.3. Produce a Summary Data Set of Crude Model EstimatesProduce a Summary Data Set of Crude Model Estimates
4.4. Produce a Summary Data Set of Adjusted Model EstimatesProduce a Summary Data Set of Adjusted Model Estimates
5.5. Append the Summary Data Sets to the Base Data SetAppend the Summary Data Sets to the Base Data Set
6.6. Create a Supervisory Macro to Delegate these Tasks through Create a Supervisory Macro to Delegate these Tasks through Invocations of other Macro ModulesInvocations of other Macro Modules
7.7. Validate the User Supplied InformationValidate the User Supplied Information
8.8. Specify the Covariates for the Adjusted ModelSpecify the Covariates for the Adjusted Model
Secondary Tasks are Required to Secondary Tasks are Required to
Support these Main TasksSupport these Main Tasks
![Page 42: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/42.jpg)
1.1. Initialize the Base Data Set Initialize the Base Data Set
2.2. Produce a Summary Data Set of Mean StatisticsProduce a Summary Data Set of Mean Statistics
3.3. Produce a Summary Data Set of Crude Model EstimatesProduce a Summary Data Set of Crude Model Estimates
4.4. Produce a Summary Data Set of Adjusted Model EstimatesProduce a Summary Data Set of Adjusted Model Estimates
5.5. Append the Summary Data Sets to the Base Data SetAppend the Summary Data Sets to the Base Data Set
6.6. Create a Supervisory Macro to Delegate these Tasks through Create a Supervisory Macro to Delegate these Tasks through Invocations of other Macro ModulesInvocations of other Macro Modules
7.7. Validate the User Supplied InformationValidate the User Supplied Information
8.8. Specify the Covariates for the Adjusted ModelSpecify the Covariates for the Adjusted Model
9.9. Create an Analysis Data SetCreate an Analysis Data Set
Secondary Tasks are Required to Secondary Tasks are Required to
Support these Main TasksSupport these Main Tasks
![Page 43: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/43.jpg)
1.1. Initialize the Base Data Set Initialize the Base Data Set
2.2. Produce a Summary Data Set of Mean StatisticsProduce a Summary Data Set of Mean Statistics
3.3. Produce a Summary Data Set of Crude Model EstimatesProduce a Summary Data Set of Crude Model Estimates
4.4. Produce a Summary Data Set of Adjusted Model EstimatesProduce a Summary Data Set of Adjusted Model Estimates
5.5. Append the Summary Data Sets to the Base Data SetAppend the Summary Data Sets to the Base Data Set
6.6. Create a Supervisory Macro to Delegate these Tasks through Create a Supervisory Macro to Delegate these Tasks through Invocations of other Macro ModulesInvocations of other Macro Modules
7.7. Validate the User Supplied InformationValidate the User Supplied Information
8.8. Specify the Covariates for the Adjusted ModelSpecify the Covariates for the Adjusted Model
9.9. Create an Analysis Data SetCreate an Analysis Data Set
10.10. Generate the Summary ReportGenerate the Summary Report
Secondary Tasks are Required to Secondary Tasks are Required to
Support these Main TasksSupport these Main Tasks
![Page 44: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/44.jpg)
Initialize the Base Data SetInitialize the Base Data Set
![Page 45: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/45.jpg)
Initialize the Base Data SetInitialize the Base Data Set
• Create a data set that contains all the desired variables.Create a data set that contains all the desired variables.
![Page 46: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/46.jpg)
Initialize the Base Data SetInitialize the Base Data Set
• Create a data set that contains all the desired variables.Create a data set that contains all the desired variables.
• Pre-assign attributes for these variables.Pre-assign attributes for these variables.
![Page 47: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/47.jpg)
Initialize the Base Data SetInitialize the Base Data Set
• Create a data set that contains all the desired variables.Create a data set that contains all the desired variables.
• Pre-assign attributes for these variables.Pre-assign attributes for these variables.
• Remove the initial observation from this data set: Remove the initial observation from this data set: xxxxResulting in a data set containing zero observations.Resulting in a data set containing zero observations.
![Page 48: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/48.jpg)
Initialize the Base Data SetInitialize the Base Data Set
%%MACROMACRO initbase;%%MACROMACRO initbase;
![Page 49: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/49.jpg)
%MACROMACRO initbase(base = ); DATA &base;
%MACROMACRO initbase(base = ); DATA &base;
Initialize the Base Data SetInitialize the Base Data Set
![Page 50: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/50.jpg)
%MACROMACRO initbase(base = ); OPTIONS NONOTESOPTIONS NONOTES; DATA &base;
%MACROMACRO initbase(base = ); OPTIONS NONOTESOPTIONS NONOTES; DATA &base;
AssignAssign AttributesAttributes toto UnitializedUnitialized VariablesVariables
![Page 51: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/51.jpg)
AssignAssign AttributesAttributes toto UnitializedUnitialized VariablesVariables
%MACROMACRO initbase(base = ); OPTIONS NONOTESOPTIONS NONOTES; DATADATA &base;
%MACROMACRO initbase(base = ); OPTIONS NONOTESOPTIONS NONOTES; DATADATA &base;
![Page 52: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/52.jpg)
Assign Length AttributesAssign Length Attributes
%MACROMACRO initbase(base = ); OPTIONS NONOTESOPTIONS NONOTES; DATADATA &base; LENGTHLENGTH key_var response_var $32 key_label response_label $40 mean stddev stderror n crude_estimate adjusted_estimate crude_stderr adjusted_stderr 8.;
%MACROMACRO initbase(base = ); OPTIONS NONOTESOPTIONS NONOTES; DATADATA &base; LENGTHLENGTH key_var response_var $32 key_label response_label $40 mean stddev stderror n crude_estimate adjusted_estimate crude_stderr adjusted_stderr 8.;
![Page 53: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/53.jpg)
Assign Label AttributesAssign Label Attributes
%MACROMACRO initbase(base = ); OPTIONS NONOTESOPTIONS NONOTES; DATADATA &base; LENGTHLENGTH key_var response_var $32 key_label response_label $40 mean stddev stderror n crude_estimate adjusted_estimate crude_stderr adjusted_stderr 8.; LABELLABEL key_var =""Name of Independent Variable"" key_label =""Label of Independent Variable"" response_var =""Name of Response Variable"" response_label =""Label of Response Variable"" mean =""PROC MEANS: Mean of Independent Variable"" n =""PROC MEANS: N of Independent Variable" stddev ="PROC MEANS: Standard Deviation of Independent Variable" stderror ="PROC MEANS: Standard Error of Independent Variable"
%MACROMACRO initbase(base = ); OPTIONS NONOTESOPTIONS NONOTES; DATADATA &base; LENGTHLENGTH key_var response_var $32 key_label response_label $40 mean stddev stderror n crude_estimate adjusted_estimate crude_stderr adjusted_stderr 8.; LABELLABEL key_var =""Name of Independent Variable"" key_label =""Label of Independent Variable"" response_var =""Name of Response Variable"" response_label =""Label of Response Variable"" mean =""PROC MEANS: Mean of Independent Variable"" n =""PROC MEANS: N of Independent Variable" stddev ="PROC MEANS: Standard Deviation of Independent Variable" stderror ="PROC MEANS: Standard Error of Independent Variable"
![Page 54: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/54.jpg)
OPTIONS NONOTESOPTIONS NONOTES; DATADATA &base; LENGTHLENGTH key_var response_var $32 key_label response_label $40 mean stddev stderror n crude_estimate adjusted_estimate crude_stderr adjusted_stderr 8.; LABELLABEL key_var =""Name of Independent Variable"" key_label =""Label of Independent Variable"" response_var =""Name of Response Variable"" response_label =""Label of Response Variable"" mean =""PROC MEANS: Mean of Independent Variable"" n =""PROC MEANS: N of Independent Variable"" stddev =""PROC MEANS: Standard Deviation of Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: ParamaterEstimate
OPTIONS NONOTESOPTIONS NONOTES; DATADATA &base; LENGTHLENGTH key_var response_var $32 key_label response_label $40 mean stddev stderror n crude_estimate adjusted_estimate crude_stderr adjusted_stderr 8.; LABELLABEL key_var =""Name of Independent Variable"" key_label =""Label of Independent Variable"" response_var =""Name of Response Variable"" response_label =""Label of Response Variable"" mean =""PROC MEANS: Mean of Independent Variable"" n =""PROC MEANS: N of Independent Variable"" stddev =""PROC MEANS: Standard Deviation of Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: ParamaterEstimate
![Page 55: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/55.jpg)
DATADATA &base; LENGTHLENGTH key_var response_var $32 key_label response_label $40 mean stddev stderror n crude_estimate adjusted_estimate crude_stderr adjusted_stderr 8.; LABELLABEL key_var =""Name of Independent Variable"" key_label =""Label of Independent Variable"" response_var =""Name of Response Variable"" response_label =""Label of Response Variable"" mean =""PROC MEANS: Mean of Independent Variable"" n =""PROC MEANS: N of Independent Variable"" stddev =""PROC MEANS: Standard Deviation of Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate"
DATADATA &base; LENGTHLENGTH key_var response_var $32 key_label response_label $40 mean stddev stderror n crude_estimate adjusted_estimate crude_stderr adjusted_stderr 8.; LABELLABEL key_var =""Name of Independent Variable"" key_label =""Label of Independent Variable"" response_var =""Name of Response Variable"" response_label =""Label of Response Variable"" mean =""PROC MEANS: Mean of Independent Variable"" n =""PROC MEANS: N of Independent Variable"" stddev =""PROC MEANS: Standard Deviation of Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate"
![Page 56: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/56.jpg)
LENGTHLENGTH key_var response_var $32 key_label response_label $40 mean stddev stderror n crude_estimate adjusted_estimate crude_stderr adjusted_stderr 8.; LABELLABEL key_var =""Name of Independent Variable"" key_label =""Label of Independent Variable"" response_var =""Name of Response Variable"" response_label =""Label of Response Variable"" mean =""PROC MEANS: Mean of Independent Variable"" n =""PROC MEANS: N of Independent Variable"" stddev =""PROC MEANS: Standard Deviation of Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of
LENGTHLENGTH key_var response_var $32 key_label response_label $40 mean stddev stderror n crude_estimate adjusted_estimate crude_stderr adjusted_stderr 8.; LABELLABEL key_var =""Name of Independent Variable"" key_label =""Label of Independent Variable"" response_var =""Name of Response Variable"" response_label =""Label of Response Variable"" mean =""PROC MEANS: Mean of Independent Variable"" n =""PROC MEANS: N of Independent Variable"" stddev =""PROC MEANS: Standard Deviation of Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of
![Page 57: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/57.jpg)
key_label response_label $40 mean stddev stderror n crude_estimate adjusted_estimate crude_stderr adjusted_stderr 8.; LABELLABEL key_var =""Name of Independent Variable"" key_label =""Label of Independent Variable"" response_var =""Name of Response Variable"" response_label =""Label of Response Variable"" mean =""PROC MEANS: Mean of Independent Variable"" n =""PROC MEANS: N of Independent Variable"" stddev =""PROC MEANS: Standard Deviation of Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate"
key_label response_label $40 mean stddev stderror n crude_estimate adjusted_estimate crude_stderr adjusted_stderr 8.; LABELLABEL key_var =""Name of Independent Variable"" key_label =""Label of Independent Variable"" response_var =""Name of Response Variable"" response_label =""Label of Response Variable"" mean =""PROC MEANS: Mean of Independent Variable"" n =""PROC MEANS: N of Independent Variable"" stddev =""PROC MEANS: Standard Deviation of Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate"
![Page 58: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/58.jpg)
mean stddev stderror n crude_estimate adjusted_estimate crude_stderr adjusted_stderr 8.; LABELLABEL key_var =""Name of Independent Variable"" key_label =""Label of Independent Variable"" response_var =""Name of Response Variable"" response_label =""Label of Response Variable"" mean =""PROC MEANS: Mean of Independent Variable"" n =""PROC MEANS: N of Independent Variable"" stddev =""PROC MEANS: Standard Deviation of Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter
mean stddev stderror n crude_estimate adjusted_estimate crude_stderr adjusted_stderr 8.; LABELLABEL key_var =""Name of Independent Variable"" key_label =""Label of Independent Variable"" response_var =""Name of Response Variable"" response_label =""Label of Response Variable"" mean =""PROC MEANS: Mean of Independent Variable"" n =""PROC MEANS: N of Independent Variable"" stddev =""PROC MEANS: Standard Deviation of Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter
![Page 59: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/59.jpg)
crude_estimate adjusted_estimate crude_stderr adjusted_stderr 8.; LABELLABEL key_var =""Name of Independent Variable"" key_label =""Label of Independent Variable"" response_var =""Name of Response Variable"" response_label =""Label of Response Variable"" mean =""PROC MEANS: Mean of Independent Variable"" n =""PROC MEANS: N of Independent Variable"" stddev =""PROC MEANS: Standard Deviation of Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate"
crude_estimate adjusted_estimate crude_stderr adjusted_stderr 8.; LABELLABEL key_var =""Name of Independent Variable"" key_label =""Label of Independent Variable"" response_var =""Name of Response Variable"" response_label =""Label of Response Variable"" mean =""PROC MEANS: Mean of Independent Variable"" n =""PROC MEANS: N of Independent Variable"" stddev =""PROC MEANS: Standard Deviation of Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate"
![Page 60: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/60.jpg)
crude_stderr adjusted_stderr 8.; LABELLABEL key_var =""Name of Independent Variable"" key_label =""Label of Independent Variable"" response_var =""Name of Response Variable"" response_label =""Label of Response Variable"" mean =""PROC MEANS: Mean of Independent Variable"" n =""PROC MEANS: N of Independent Variable"" stddev =""PROC MEANS: Standard Deviation of Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error
crude_stderr adjusted_stderr 8.; LABELLABEL key_var =""Name of Independent Variable"" key_label =""Label of Independent Variable"" response_var =""Name of Response Variable"" response_label =""Label of Response Variable"" mean =""PROC MEANS: Mean of Independent Variable"" n =""PROC MEANS: N of Independent Variable"" stddev =""PROC MEANS: Standard Deviation of Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error
![Page 61: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/61.jpg)
LABELLABEL key_var =""Name of Independent Variable"" key_label =""Label of Independent Variable"" response_var =""Name of Response Variable"" response_label =""Label of Response Variable"" mean =""PROC MEANS: Mean of Independent Variable"" n =""PROC MEANS: N of Independent Variable"" stddev =""PROC MEANS: Standard Deviation of Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate"
LABELLABEL key_var =""Name of Independent Variable"" key_label =""Label of Independent Variable"" response_var =""Name of Response Variable"" response_label =""Label of Response Variable"" mean =""PROC MEANS: Mean of Independent Variable"" n =""PROC MEANS: N of Independent Variable"" stddev =""PROC MEANS: Standard Deviation of Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate"
![Page 62: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/62.jpg)
key_label =""Label of Independent Variable"" response_var =""Name of Response Variable"" response_label =""Label of Response Variable"" mean =""PROC MEANS: Mean of Independent Variable"" n =""PROC MEANS: N of Independent Variable"" stddev =""PROC MEANS: Standard Deviation of Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates"
key_label =""Label of Independent Variable"" response_var =""Name of Response Variable"" response_label =""Label of Response Variable"" mean =""PROC MEANS: Mean of Independent Variable"" n =""PROC MEANS: N of Independent Variable"" stddev =""PROC MEANS: Standard Deviation of Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates"
![Page 63: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/63.jpg)
response_var =""Name of Response Variable"" response_label =""Label of Response Variable"" mean =""PROC MEANS: Mean of Independent Variable"" n =""PROC MEANS: N of Independent Variable"" stddev =""PROC MEANS: Standard Deviation of Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates";
response_var =""Name of Response Variable"" response_label =""Label of Response Variable"" mean =""PROC MEANS: Mean of Independent Variable"" n =""PROC MEANS: N of Independent Variable"" stddev =""PROC MEANS: Standard Deviation of Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates";
![Page 64: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/64.jpg)
response_label =""Label of Response Variable"" mean =""PROC MEANS: Mean of Independent Variable"" n =""PROC MEANS: N of Independent Variable"" stddev =""PROC MEANS: Standard Deviation of Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates"; FORMAT crude_estimate adjusted_estimate PVALUE6.4
response_label =""Label of Response Variable"" mean =""PROC MEANS: Mean of Independent Variable"" n =""PROC MEANS: N of Independent Variable"" stddev =""PROC MEANS: Standard Deviation of Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates"; FORMAT crude_estimate adjusted_estimate PVALUE6.4
![Page 65: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/65.jpg)
mean =""PROC MEANS: Mean of Independent Variable"" n =""PROC MEANS: N of Independent Variable"" stddev =""PROC MEANS: Standard Deviation of Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates"; FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3;
mean =""PROC MEANS: Mean of Independent Variable"" n =""PROC MEANS: N of Independent Variable"" stddev =""PROC MEANS: Standard Deviation of Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates"; FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3;
![Page 66: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/66.jpg)
Variable"" n =""PROC MEANS: N of Independent Variable"" stddev =""PROC MEANS: Standard Deviation of Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates"; FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3; RUN;
Variable"" n =""PROC MEANS: N of Independent Variable"" stddev =""PROC MEANS: Standard Deviation of Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates"; FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3; RUN;
![Page 67: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/67.jpg)
n =""PROC MEANS: N of Independent Variable"" stddev =""PROC MEANS: Standard Deviation of Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates"; FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3; RUN;
n =""PROC MEANS: N of Independent Variable"" stddev =""PROC MEANS: Standard Deviation of Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates"; FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3; RUN;
![Page 68: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/68.jpg)
Variable"" stddev =""PROC MEANS: Standard Deviation of Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates"; FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3; RUN;
OPTION NOTES;
Variable"" stddev =""PROC MEANS: Standard Deviation of Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates"; FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3; RUN;
OPTION NOTES;
![Page 69: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/69.jpg)
stddev =""PROC MEANS: Standard Deviation of Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates"; FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3; RUN;
OPTION NOTES;
stddev =""PROC MEANS: Standard Deviation of Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates"; FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3; RUN;
OPTION NOTES;
![Page 70: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/70.jpg)
Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates"; FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3; RUN;
OPTION NOTES;
DATA &base;
Independent Variable"" stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates"; FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3; RUN;
OPTION NOTES;
DATA &base;
![Page 71: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/71.jpg)
stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates"; FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3; RUN;
OPTION NOTES;
DATA &base; SET &base;
stderror ="PROC MEANS: Standard Error of Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates"; FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3; RUN;
OPTION NOTES;
DATA &base; SET &base;
![Page 72: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/72.jpg)
Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates"; FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3; RUN;
OPTION NOTES;
DATA &base; SET &base; STOP;
Independent Variable" crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates"; FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3; RUN;
OPTION NOTES;
DATA &base; SET &base; STOP;
![Page 73: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/73.jpg)
crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates"; FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3; RUN;
OPTION NOTES;
DATA &base; SET &base; STOP; RUN;
crude_estimate ="Crude PROC GLM: Paramater Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates"; FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3; RUN;
OPTION NOTES;
DATA &base; SET &base; STOP; RUN;
![Page 74: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/74.jpg)
Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates"; FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3; RUN;
OPTION NOTES;
DATA &base; SET &base; STOP; RUN;
Estimate" crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates"; FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3; RUN;
OPTION NOTES;
DATA &base; SET &base; STOP; RUN;
![Page 75: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/75.jpg)
crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates"; FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3; RUN;
OPTION NOTES;
DATA &base; SET &base; STOP; RUN;
%MEND initbase;
crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates"; FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3; RUN;
OPTION NOTES;
DATA &base; SET &base; STOP; RUN;
%MEND initbase;
![Page 76: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/76.jpg)
Assign Format AttributesAssign Format Attributes
crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates"; FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3; RUN;
OPTION NOTES;
DATA &base; SET &base; STOP; RUN;
%MEND initbase;
crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates"; FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3; RUN;
OPTION NOTES;
DATA &base; SET &base; STOP; RUN;
%MEND initbase;
![Page 77: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/77.jpg)
Assign Format AttributesAssign Format Attributes
crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates"; FORMATFORMAT crude_estimate adjusted_estimate PVALUE6.4PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3ODDSR8.3; RUN;
OPTION NOTES;
DATA &base; SET &base; STOP; RUN;
%MEND initbase;
crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates"; FORMATFORMAT crude_estimate adjusted_estimate PVALUE6.4PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3ODDSR8.3; RUN;
OPTION NOTES;
DATA &base; SET &base; STOP; RUN;
%MEND initbase;
![Page 78: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/78.jpg)
Do Not Output the ObservationDo Not Output the Observation
crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates"; FORMATFORMAT crude_estimate adjusted_estimate PVALUE6.4PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3ODDSR8.3; DELETEDELETE; RUN;RUN;; OPTION NOTES;
DATA &base; SET &base; STOP; RUN;
%MEND initbase;
crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates"; FORMATFORMAT crude_estimate adjusted_estimate PVALUE6.4PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3ODDSR8.3; DELETEDELETE; RUN;RUN;; OPTION NOTES;
DATA &base; SET &base; STOP; RUN;
%MEND initbase;
![Page 79: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/79.jpg)
Resume NOTES to the SAS LogResume NOTES to the SAS Log
crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates"; FORMATFORMAT crude_estimate adjusted_estimate PVALUE6.4PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3ODDSR8.3; DELETEDELETE; RUNRUN;;
OPTION NOTESOPTION NOTES;
%MENDMEND initbase;
crude_stderr ="Crude PROC GLM: Standard Error of Estimate" adjusted_estimate="Adjusted PROC GLM: Parameter Estimate" adjusted_stderr ="Adjusted PROC GLM: Standard Error of Estimate" class_vars ="Class Covariates" continuous_vars ="Continuous Covariates"; FORMATFORMAT crude_estimate adjusted_estimate PVALUE6.4PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3ODDSR8.3; DELETEDELETE; RUNRUN;;
OPTION NOTESOPTION NOTES;
%MENDMEND initbase;
![Page 80: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/80.jpg)
Invoke the INITBASE( ) Macro ModuleInvoke the INITBASE( ) Macro Module
%IF %SYSFUNC(EXIST(&outfile) NE 1 %THEN %initbase(base=&outfile);
%IF %SYSFUNC(EXIST(&outfile) NE 1 %THEN %initbase(base=&outfile);
![Page 81: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/81.jpg)
Invoke the INITBASE( ) Macro ModuleInvoke the INITBASE( ) Macro Module
Only if the BASE data set does not existOnly if the BASE data set does not exist
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile) NENE 1 %THENTHEN %initbase(base=&outfile);
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile) NENE 1 %THENTHEN %initbase(base=&outfile);
![Page 82: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/82.jpg)
The CONTENTS Procedure (abbreviated)
Data Set Name WORK.GLM_SUMMARY Observations 00
# Variable Type Len Format Label
1 key_var Char 32 Name of Independent Variable 2 response_var Char 32 Name of Response Variable 3 key_label Char 40 Label of Independent Variable 4 response_label Char 40 Label of Response Variable 5 class_vars Char 200 Adjusted PROC GLM: Class covariates 6 continuous_vars Char 200 Adjusted PROC GLM: Continuous covariates 7 mean Num 8 PROC MEANS: Mean of Independent Variable 8 stddev Num 8 PROC MEANS: Standard Deviation of Independent Variable 9 stderror Num 8 PROC MEANS: Standard Error of Independent Variable10 n Num 8 PROC MEANS: N of Independent Variable11 crude_estimate Num 8 PVALUE6.4 Crude PROC GLM: Parameter Estimate12 adjusted_estimate Num 8 PVALUE6.4 Adjusted PROC GLM: Parameter Estimate13 crude_stderr Num 8 ODDSR8.3 Crude PROC GLM: Standard Error of Estimate14 adjusted_stderr Num 8 ODDSR8.3 Adjusted PROC GLM: Standard Error of Estimate
Produces the Following Data Set with Produces the Following Data Set with Zero ObservationsZero Observations
![Page 83: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/83.jpg)
Design a Macro Module to Produce aDesign a Macro Module to Produce a
Data Set Containing a Mean StatisticData Set Containing a Mean Statistic
![Page 84: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/84.jpg)
Design a Macro Module to Produce aDesign a Macro Module to Produce a
Data Set Containing a Mean StatisticData Set Containing a Mean Statistic
Add Labels for Reporting PurposesAdd Labels for Reporting Purposes
![Page 85: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/85.jpg)
1.1. One Major task per moduleOne Major task per module
Design a Macro Module to Produce aDesign a Macro Module to Produce a
Data Set Containing a Mean StatisticData Set Containing a Mean Statistic
![Page 86: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/86.jpg)
1.1. One Major task per moduleOne Major task per module
2.2. Keep the coding as simple as possibleKeep the coding as simple as possible
Design a Macro Module to Produce aDesign a Macro Module to Produce a
Data Set Containing a Mean StatisticData Set Containing a Mean Statistic
![Page 87: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/87.jpg)
1.1. One Major task per moduleOne Major task per module
2.2. Keep the coding as simple as possibleKeep the coding as simple as possible
3.3. Should the Module be Should the Module be
a. Customizeda. Customized
Design a Macro Module to Produce aDesign a Macro Module to Produce a
Data Set Containing a Mean StatisticData Set Containing a Mean Statistic
![Page 88: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/88.jpg)
1.1. One Major task per moduleOne Major task per module
2.2. Keep the coding as simple as possibleKeep the coding as simple as possible
3.3. Should the Module be Should the Module be
a. Customizeda. Customized
b. Portableb. Portable
Design a Macro Module to Produce aDesign a Macro Module to Produce a
Data Set Containing a Mean StatisticData Set Containing a Mean Statistic
![Page 89: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/89.jpg)
Decide How You Want to Produce a Decide How You Want to Produce a Data Set that Contains a Mean StatisticData Set that Contains a Mean Statistic
![Page 90: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/90.jpg)
• PROC MEANSPROC MEANS
Decide How You Want to Produce a Decide How You Want to Produce a Data Set that Contains a Mean StatisticData Set that Contains a Mean Statistic
![Page 91: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/91.jpg)
• PROC MEANSPROC MEANS
Decide How You Want to Produce a Decide How You Want to Produce a Data Set that Contains a Mean StatisticData Set that Contains a Mean Statistic
Requires 2 VARS for Labels to OutputRequires 2 VARS for Labels to Output
![Page 92: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/92.jpg)
• PROC MEANSPROC MEANS
• PROC UNIVARIATEPROC UNIVARIATE
Decide How You Want to Produce a Decide How You Want to Produce a Data Set that Contains a Mean StatisticData Set that Contains a Mean Statistic
![Page 93: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/93.jpg)
• PROC MEANSPROC MEANS
• PROC UNIVARIATEPROC UNIVARIATE
Decide How You Want to Produce a Decide How You Want to Produce a Data Set that Contains a Mean Statistic Data Set that Contains a Mean Statistic
No LabelsNo Labels
![Page 94: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/94.jpg)
• PROC MEANSPROC MEANS
• PROC UNIVARIATEPROC UNIVARIATE
• PROC SUMMARYPROC SUMMARY
Decide How You Want to Produce a Decide How You Want to Produce a Data Set that Contains a Mean StatisticData Set that Contains a Mean Statistic
![Page 95: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/95.jpg)
• PROC MEANSPROC MEANS
• PROC UNIVARIATEPROC UNIVARIATE
• PROC SUMMARYPROC SUMMARY
Decide How You Want to Produce a Decide How You Want to Produce a Data Set that Contains a Mean StatisticData Set that Contains a Mean Statistic
Need to Massage Output Data SetsNeed to Massage Output Data Sets
![Page 96: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/96.jpg)
• PROC MEANSPROC MEANS
• PROC UNIVARIATEPROC UNIVARIATE
• PROC SUMMARYPROC SUMMARY
• DATA Step ProcessingDATA Step Processing
Decide How You Want to Produce a Decide How You Want to Produce a Data Set that Contains a Mean StatisticData Set that Contains a Mean Statistic
![Page 97: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/97.jpg)
• PROC MEANSPROC MEANS
Decide How You Want to Produce a Decide How You Want to Produce a Data Set that Contains a Mean StatisticData Set that Contains a Mean Statistic
Requires 2 VARS for Labels to OutputRequires 2 VARS for Labels to Output
![Page 98: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/98.jpg)
PROC MEANS PROC MEANS
Produces the following Contents
PROC MEANS DATA PROC MEANS DATA = mydata MEAN N STDERR STDMEAN N STDERR STD;; VARVAR years_on_farm; years_on_farm;RUNRUN;;
PROC MEANS DATA PROC MEANS DATA = mydata MEAN N STDERR STDMEAN N STDERR STD;; VARVAR years_on_farm; years_on_farm;RUNRUN;;
![Page 99: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/99.jpg)
PROC MEANS PROC MEANS
Produces the following Contents
ODS OUTPUTODS OUTPUT summary=summary_means;PROC MEANS DATA PROC MEANS DATA = mydata MEAN N STDERR STDMEAN N STDERR STD;; VARVAR years_on_farm; years_on_farm;RUNRUN;;ODS OUTPUT CLOSEODS OUTPUT CLOSE;
ODS OUTPUTODS OUTPUT summary=summary_means;PROC MEANS DATA PROC MEANS DATA = mydata MEAN N STDERR STDMEAN N STDERR STD;; VARVAR years_on_farm; years_on_farm;RUNRUN;;ODS OUTPUT CLOSEODS OUTPUT CLOSE;
![Page 100: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/100.jpg)
PROC MEANS PROC MEANS
Produces the following Data SetProduces the following Data Set
ODS OUTPUTODS OUTPUT summary=summary_means;PROC MEANS DATA PROC MEANS DATA = mydata MEAN N STDERR STDMEAN N STDERR STD;; VARVAR years_on_farm; years_on_farm;RUNRUN;;ODS OUTPUT CLOSEODS OUTPUT CLOSE;
ODS OUTPUTODS OUTPUT summary=summary_means;PROC MEANS DATA PROC MEANS DATA = mydata MEAN N STDERR STDMEAN N STDERR STD;; VARVAR years_on_farm; years_on_farm;RUNRUN;;ODS OUTPUT CLOSEODS OUTPUT CLOSE;
years_on_farm_ years_on_farm_ years_on_farm_ years_on_farm_ Mean N StdErr StdDev 36.213 53482 0.079 18.259
![Page 101: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/101.jpg)
PROC MEANS PROC MEANS
Produces the following ContentsProduces the following Contents
ODS OUTPUTODS OUTPUT summary=summary_means;PROC MEANS DATA PROC MEANS DATA = mydata MEAN N STDERR STDMEAN N STDERR STD;; VARVAR years_on_farm; years_on_farm;RUNRUN;;ODS OUTPUT CLOSEODS OUTPUT CLOSE;
ODS OUTPUTODS OUTPUT summary=summary_means;PROC MEANS DATA PROC MEANS DATA = mydata MEAN N STDERR STDMEAN N STDERR STD;; VARVAR years_on_farm; years_on_farm;RUNRUN;;ODS OUTPUT CLOSEODS OUTPUT CLOSE;
PROC CONTENTS(abbreviated)
# Variable Type Len Format Label ----------------------------------------------------------------------------- 1 years_on_farm_Mean Num 8 BEST12. Mean 2 years_on_farm_N Num 8 BEST5. N 3 years_on_farm_StdDev Num 8 BEST12. Std Dev 4 years_on_farm_StdErr Num 8 BEST12. Std Error
![Page 102: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/102.jpg)
PROC MEANS PROC MEANS
Produces the following Contents
ODS OUTPUTODS OUTPUT summary=summary_means;PROC MEANS DATA PROC MEANS DATA = mydata MEAN N STDERR STDMEAN N STDERR STD;; VARVAR years_on_farm years_on_farm bmibmi;;RUNRUN;;ODS OUTPUT CLOSEODS OUTPUT CLOSE;
ODS OUTPUTODS OUTPUT summary=summary_means;PROC MEANS DATA PROC MEANS DATA = mydata MEAN N STDERR STDMEAN N STDERR STD;; VARVAR years_on_farm years_on_farm bmibmi;;RUNRUN;;ODS OUTPUT CLOSEODS OUTPUT CLOSE;
![Page 103: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/103.jpg)
PROC MEANS PROC MEANS
Produces the following ContentsProduces the following Contents
PROC CONTENTS(abbreviated)
# Variable Type Len Format Label ----------------------------------------------------------------------------- 1 VName_years_on_farm Char 13 Variable1 VName_years_on_farm Char 13 Variable 2 Label_years_on_farm Char 29 Label2 Label_years_on_farm Char 29 Label 3 years_on_farm_Mean Num 8 BEST12. Mean 4 years_on_farm_N Num 8 BEST5. N 5 years_on_farm_StdDev Num 8 BEST12. Std Dev 6 years_on_farm_StdErr Num 8 BEST12. Std Error 7 VName_bmi Char 3 Variable7 VName_bmi Char 3 Variable 8 Label_bmi Char 15 Label8 Label_bmi Char 15 Label 9 bmi_Mean Num 8 BEST12. Mean 10 bmi_N Num 8 BEST5. N 11 bmi_StdDev Num 8 BEST12. Std Dev 12 bmi_StdErr Num 8 BEST12. Std Error
![Page 104: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/104.jpg)
PROC MEANS PROC MEANS
Drop BMI statisticsDrop BMI statistics
PROC CONTENTS(abbreviated)
# Variable Type Len Format Label ----------------------------------------------------------------------------- 1 VName_years_on_farm Char 13 Variable 2 Label_years_on_farm Char 29 Label 3 years_on_farm_Mean Num 8 BEST12. Mean 4 years_on_farm_N Num 8 BEST5. N 5 years_on_farm_StdDev Num 8 BEST12. Std Dev 6 years_on_farm_StdErr Num 8 BEST12. Std Error 7 VName_bmi Char 3 Variable 8 Label_bmi Char 15 Label
![Page 105: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/105.jpg)
PROC MEANS PROC MEANS
Rename the VariablesRename the Variables
PROC CONTENTS(abbreviated)
# Variable Type Len Format Label ----------------------------------------------------------------------------- 1 key_var Char 13 Variable 2 key_label Char 29 Label 3 Mean Num 8 BEST12. Mean 4 N Num 8 BEST5. N 5 StdDev Num 8 BEST12. Std Dev 6 StdError Num 8 BEST12. Std Error 7 response_var Char 3 Variable 8 response_label Char 15 Label
![Page 106: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/106.jpg)
PROC MEANS PROC MEANS
ODS OUTPUTODS OUTPUT summary=summary_means; (DROP=bmi:) RENAME=(vname_bmi = response_var label_bmi = response_label vname_years_on_farm = key_var label_years_on_farm = key_label years_on_farm_mean = mean years_on_farm_n = n years_on_farm_stderr= stderror years_on_farm_stddev= stddev )) ;PROC MEANS DATA PROC MEANS DATA = mydata MEAN N STDERR STDMEAN N STDERR STD;; VARVAR years_on_farm bmi; years_on_farm bmi;RUNRUN;;ODS OUTPUT CLOSEODS OUTPUT CLOSE;
ODS OUTPUTODS OUTPUT summary=summary_means; (DROP=bmi:) RENAME=(vname_bmi = response_var label_bmi = response_label vname_years_on_farm = key_var label_years_on_farm = key_label years_on_farm_mean = mean years_on_farm_n = n years_on_farm_stderr= stderror years_on_farm_stddev= stddev )) ;PROC MEANS DATA PROC MEANS DATA = mydata MEAN N STDERR STDMEAN N STDERR STD;; VARVAR years_on_farm bmi; years_on_farm bmi;RUNRUN;;ODS OUTPUT CLOSEODS OUTPUT CLOSE;
![Page 107: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/107.jpg)
PROC MEANS PROC MEANS
Drop Response Variable StatisticsDrop Response Variable Statistics
ODS OUTPUTODS OUTPUT summary=summary_means (DROPDROP=bmi:); RENAME=(vname_bmi = response_var label_bmi = response_label vname_years_on_farm = key_var label_years_on_farm = key_label years_on_farm_mean = mean years_on_farm_n = n years_on_farm_stderr= stderror years_on_farm_stddev= stddev )) ;PROC MEANS DATA PROC MEANS DATA = mydata MEAN N STDERR STDMEAN N STDERR STD;; VARVAR years_on_farm bmi; years_on_farm bmi;RUNRUN;;ODS OUTPUT CLOSEODS OUTPUT CLOSE;
ODS OUTPUTODS OUTPUT summary=summary_means (DROPDROP=bmi:); RENAME=(vname_bmi = response_var label_bmi = response_label vname_years_on_farm = key_var label_years_on_farm = key_label years_on_farm_mean = mean years_on_farm_n = n years_on_farm_stderr= stderror years_on_farm_stddev= stddev )) ;PROC MEANS DATA PROC MEANS DATA = mydata MEAN N STDERR STDMEAN N STDERR STD;; VARVAR years_on_farm bmi; years_on_farm bmi;RUNRUN;;ODS OUTPUT CLOSEODS OUTPUT CLOSE;
![Page 108: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/108.jpg)
PROC MEANS PROC MEANS
RenameRename OutputOutput toto MatchMatch BASEBASE DataData SetSet
ODS OUTPUTODS OUTPUT summary=summary_means (DROPDROP=bmi:) RENAMERENAME=(vname_bmi = response_var label_bmi = response_label vname_years_on_farm = key_var label_years_on_farm = key_label years_on_farm_mean = mean years_on_farm_n = n years_on_farm_stderr= stderror years_on_farm_stddev= stddev )); ;PROC MEANS DATA PROC MEANS DATA = mydata MEAN N STDERR STDMEAN N STDERR STD;; VARVAR years_on_farm bmi; years_on_farm bmi;RUNRUN;;ODS OUTPUT CLOSEODS OUTPUT CLOSE;
ODS OUTPUTODS OUTPUT summary=summary_means (DROPDROP=bmi:) RENAMERENAME=(vname_bmi = response_var label_bmi = response_label vname_years_on_farm = key_var label_years_on_farm = key_label years_on_farm_mean = mean years_on_farm_n = n years_on_farm_stderr= stderror years_on_farm_stddev= stddev )); ;PROC MEANS DATA PROC MEANS DATA = mydata MEAN N STDERR STDMEAN N STDERR STD;; VARVAR years_on_farm bmi; years_on_farm bmi;RUNRUN;;ODS OUTPUT CLOSEODS OUTPUT CLOSE;
![Page 109: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/109.jpg)
PROC CONTENTS(abbreviated)
# Variable Type Len Format Label ----------------------------------------------------------------------- 1 key_var Char 13 Variable 2 key_label Char 29 Label 3 Mean Num 8 BEST12. Mean 4 N Num 8 BEST5. N 5 StdDev Num 8 BEST12. Std Dev 6 StdError Num 8 BEST12. Std Error 7 response_var Char 3 Variable 8 response_label Char 15 Label
PROC MEANS PROC MEANS
Contents of Final Summary Data SetContents of Final Summary Data Set
![Page 110: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/110.jpg)
Attributes after Appending to Attributes after Appending to
BASEBASE DataData SetSet
PROC CONTENTS(abbreviated)
# Variable Type Len Format Label ----------------------------------------------------------------------------- 1 key_var Char 32 Name of Independent Variable 2 key_label Char 40 Label of Independent Variable 3 Mean Num 8 BEST12. PROC MEANS: Mean 4 N Num 8 BEST5. PROC MEANS: N 5 StdDev Num 8 BEST12. PROC MEANS: Standard Deviation 6 StdError Num 8 BEST12. PROC MEANS: Standard Error 7 7 response_var Char 32 Name of Response Variable 8 response_label Char 40 Label of Response Variable
![Page 111: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/111.jpg)
PROC MEANS PROC MEANS (macrotize)%MACRO procmeans(data= var1= var2= );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT summary=summary_means (DROPDROP=bmi: ) RENAMERENAME=(vname_bmi =response_var label_bmi =response_label vname_years_on_farm =key_var label_years_on_farm =key_label years_on_farm_mean =mean years_on_farm_n =n years_on_farm_stderr=stderror years_on_farm_stddev=stddev )); ; PROC MEANS DATA PROC MEANS DATA = mydata MEAN N STDERR STDMEAN N STDERR STD;; VARVAR years_on_farm bmi ; years_on_farm bmi ; RUNRUN;; ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTING;
%MEND procmeans;
%MACRO procmeans(data= var1= var2= );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT summary=summary_means (DROPDROP=bmi: ) RENAMERENAME=(vname_bmi =response_var label_bmi =response_label vname_years_on_farm =key_var label_years_on_farm =key_label years_on_farm_mean =mean years_on_farm_n =n years_on_farm_stderr=stderror years_on_farm_stddev=stddev )); ; PROC MEANS DATA PROC MEANS DATA = mydata MEAN N STDERR STDMEAN N STDERR STD;; VARVAR years_on_farm bmi ; years_on_farm bmi ; RUNRUN;; ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTING;
%MEND procmeans;
![Page 112: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/112.jpg)
PROC MEANS (macrotize)PROC MEANS (macrotize)%MACRO procmeans(data= var1= var2= );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT summary=summary_means (DROPDROP==&var1&var1:) RENAMERENAME=(vname__&var1&var1 =response_var =response_var label_label_&var1&var1 =response_label =response_label vname_vname_&var2&var2 =key_var =key_var label_label_&var2&var2 =key_label =key_label &var2&var2._mean =mean._mean =mean &var2&var2._n =n._n =n &var2&var2._stderr =stderror._stderr =stderror &var2&var2._._stddev =stddev )); ; PROC MEANS DATA PROC MEANS DATA = &data&data MEAN N STDERR STDMEAN N STDERR STD;; VARVAR &var2 &var1&var2 &var1;; RUNRUN;; ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTING;
%MEND procmeans;
%MACRO procmeans(data= var1= var2= );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT summary=summary_means (DROPDROP==&var1&var1:) RENAMERENAME=(vname__&var1&var1 =response_var =response_var label_label_&var1&var1 =response_label =response_label vname_vname_&var2&var2 =key_var =key_var label_label_&var2&var2 =key_label =key_label &var2&var2._mean =mean._mean =mean &var2&var2._n =n._n =n &var2&var2._stderr =stderror._stderr =stderror &var2&var2._._stddev =stddev )); ; PROC MEANS DATA PROC MEANS DATA = &data&data MEAN N STDERR STDMEAN N STDERR STD;; VARVAR &var2 &var1&var2 &var1;; RUNRUN;; ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTING;
%MEND procmeans;
![Page 113: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/113.jpg)
PROC MEANS (macrotize)PROC MEANS (macrotize)%MACRO %MACRO procmeans(data= var1= var2= );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT summary=summary_means (DROPDROP=&var1:) RENAMERENAME=(vname_&var1 =response_var =response_var labellabel_&var1 =response_label =response_label vname_&var2 =key_varvname_&var2 =key_var label_&var2 =key_labellabel_&var2 =key_label &var2._mean =mean&var2._mean =mean &var2._n =n&var2._n =n &var2._stderr =stderror&var2._stderr =stderror &var2._stddev&var2._stddev =stddev )); ; PROC MEANS DATA PROC MEANS DATA = &data MEAN N STDERR STDMEAN N STDERR STD;; VARVAR &var2 &var1;; RUNRUN;; ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTING;
%MENDMEND procmeans;
%MACRO %MACRO procmeans(data= var1= var2= );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT summary=summary_means (DROPDROP=&var1:) RENAMERENAME=(vname_&var1 =response_var =response_var labellabel_&var1 =response_label =response_label vname_&var2 =key_varvname_&var2 =key_var label_&var2 =key_labellabel_&var2 =key_label &var2._mean =mean&var2._mean =mean &var2._n =n&var2._n =n &var2._stderr =stderror&var2._stderr =stderror &var2._stddev&var2._stddev =stddev )); ; PROC MEANS DATA PROC MEANS DATA = &data MEAN N STDERR STDMEAN N STDERR STD;; VARVAR &var2 &var1;; RUNRUN;; ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTING;
%MENDMEND procmeans;
![Page 114: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/114.jpg)
PROC MEANS (macrotize)PROC MEANS (macrotize)%MACRO %MACRO procmeans(data= var1= var2= );
ODS LISTING CLOSEODS LISTING CLOSE; ODS OUTPUTODS OUTPUT summary=summary_means (DROPDROP=&var1:) RENAMERENAME=(vname_&var1 =response_var label_&var1 =response_label vname_&var2 =key_var label_&var2 =key_label &var2._mean =mean &var2._n =n &var2._stderr =stderror &var2._stddev =stddev )); ; PROC MEANS DATA PROC MEANS DATA = &data MEAN N STDERR STDMEAN N STDERR STD;; VARVAR &var2 &var1;; RUNRUN;; ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTINGODS LISTING;
%MENDMEND procmeans;
%MACRO %MACRO procmeans(data= var1= var2= );
ODS LISTING CLOSEODS LISTING CLOSE; ODS OUTPUTODS OUTPUT summary=summary_means (DROPDROP=&var1:) RENAMERENAME=(vname_&var1 =response_var label_&var1 =response_label vname_&var2 =key_var label_&var2 =key_label &var2._mean =mean &var2._n =n &var2._stderr =stderror &var2._stddev =stddev )); ; PROC MEANS DATA PROC MEANS DATA = &data MEAN N STDERR STDMEAN N STDERR STD;; VARVAR &var2 &var1;; RUNRUN;; ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTINGODS LISTING;
%MENDMEND procmeans;
![Page 115: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/115.jpg)
PROC MEANS (invoke)PROC MEANS (invoke)%MACRO%procmeans(data = mydata var1 = bmi var2 = years_on_farm );
ODS LISTING CLOSE; ODS OUTPUT summary=summary_means (DROP=&var1:) RENAME=(vname_&var1 =response_va %procmeans(data = mydata var1 = bmi var2 = years_on_farm ); &var2._mean =mean &var2._n =n &var2._stderr =stderror &var2._stddev =stddev )); ; PROC MEANS DATA = &data MEAN N STDERR STD; VAR &var2 &var1; RUN; ODS OUTPUT CLOSE; ODS LISTING;
%MEND procmeans;
%MACRO%procmeans(data = mydata var1 = bmi var2 = years_on_farm );
ODS LISTING CLOSE; ODS OUTPUT summary=summary_means (DROP=&var1:) RENAME=(vname_&var1 =response_va %procmeans(data = mydata var1 = bmi var2 = years_on_farm ); &var2._mean =mean &var2._n =n &var2._stderr =stderror &var2._stddev =stddev )); ; PROC MEANS DATA = &data MEAN N STDERR STD; VAR &var2 &var1; RUN; ODS OUTPUT CLOSE; ODS LISTING;
%MEND procmeans;
![Page 116: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/116.jpg)
PROC MEANS PROC MEANS
Contents after AppendingContents after Appending
PROC CONTENTS(abbreviated)
# Variable Type Len Format Label ----------------------------------------------------------------------------- 1 key_var Char 32 Name of Independent Variable 2 key_label Char 40 Label of Independent Variable 3 Mean Num 8 BEST12. PROC MEANS: Mean 4 N Num 8 BEST5. PROC MEANS: N 5 StdDev Num 8 BEST12. PROC MEANS: Standard Deviation 6 StdError Num 8 BEST12. PROC MEANS: Standard Error 7 7 response_var Char 32 Name of Response Variable 8 response_label Char 40 Label of Response Variable
![Page 117: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/117.jpg)
Create a Data Set with Crude ModelCreate a Data Set with Crude Model
Estimates And Standard ErrorsEstimates And Standard Errors
![Page 118: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/118.jpg)
%MACRO procglm (test = , data = , response = , independent = , class_vars = , continuous_vars = );
ODS LISTING CLOSE; ODS OUTPUT parameterestimates=summary_&test._glm (DROP = dependent probt tvalue RENAME = (Parameter = Key_var Estimate = &test._Estimate stderr = &test._stderr) WHERE=(UPCASE(key_var)=UPCASE("&independent"))); PROCPROC GLMGLM DATADATA=mydata;
MODELMODEL bmi = years_on_farm; QUITQUIT;
ODS LISTING;
%MEND procglm;
%MACRO procglm (test = , data = , response = , independent = , class_vars = , continuous_vars = );
ODS LISTING CLOSE; ODS OUTPUT parameterestimates=summary_&test._glm (DROP = dependent probt tvalue RENAME = (Parameter = Key_var Estimate = &test._Estimate stderr = &test._stderr) WHERE=(UPCASE(key_var)=UPCASE("&independent"))); PROCPROC GLMGLM DATADATA=mydata;
MODELMODEL bmi = years_on_farm; QUITQUIT;
ODS LISTING;
%MEND procglm;
PROC GLMPROC GLM(macrotize)
![Page 119: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/119.jpg)
%MACRO procglm (test = , data = , response = , independent = , class_vars = , continuous_vars = );
ODS LISTING CLOSE; ODS OUTPUT parameterestimates=summary_&test._glm (DROP = dependent probt tvalue RENAME = (Parameter = Key_var Estimate = &test._Estimate stderr = &test._stderr) WHERE=(UPCASE(key_var)=UPCASE("&independent"))); PROC GLM DATAPROC GLM DATA=&data&data;
MODELMODEL &response&response = &independent&independent ; QUITQUIT;
ODS OUTPUT CLOSE; %MEND procglm;
%MACRO procglm (test = , data = , response = , independent = , class_vars = , continuous_vars = );
ODS LISTING CLOSE; ODS OUTPUT parameterestimates=summary_&test._glm (DROP = dependent probt tvalue RENAME = (Parameter = Key_var Estimate = &test._Estimate stderr = &test._stderr) WHERE=(UPCASE(key_var)=UPCASE("&independent"))); PROC GLM DATAPROC GLM DATA=&data&data;
MODELMODEL &response&response = &independent&independent ; QUITQUIT;
ODS OUTPUT CLOSE; %MEND procglm;
PROC GLM(macrotize)
![Page 120: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/120.jpg)
%MACROMACRO procglm (data = , response = , independent = ); independent = , class_vars = , continuous_vars = );
ODS LISTING CLOSE; ODS OUTPUT parameterestimates=summary_glm; (DROP = dependent probt tvalue RENAME = (Parameter = Key_var = Estimate WHERE=(UPCASE(key_var)=UPCASE("&independent"))); stderr = stderr) WHERE=(UPCASE(key_var)=UPCASE("&independent"))); PROC GLM DATAPROC GLM DATA=&data;
MODELMODEL &response = &independent&response = &independent ; QUITQUIT;
ODS LISTING;
%MENDMEND procglm;
%MACROMACRO procglm (data = , response = , independent = ); independent = , class_vars = , continuous_vars = );
ODS LISTING CLOSE; ODS OUTPUT parameterestimates=summary_glm; (DROP = dependent probt tvalue RENAME = (Parameter = Key_var = Estimate WHERE=(UPCASE(key_var)=UPCASE("&independent"))); stderr = stderr) WHERE=(UPCASE(key_var)=UPCASE("&independent"))); PROC GLM DATAPROC GLM DATA=&data;
MODELMODEL &response = &independent&response = &independent ; QUITQUIT;
ODS LISTING;
%MENDMEND procglm;
PROC GLM(macrotize)PROC GLM(macrotize)
![Page 121: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/121.jpg)
%MACROMACRO procglm (data = , response = , independent = ); independent = , class_vars = , continuous_vars = );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT parameterestimates=summary_glmsummary_glm; (DROP = dependent probt tvalue RENAME = (Parameter = Key_var = Estimate WHERE=(UPCASE(key_var)=UPCASE("&independent"))); stderr = stderr) WHERE=(UPCASE(key_var)=UPCASE("&independent"))); PROC GLM DATAPROC GLM DATA=&data;
MODELMODEL &response = &independent&response = &independent ; QUITQUIT; ODS OUTPUT CLOSEODS OUTPUT CLOSE;
%MENDMEND procglm;
%MACROMACRO procglm (data = , response = , independent = ); independent = , class_vars = , continuous_vars = );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT parameterestimates=summary_glmsummary_glm; (DROP = dependent probt tvalue RENAME = (Parameter = Key_var = Estimate WHERE=(UPCASE(key_var)=UPCASE("&independent"))); stderr = stderr) WHERE=(UPCASE(key_var)=UPCASE("&independent"))); PROC GLM DATAPROC GLM DATA=&data;
MODELMODEL &response = &independent&response = &independent ; QUITQUIT; ODS OUTPUT CLOSEODS OUTPUT CLOSE;
%MENDMEND procglm;
Route Output to a SAS Data SetRoute Output to a SAS Data Set
![Page 122: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/122.jpg)
%MACRO procglm (data = , response = , independent = ); independent = , class_vars = , continuous_vars = );
ODS LISTING CLOSE; ODS OUTPUT parameterestimates=summary_glm; %procglm (data = mydata, response = bmi, independent = years_on_farm); stderr = stderr) WHERE=(UPCASE(key_var)=UPCASE("&independent"))); PROC GLM DATA=&data;
MODEL &response = &independent ; QUIT; ODS OUTPUT CLOSE;
%MEND procglm;
%MACRO procglm (data = , response = , independent = ); independent = , class_vars = , continuous_vars = );
ODS LISTING CLOSE; ODS OUTPUT parameterestimates=summary_glm; %procglm (data = mydata, response = bmi, independent = years_on_farm); stderr = stderr) WHERE=(UPCASE(key_var)=UPCASE("&independent"))); PROC GLM DATA=&data;
MODEL &response = &independent ; QUIT; ODS OUTPUT CLOSE;
%MEND procglm;
Invoke the PROCGLM( ) ModuleInvoke the PROCGLM( ) Module
![Page 123: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/123.jpg)
PROC PRINT of the Data Set PROC PRINT of the Data Set
SUMMARY_GLM SUMMARY_GLM
Obs Dependent Parameter Estimate StdErr tValue Probt
1 bmi Intercept 25.039 0.0463 540.68 <.0001 2 bmi years_on_farm 0.0299 0.0011 26.37 <.0001
![Page 124: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/124.jpg)
PROC PRINT of the Data Set PROC PRINT of the Data Set
SUMMARY_GLM SUMMARY_GLM
Remove Unwanted informationRemove Unwanted information
Obs Dependent Parameter Estimate StdErr tValue Probt
1 bmi Intercept 25.039 0.0463 540.68 <.0001 2 bmi years_on_farm 0.0299 0.0011 26.37 <.0001
![Page 125: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/125.jpg)
PROC PRINT of the Data Set PROC PRINT of the Data Set
SUMMARY_GLM SUMMARY_GLM
Remove Unwanted informationRemove Unwanted information
Obs Parameter Estimate StdErr
1 Intercept 25.039 0.0463 2 years_on_farm 0.0299 0.0011
![Page 126: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/126.jpg)
PROC PRINT of the Data Set PROC PRINT of the Data Set
SUMMARY_GLM SUMMARY_GLM
Keep Only the Row for years_on_farmKeep Only the Row for years_on_farm
Obs Parameter Estimate StdErr
1 Intercept 25.039 0.0463 2 years_on_farm 0.0299 0.0011
![Page 127: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/127.jpg)
PROC PRINT of the Data Set PROC PRINT of the Data Set
SUMMARY_GLM SUMMARY_GLM
Keep Only the Row for years_on_farmKeep Only the Row for years_on_farm
Obs Parameter Estimate StdErr
2 years_on_farm 0.0299 0.0011
![Page 128: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/128.jpg)
PROC PRINT of the Data Set PROC PRINT of the Data Set
SUMMARY_GLM SUMMARY_GLM
Create the key_varCreate the key_var
Obs Parameter Estimate StdErr
2 years_on_farm 0.0299 0.0011
![Page 129: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/129.jpg)
PROC PRINT of the Data Set PROC PRINT of the Data Set
SUMMARY_GLM SUMMARY_GLM
Create the key_varCreate the key_var
Obs key_var Estimate StdErr
2 years_on_farm 0.0299 0.0011
![Page 130: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/130.jpg)
%MACROMACRO procglm (data = , response = , independent = ); independent = , class_vars = , continuous_vars = );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT parameterestimates=summary_glm; (DROP = dependent probt tvalue RENAME = (Parameter = Key_var = Estimate WHERE=(UPCASE(key_var)=UPCASE("&independent"))); stderr = stderr) WHERE=(UPCASE(key_var)=UPCASE("&independent"))); PROC GLM DATAPROC GLM DATA=&data;
MODELMODEL &response = &independent&response = &independent ; QUITQUIT; ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTING;
%MENDMEND procglm;
%MACROMACRO procglm (data = , response = , independent = ); independent = , class_vars = , continuous_vars = );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT parameterestimates=summary_glm; (DROP = dependent probt tvalue RENAME = (Parameter = Key_var = Estimate WHERE=(UPCASE(key_var)=UPCASE("&independent"))); stderr = stderr) WHERE=(UPCASE(key_var)=UPCASE("&independent"))); PROC GLM DATAPROC GLM DATA=&data;
MODELMODEL &response = &independent&response = &independent ; QUITQUIT; ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTING;
%MENDMEND procglm;
![Page 131: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/131.jpg)
%MACROMACRO procglm (data = , response = , independent = ); independent = , class_vars = , continuous_vars = );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT parameterestimates=summary_glm (DROPDROP = dependent probt tvaluedependent probt tvalue); RENAME = (Parameter = Key_var = Estimate WHERE=(UPCASE(key_var)=UPCASE("&independent"))); stderr = stderr) WHERE=(UPCASE(key_var)=UPCASE("&independent"))); PROC GLM DATAPROC GLM DATA=&data; MODELMODEL &response = &independent ; QUITQUIT; ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTING;
%MENDMEND procglm;
%MACROMACRO procglm (data = , response = , independent = ); independent = , class_vars = , continuous_vars = );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT parameterestimates=summary_glm (DROPDROP = dependent probt tvaluedependent probt tvalue); RENAME = (Parameter = Key_var = Estimate WHERE=(UPCASE(key_var)=UPCASE("&independent"))); stderr = stderr) WHERE=(UPCASE(key_var)=UPCASE("&independent"))); PROC GLM DATAPROC GLM DATA=&data; MODELMODEL &response = &independent ; QUITQUIT; ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTING;
%MENDMEND procglm;
![Page 132: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/132.jpg)
%MACROMACRO procglm (data = , response = , independent = ); independent = , class_vars = , continuous_vars = );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT parameterestimates=summary_glm (DROPDROP = dependent probt tvalue RENAMERENAME = (Parameter = Key_varKey_var)); = Estimate WHERE=(UPCASE(key_var)=UPCASE("&independent"))); stderr = stderr) WHERE=(UPCASE(key_var)=UPCASE("&independent"))); PROC GLM DATAPROC GLM DATA=&data;
MODELMODEL &response = &independent ; QUITQUIT; ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTING;
%MENDMEND procglm;
%MACROMACRO procglm (data = , response = , independent = ); independent = , class_vars = , continuous_vars = );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT parameterestimates=summary_glm (DROPDROP = dependent probt tvalue RENAMERENAME = (Parameter = Key_varKey_var)); = Estimate WHERE=(UPCASE(key_var)=UPCASE("&independent"))); stderr = stderr) WHERE=(UPCASE(key_var)=UPCASE("&independent"))); PROC GLM DATAPROC GLM DATA=&data;
MODELMODEL &response = &independent ; QUITQUIT; ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTING;
%MENDMEND procglm;
![Page 133: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/133.jpg)
%MACROMACRO procglm (data = , response = , independent = ); independent = , class_vars = , continuous_vars = );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT parameterestimates=summary_glm (DROPDROP = dependent probt tvalue RENAMERENAME = (Parameter = Key_varKey_var) = Estimate WHERE WHERE=(UPCASE(key_var)=UPCASE("&independent")UPCASE(key_var)=UPCASE("&independent"))); stderr = stderr) WHERE=(UPCASE(key_var)=UPCASE("&independent"))); PROC GLM DATAPROC GLM DATA=&data; MODELMODEL &response = &independent ; QUITQUIT; ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTING;
%MENDMEND procglm;
%MACROMACRO procglm (data = , response = , independent = ); independent = , class_vars = , continuous_vars = );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT parameterestimates=summary_glm (DROPDROP = dependent probt tvalue RENAMERENAME = (Parameter = Key_varKey_var) = Estimate WHERE WHERE=(UPCASE(key_var)=UPCASE("&independent")UPCASE(key_var)=UPCASE("&independent"))); stderr = stderr) WHERE=(UPCASE(key_var)=UPCASE("&independent"))); PROC GLM DATAPROC GLM DATA=&data; MODELMODEL &response = &independent ; QUITQUIT; ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTING;
%MENDMEND procglm;
![Page 134: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/134.jpg)
Create a Data Set with Adjusted ModelCreate a Data Set with Adjusted Model
Estimates And Standard ErrorsEstimates And Standard Errors
![Page 135: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/135.jpg)
%MACROMACRO procglm (data = , response = , independent = ); class_vars = ,independent = , continuous_vars = ); continuous_vars = );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT parameterestimates=summary_glm (DROPDROP = dependent probt tvalue RENAMERENAME = (Parameter = Key_varKey_var) = Estimate WHEREWHERE=(UPCASEUPCASE(key_var)=(key_var)=UPCASEUPCASE("&independent")("&independent"))); stderr = stderr) WHERE=(UPCASE(key_var)=UPCASE("&independent"))); PROC GLM DATAPROC GLM DATA=&data; MODELMODEL &response = &independent ; QUITQUIT; ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTING;
%MENDMEND procglm;
%MACROMACRO procglm (data = , response = , independent = ); class_vars = ,independent = , continuous_vars = ); continuous_vars = );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT parameterestimates=summary_glm (DROPDROP = dependent probt tvalue RENAMERENAME = (Parameter = Key_varKey_var) = Estimate WHEREWHERE=(UPCASEUPCASE(key_var)=(key_var)=UPCASEUPCASE("&independent")("&independent"))); stderr = stderr) WHERE=(UPCASE(key_var)=UPCASE("&independent"))); PROC GLM DATAPROC GLM DATA=&data; MODELMODEL &response = &independent ; QUITQUIT; ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTING;
%MENDMEND procglm;
![Page 136: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/136.jpg)
%MACROMACRO procglm (data = , response = , independent = , class_varsclass_vars = ,independent = , continuous_varscontinuous_vars = ); continuous_vars = );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT parameterestimates=summary_glm (DROPDROP = dependent probt tvalue RENAMERENAME = (Parameter = Key_varKey_var) = Estimate WHEREWHERE=(UPCASEUPCASE(key_var)=(key_var)=UPCASEUPCASE("&independent")("&independent"))); stderr = stderr) WHERE=(UPCASE(key_var)=UPCASE("&independent"))); PROC GLM DATAPROC GLM DATA=&data; MODELMODEL &response = &independent ; QUITQUIT; ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTING;
%MENDMEND procglm;
%MACROMACRO procglm (data = , response = , independent = , class_varsclass_vars = ,independent = , continuous_varscontinuous_vars = ); continuous_vars = );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT parameterestimates=summary_glm (DROPDROP = dependent probt tvalue RENAMERENAME = (Parameter = Key_varKey_var) = Estimate WHEREWHERE=(UPCASEUPCASE(key_var)=(key_var)=UPCASEUPCASE("&independent")("&independent"))); stderr = stderr) WHERE=(UPCASE(key_var)=UPCASE("&independent"))); PROC GLM DATAPROC GLM DATA=&data; MODELMODEL &response = &independent ; QUITQUIT; ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTING;
%MENDMEND procglm;
![Page 137: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/137.jpg)
%MACROMACRO procglm (data = , response = , independent = , class_vars = ,independent = , continuous_vars = ); continuous_vars = );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT parameterestimates=summary_glm (DROPDROP = dependent probt tvalue RENAMERENAME = (Parameter = Key_varKey_var) = Estimate WHEREWHERE=(UPCASEUPCASE(key_var)=(key_var)=UPCASEUPCASE("&independent")("&independent"))); stderr = stderr) WHERE=(UPCASE(key_var)=UPCASE("&independent"))); PROC GLM DATAPROC GLM DATA=&data; CLASSCLASS &class_vars&class_vars; MODELMODEL &response = &independent &class_vars &continuous_vars&class_vars &continuous_vars; QUITQUIT; ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTING;
%MENDMEND procglm;
%MACROMACRO procglm (data = , response = , independent = , class_vars = ,independent = , continuous_vars = ); continuous_vars = );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT parameterestimates=summary_glm (DROPDROP = dependent probt tvalue RENAMERENAME = (Parameter = Key_varKey_var) = Estimate WHEREWHERE=(UPCASEUPCASE(key_var)=(key_var)=UPCASEUPCASE("&independent")("&independent"))); stderr = stderr) WHERE=(UPCASE(key_var)=UPCASE("&independent"))); PROC GLM DATAPROC GLM DATA=&data; CLASSCLASS &class_vars&class_vars; MODELMODEL &response = &independent &class_vars &continuous_vars&class_vars &continuous_vars; QUITQUIT; ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTING;
%MENDMEND procglm;
![Page 138: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/138.jpg)
response = , independent = ); independent = , class_vars = , continuous_vars = );
ODS LISTING CLOSE; ODS OUTPUT parameterestimates=summary_glm; %procglm (data = mydata, response = bmi, independent = years_on_farm, class_vars = race gender, continuous_vars = age height); stderr = stderr) WHERE=(UPCASE(key_var)=UPCASE("&independent"))); PROC GLM DATA=&data;
MODEL &response = &independent ; QUIT; %MEND procglm;
response = , independent = ); independent = , class_vars = , continuous_vars = );
ODS LISTING CLOSE; ODS OUTPUT parameterestimates=summary_glm; %procglm (data = mydata, response = bmi, independent = years_on_farm, class_vars = race gender, continuous_vars = age height); stderr = stderr) WHERE=(UPCASE(key_var)=UPCASE("&independent"))); PROC GLM DATA=&data;
MODEL &response = &independent ; QUIT; %MEND procglm;
Invoke the PROCGLM( ) ModuleInvoke the PROCGLM( ) Module
![Page 139: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/139.jpg)
PROC PRINT of the Data Set PROC PRINT of the Data Set
SUMMARY_GLM SUMMARY_GLM
Obs Dependent Parameter Estimate StdErr tValue Probt
1 bmi Intercept 38.036 0.8723 43.60 <.0001 2 bmi age 0.0278 0.0028 9.84 <.0001 3 bmi height -0.170 0.0107 -15.78 <.0001 4 bmi race 0.8533 0.1202 7.09 <.0001 5 bmi gender -2.078 0.1013 -20.50 <.0001 6 bmi years_on_farm 0.0139 0.0019 7.17 <.0001
![Page 140: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/140.jpg)
PROC PRINT of the Data Set PROC PRINT of the Data Set
SUMMARY_GLM SUMMARY_GLM
Obs Parameter Estimate StdErr
1 Intercept 38.036 0.8723 2 age 0.0278 0.0028 3 height -0.170 0.0107 4 race 0.8533 0.1202 5 gender -2.078 0.1013 6 years_on_farm 0.0139 0.0019
![Page 141: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/141.jpg)
Final Version of the Data Set Final Version of the Data Set
SUMMARY_GLM SUMMARY_GLM
Obs Parameter Estimate StdErr
6 years_on_farm 0.0139 0.0019
![Page 142: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/142.jpg)
Final Version of the Data Set Final Version of the Data Set
SUMMARY_GLM SUMMARY_GLM
Obs key_var Estimate StdErr
6 years_on_farm 0.0139 0.0019
![Page 143: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/143.jpg)
Two Versions of Two Versions of
SUMMARY_GLM SUMMARY_GLM
Obs key_var Estimate StdErr
6 years_on_farm 0.0139 0.0019
![Page 144: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/144.jpg)
Adjusted_ Adjusted_ Obs key_var Estimate StdErr
6 years_on_farm 0.0139 0.0019
SUMMARY_CRUDE_GLM
SUMMARY_ADJUSTED_GLM SUMMARY_ADJUSTED_GLM
![Page 145: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/145.jpg)
Crude_ Crude_ Obs key_var Estimate StdErr 2 years_on_farm 0.0299 0.0011
Adjusted_ Adjusted_ Obs key_var Estimate StdErr
6 years_on_farm 0.0139 0.0019
SUMMARY_CRUDE_GLMSUMMARY_CRUDE_GLM
SUMMARY_ADJUSTED_GLM SUMMARY_ADJUSTED_GLM
![Page 146: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/146.jpg)
%MACROMACRO procglm (data = , response = , independent = , class_vars = ,independent = , continuous_vars = ); test = );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT parameterestimates=summary_glm (DROPDROP = dependent probt tvalue RENAMERENAME = (Parameter = Key_varKey_var) = Estimate WHEREWHERE=(UPCASEUPCASE(key_var)=(key_var)=UPCASEUPCASE("&independent")("&independent"))); stderr = stderr) WHERE=(UPCASE(key_var)=UPCASE("&independent"))); PROC GLM DATAPROC GLM DATA=&data; CLASSCLASS &class_vars&class_vars; MODELMODEL &response = &independent &class_vars &continuous_vars&class_vars &continuous_vars; QUITQUIT; ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTING;
%MENDMEND procglm;
%MACROMACRO procglm (data = , response = , independent = , class_vars = ,independent = , continuous_vars = ); test = );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT parameterestimates=summary_glm (DROPDROP = dependent probt tvalue RENAMERENAME = (Parameter = Key_varKey_var) = Estimate WHEREWHERE=(UPCASEUPCASE(key_var)=(key_var)=UPCASEUPCASE("&independent")("&independent"))); stderr = stderr) WHERE=(UPCASE(key_var)=UPCASE("&independent"))); PROC GLM DATAPROC GLM DATA=&data; CLASSCLASS &class_vars&class_vars; MODELMODEL &response = &independent &class_vars &continuous_vars&class_vars &continuous_vars; QUITQUIT; ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTING;
%MENDMEND procglm;
![Page 147: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/147.jpg)
%MACROMACRO procglm (data = , response = , independent = , class_vars = ,independent = , continuous_vars = , testtest = );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT parameterestimates=summary_glm (DROPDROP = dependent probt tvalue RENAMERENAME = (Parameter = Key_varKey_var) = Estimate WHEREWHERE=(UPCASEUPCASE(key_var)=(key_var)=UPCASEUPCASE("&independent")("&independent"))); stderr = stderr) WHERE=(UPCASE(key_var)=UPCASE("&independent"))); PROC GLM DATAPROC GLM DATA=&data; CLASSCLASS &class_vars&class_vars; MODELMODEL &response = &independent &class_vars &continuous_vars&class_vars &continuous_vars; QUITQUIT; ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTING;
%MEND MEND procglm;
%MACROMACRO procglm (data = , response = , independent = , class_vars = ,independent = , continuous_vars = , testtest = );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT parameterestimates=summary_glm (DROPDROP = dependent probt tvalue RENAMERENAME = (Parameter = Key_varKey_var) = Estimate WHEREWHERE=(UPCASEUPCASE(key_var)=(key_var)=UPCASEUPCASE("&independent")("&independent"))); stderr = stderr) WHERE=(UPCASE(key_var)=UPCASE("&independent"))); PROC GLM DATAPROC GLM DATA=&data; CLASSCLASS &class_vars&class_vars; MODELMODEL &response = &independent &class_vars &continuous_vars&class_vars &continuous_vars; QUITQUIT; ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTING;
%MEND MEND procglm;
![Page 148: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/148.jpg)
%MACROMACRO procglm (data = , response = , independent = , class_vars = ,independent = , continuous_vars = , testtest = );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT parameterestimates=summary__&test&test._glm (DROPDROP = dependent probt tvalue RENAMERENAME = (Parameter = Key_varKey_var Estimate = Estimate = &test&test._estimate._estimate StdErr = StdErr = &test&test._stderr._stderr) = Estimate WHEREWHERE=(UPCASEUPCASE(key_var)=(key_var)=UPCASEUPCASE("&independent")("&independent"))); PROC GLM DATAPROC GLM DATA=&data; CLASSCLASS &class_vars&class_vars; MODELMODEL &response = &independent &class_vars &continuous_vars&class_vars &continuous_vars; QUITQUIT; ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTING;
%MENDMEND procglm;
%MACROMACRO procglm (data = , response = , independent = , class_vars = ,independent = , continuous_vars = , testtest = );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT parameterestimates=summary__&test&test._glm (DROPDROP = dependent probt tvalue RENAMERENAME = (Parameter = Key_varKey_var Estimate = Estimate = &test&test._estimate._estimate StdErr = StdErr = &test&test._stderr._stderr) = Estimate WHEREWHERE=(UPCASEUPCASE(key_var)=(key_var)=UPCASEUPCASE("&independent")("&independent"))); PROC GLM DATAPROC GLM DATA=&data; CLASSCLASS &class_vars&class_vars; MODELMODEL &response = &independent &class_vars &continuous_vars&class_vars &continuous_vars; QUITQUIT; ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTING;
%MENDMEND procglm;
![Page 149: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/149.jpg)
%procglm (data = mydata, response = bmi, independent = years_on_farm, test = crude) ODS LISTING CLOSE; ODS OUTPUT parameterestimates=summary_glm; %procglm (data = mydata, response = bmi, independent = years_on_farm, class_vars = race gender, continuous_vars = age height, test = adjusted); stderr = stderr)PROC GLM DATA=&data;
MODEL &response = &independent ; QUIT;
%procglm (data = mydata, response = bmi, independent = years_on_farm, test = crude) ODS LISTING CLOSE; ODS OUTPUT parameterestimates=summary_glm; %procglm (data = mydata, response = bmi, independent = years_on_farm, class_vars = race gender, continuous_vars = age height, test = adjusted); stderr = stderr)PROC GLM DATA=&data;
MODEL &response = &independent ; QUIT;
Two Invocations of PROCGLM( )Two Invocations of PROCGLM( )
![Page 150: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/150.jpg)
Crude_ Crude_ Obs key_var Estimate StdErr 2 years_on_farm 0.0299 0.0011
Adjusted_ Adjusted_ Obs key_var Estimate StdErr
6 years_on_farm 0.0139 0.0019
SUMMARY_CRUDE_GLMSUMMARY_CRUDE_GLM
SUMMARY_ADJUSTED_GLM SUMMARY_ADJUSTED_GLM
![Page 151: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/151.jpg)
%MACRO MACRO procglm (data = , response = , independent = , class_vars = ,independent = , continuous_vars = , testtest = );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT parameterestimates=summary_&test_&test._glm (DROPDROP = dependent probt tvalue RENAMERENAME = (Parameter = Key_varKey_var Estimate = &test._estimateEstimate = &test._estimate StdErr = &test._stderrStdErr = &test._stderr) = Estimate WHEREWHERE=(UPCASEUPCASE(key_var)=(key_var)=UPCASEUPCASE("&independent")("&independent"))); PROC GLM DATAPROC GLM DATA=&data; CLASS CLASS &class_vars&class_vars; MODELMODEL &response = &independent &class_vars &continuous_vars&class_vars &continuous_vars; QUITQUIT; ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTING;
%MENDMEND procglm;
%MACRO MACRO procglm (data = , response = , independent = , class_vars = ,independent = , continuous_vars = , testtest = );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT parameterestimates=summary_&test_&test._glm (DROPDROP = dependent probt tvalue RENAMERENAME = (Parameter = Key_varKey_var Estimate = &test._estimateEstimate = &test._estimate StdErr = &test._stderrStdErr = &test._stderr) = Estimate WHEREWHERE=(UPCASEUPCASE(key_var)=(key_var)=UPCASEUPCASE("&independent")("&independent"))); PROC GLM DATAPROC GLM DATA=&data; CLASS CLASS &class_vars&class_vars; MODELMODEL &response = &independent &class_vars &continuous_vars&class_vars &continuous_vars; QUITQUIT; ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTING;
%MENDMEND procglm;
![Page 152: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/152.jpg)
%MACRO MACRO procglm (data = , response = , independent = , class_vars = ,independent = , continuous_vars = , testtest = );
ODS LISTING CLOSEODS LISTING CLOSE; ODS OUTPUTODS OUTPUT parameterestimates=summary_&test_&test._glm (DROPDROP = dependent probt tvalue RENAMERENAME = (Parameter = Key_varKey_var Estimate = &test._estimateEstimate = &test._estimate StdErr = &test._stderrStdErr = &test._stderr) = Estimate WHEREWHERE=(UPCASEUPCASE(key_var)=(key_var)=UPCASEUPCASE("&independent")("&independent"))); PROC GLM DATAPROC GLM DATA=&data; CLASSCLASS &class_vars&class_vars; MODELMODEL &response = &independent &class_vars &continuous_vars&class_vars &continuous_vars; QUITQUIT; ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTINGODS LISTING;
%MEND MEND procglm;
%MACRO MACRO procglm (data = , response = , independent = , class_vars = ,independent = , continuous_vars = , testtest = );
ODS LISTING CLOSEODS LISTING CLOSE; ODS OUTPUTODS OUTPUT parameterestimates=summary_&test_&test._glm (DROPDROP = dependent probt tvalue RENAMERENAME = (Parameter = Key_varKey_var Estimate = &test._estimateEstimate = &test._estimate StdErr = &test._stderrStdErr = &test._stderr) = Estimate WHEREWHERE=(UPCASEUPCASE(key_var)=(key_var)=UPCASEUPCASE("&independent")("&independent"))); PROC GLM DATAPROC GLM DATA=&data; CLASSCLASS &class_vars&class_vars; MODELMODEL &response = &independent &class_vars &continuous_vars&class_vars &continuous_vars; QUITQUIT; ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTINGODS LISTING;
%MEND MEND procglm;
![Page 153: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/153.jpg)
Crude_ Crude_ key_var Estimate StdErr years_on_farm 0.0299 0.0011
Adjusted_ Adjusted_ key_var Estimate StdErr
years_on_farm 0.0139 0.0019
SUMMARY_MEANS
SUMMARY_CRUDE_GLMSUMMARY_CRUDE_GLM
SUMMARY_ADJUSTED_GLM SUMMARY_ADJUSTED_GLM
![Page 154: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/154.jpg)
Crude_ Crude_ key_var Estimate StdErr years_on_farm 0.0299 0.0011
Adjusted_ Adjusted_ key_var Estimate StdErr
years_on_farm 0.0139 0.0019
SUMMARY_MEANSSUMMARY_MEANS
SUMMARY_CRUDE_GLMSUMMARY_CRUDE_GLM
SUMMARY_ADJUSTED_GLM SUMMARY_ADJUSTED_GLM key_var response_var mean n stderr stddev years_on_farm bmi 36.213 53482 0.079 18.259
![Page 155: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/155.jpg)
Crude_ Crude_ key_var Estimate StdErr years_on_farm 0.0299 0.0011
Adjusted_ Adjusted_ key_var Estimate StdErr
years_on_farm 0.0139 0.0019
SUMMARY_MEANSSUMMARY_MEANS
SUMMARY_CRUDE_GLMSUMMARY_CRUDE_GLM
SUMMARY_ADJUSTED_GLM SUMMARY_ADJUSTED_GLM key_var response_var mean n stderr stddev years_on_farm bmi 36.213 53482 0.079 18.259
![Page 156: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/156.jpg)
SUMMARYSET( ) macro moduleSUMMARYSET( ) macro module
Merge these three datasets into a Merge these three datasets into a composite summary datasetcomposite summary dataset
![Page 157: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/157.jpg)
%MACRO summaryset(merge_var = , base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCAL i dsets;
PROC SQL NOPRINTPROC SQL NOPRINT ; ; SELECT TRIMSELECT TRIM((LIBNAMELIBNAME) || "." || ) || "." || MEMNAMEMEMNAME INTOINTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROM DICTIONARYFROM DICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" ANDAND MEMNAME LIKEMEMNAME LIKE " "SUMMARY_SUMMARY_";"; QUIT QUIT ; ;
%MACRO summaryset(merge_var = , base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCAL i dsets;
PROC SQL NOPRINTPROC SQL NOPRINT ; ; SELECT TRIMSELECT TRIM((LIBNAMELIBNAME) || "." || ) || "." || MEMNAMEMEMNAME INTOINTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROM DICTIONARYFROM DICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" ANDAND MEMNAME LIKEMEMNAME LIKE " "SUMMARY_SUMMARY_";"; QUIT QUIT ; ;
SUMMARYSET( ) macro moduleSUMMARYSET( ) macro module
![Page 158: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/158.jpg)
%MACRO summaryset(merge_var = , base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCAL i dsets;
%%LETLET dsetsdsets == SUMMARY_SUMMARY_MEANSMEANS SUMMARY_SUMMARY_CRUDE_GLMCRUDE_GLM SUMMARY_SUMMARY_ADJUSTED_GLM;ADJUSTED_GLM; SELECT TRIM(LIBNAME) || "." || MEMNAME INTO :dsets SEPARATED BY " " FROM DICTIONARY.TABLES WHERE LIBNAME = "WORK" AND MEMNAME LIKE "SUMMARY_"; QUIT ;
%MACRO summaryset(merge_var = , base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCAL i dsets;
%%LETLET dsetsdsets == SUMMARY_SUMMARY_MEANSMEANS SUMMARY_SUMMARY_CRUDE_GLMCRUDE_GLM SUMMARY_SUMMARY_ADJUSTED_GLM;ADJUSTED_GLM; SELECT TRIM(LIBNAME) || "." || MEMNAME INTO :dsets SEPARATED BY " " FROM DICTIONARY.TABLES WHERE LIBNAME = "WORK" AND MEMNAME LIKE "SUMMARY_"; QUIT ;
SUMMARYSET( ) macro moduleSUMMARYSET( ) macro module
![Page 159: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/159.jpg)
%MACRO summaryset(merge_var = , base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCAL i dsets;
PROC SQL NOPRINTPROC SQL NOPRINT ; ; SELECTSELECT TRIMTRIM((LIBNAMELIBNAME) || "." || ) || "." || MEMNAMEMEMNAME INTO INTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("("&setlist&setlist%");%"); QUITQUIT ; ;
%MACRO summaryset(merge_var = , base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCAL i dsets;
PROC SQL NOPRINTPROC SQL NOPRINT ; ; SELECTSELECT TRIMTRIM((LIBNAMELIBNAME) || "." || ) || "." || MEMNAMEMEMNAME INTO INTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("("&setlist&setlist%");%"); QUITQUIT ; ;
SUMMARYSET( ) macro module SUMMARYSET( ) macro module
![Page 160: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/160.jpg)
%MACROMACRO summaryset(setlist = ); base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCAL i dsets;
PROC SQL NOPRINTPROC SQL NOPRINT ; ; SELECTSELECT TRIMTRIM((LIBNAMELIBNAME) || "." || ) || "." || MEMNAMEMEMNAME INTO INTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("("&setlist&setlist%");%"); QUITQUIT ; ;
%MACROMACRO summaryset(setlist = ); base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCAL i dsets;
PROC SQL NOPRINTPROC SQL NOPRINT ; ; SELECTSELECT TRIMTRIM((LIBNAMELIBNAME) || "." || ) || "." || MEMNAMEMEMNAME INTO INTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("("&setlist&setlist%");%"); QUITQUIT ; ;
SUMMARYSET( ) macro moduleSUMMARYSET( ) macro module
![Page 161: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/161.jpg)
%MACROMACRO summaryset(merge_var = , base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCAL i dsets;
PROC SQL NOPRINTPROC SQL NOPRINT ; ; SELECTSELECT TRIMTRIM((LIBNAMELIBNAME) || "." || ) || "." || MEMNAMEMEMNAME INTO INTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ; ;;
%MACROMACRO summaryset(merge_var = , base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCAL i dsets;
PROC SQL NOPRINTPROC SQL NOPRINT ; ; SELECTSELECT TRIMTRIM((LIBNAMELIBNAME) || "." || ) || "." || MEMNAMEMEMNAME INTO INTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ; ;;
SUMMARYSET( ) macro moduleSUMMARYSET( ) macro module
![Page 162: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/162.jpg)
%MACROMACRO summaryset(merge_var = , base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCALLOCAL i dsets;
PROC SQL NOPRINTPROC SQL NOPRINT ; ; SELECTSELECT TRIMTRIM((LIBNAMELIBNAME) || "." || ) || "." || MEMNAMEMEMNAME INTO INTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
%MACROMACRO summaryset(merge_var = , base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCALLOCAL i dsets;
PROC SQL NOPRINTPROC SQL NOPRINT ; ; SELECTSELECT TRIMTRIM((LIBNAMELIBNAME) || "." || ) || "." || MEMNAMEMEMNAME INTO INTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
SUMMARYSET( ) macro moduleSUMMARYSET( ) macro module
![Page 163: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/163.jpg)
%MACROMACRO summaryset(merge_var = , base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCALLOCAL i dsets;
PROC SQL NOPRINTPROC SQL NOPRINT ; ; SELECTSELECT TRIMTRIM((LIBNAMELIBNAME) || "." || ) || "." || MEMNAMEMEMNAME INTO INTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
%%LETLET i= 1; i= 1;
%DO %UNTIL (NOT %LENGTH(%SCAN(&dsets,&i, %STR( ))));
%MACROMACRO summaryset(merge_var = , base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCALLOCAL i dsets;
PROC SQL NOPRINTPROC SQL NOPRINT ; ; SELECTSELECT TRIMTRIM((LIBNAMELIBNAME) || "." || ) || "." || MEMNAMEMEMNAME INTO INTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
%%LETLET i= 1; i= 1;
%DO %UNTIL (NOT %LENGTH(%SCAN(&dsets,&i, %STR( ))));
SUMMARYSET( ) macro module
![Page 164: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/164.jpg)
%MACROMACRO summaryset(merge_var = , base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCALLOCAL i dsets;
PROC SQL NOPRINTPROC SQL NOPRINT ; ; SELECTSELECT TRIMTRIM((LIBNAMELIBNAME) || "." || ) || "." || MEMNAMEMEMNAME INTO INTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( ));
%MACROMACRO summaryset(merge_var = , base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCALLOCAL i dsets;
PROC SQL NOPRINTPROC SQL NOPRINT ; ; SELECTSELECT TRIMTRIM((LIBNAMELIBNAME) || "." || ) || "." || MEMNAMEMEMNAME INTO INTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( ));
SUMMARYSET( ) macro module
![Page 165: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/165.jpg)
base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCALLOCAL i dsets;
PROC SQL NOPRINTPROC SQL NOPRINT ; ; SELECTSELECT TRIMTRIM((LIBNAMELIBNAME) || "." || ) || "." || MEMNAMEMEMNAME INTO INTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var;
base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCALLOCAL i dsets;
PROC SQL NOPRINTPROC SQL NOPRINT ; ; SELECTSELECT TRIMTRIM((LIBNAMELIBNAME) || "." || ) || "." || MEMNAMEMEMNAME INTO INTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var;
SUMMARYSET( ) macro module
![Page 166: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/166.jpg)
setlist = , delsets = , class_vars = , continuous_vars = ); %LOCALLOCAL i dsets;
PROC SQL NOPRINTPROC SQL NOPRINT ; ; SELECTSELECT TRIMTRIM((LIBNAMELIBNAME) || "." || ) || "." || MEMNAMEMEMNAME INTO INTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN;
setlist = , delsets = , class_vars = , continuous_vars = ); %LOCALLOCAL i dsets;
PROC SQL NOPRINTPROC SQL NOPRINT ; ; SELECTSELECT TRIMTRIM((LIBNAMELIBNAME) || "." || ) || "." || MEMNAMEMEMNAME INTO INTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN;
SUMMARYSET( ) macro module
![Page 167: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/167.jpg)
delsets = , class_vars = , continuous_vars = ); %LOCALLOCAL i dsets;
PROC SQL NOPRINTPROC SQL NOPRINT ; ; SELECTSELECT TRIMTRIM((LIBNAMELIBNAME) || "." || ) || "." || MEMNAMEMEMNAME INTO INTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1); (&i+1);
delsets = , class_vars = , continuous_vars = ); %LOCALLOCAL i dsets;
PROC SQL NOPRINTPROC SQL NOPRINT ; ; SELECTSELECT TRIMTRIM((LIBNAMELIBNAME) || "." || ) || "." || MEMNAMEMEMNAME INTO INTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1); (&i+1);
SUMMARYSET( ) macro module
![Page 168: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/168.jpg)
class_vars = , continuous_vars = ); %LOCALLOCAL i dsets;
PROC SQL NOPRINTPROC SQL NOPRINT ; ; SELECTSELECT TRIMTRIM((LIBNAMELIBNAME) || "." || ) || "." || MEMNAMEMEMNAME INTO INTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
class_vars = , continuous_vars = ); %LOCALLOCAL i dsets;
PROC SQL NOPRINTPROC SQL NOPRINT ; ; SELECTSELECT TRIMTRIM((LIBNAMELIBNAME) || "." || ) || "." || MEMNAMEMEMNAME INTO INTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
SUMMARYSET( ) macro module
![Page 169: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/169.jpg)
continuous_vars = ); %LOCALLOCAL i dsets;
PROC SQL NOPRINTPROC SQL NOPRINT ; ; SELECTSELECT TRIMTRIM((LIBNAMELIBNAME) || "." || ) || "." || MEMNAMEMEMNAME INTO INTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
continuous_vars = ); %LOCALLOCAL i dsets;
PROC SQL NOPRINTPROC SQL NOPRINT ; ; SELECTSELECT TRIMTRIM((LIBNAMELIBNAME) || "." || ) || "." || MEMNAMEMEMNAME INTO INTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
SUMMARYSET( ) macro module
![Page 170: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/170.jpg)
%LOCALLOCAL i dsets;
PROC SQL NOPRINTPROC SQL NOPRINT ; ; SELECTSELECT TRIMTRIM((LIBNAMELIBNAME) || "." || ) || "." || MEMNAMEMEMNAME INTO INTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_;
%LOCALLOCAL i dsets;
PROC SQL NOPRINTPROC SQL NOPRINT ; ; SELECTSELECT TRIMTRIM((LIBNAMELIBNAME) || "." || ) || "." || MEMNAMEMEMNAME INTO INTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_;
SUMMARYSET( ) macro module
![Page 171: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/171.jpg)
PROC SQL NOPRINTPROC SQL NOPRINT ; ; SELECTSELECT TRIMTRIM((LIBNAMELIBNAME) || "." || ) || "." || MEMNAMEMEMNAME INTO INTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets;
PROC SQL NOPRINTPROC SQL NOPRINT ; ; SELECTSELECT TRIMTRIM((LIBNAMELIBNAME) || "." || ) || "." || MEMNAMEMEMNAME INTO INTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets;
SUMMARYSET( ) macro module
![Page 172: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/172.jpg)
PROC SQL NOPRINTPROC SQL NOPRINT ; ; SELECTSELECT TRIMTRIM((LIBNAMELIBNAME) || "." || ) || "." || MEMNAMEMEMNAME INTO INTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var;
PROC SQL NOPRINTPROC SQL NOPRINT ; ; SELECTSELECT TRIMTRIM((LIBNAMELIBNAME) || "." || ) || "." || MEMNAMEMEMNAME INTO INTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var;
SUMMARYSET( ) macro module
![Page 173: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/173.jpg)
SELECTSELECT TRIMTRIM((LIBNAMELIBNAME) || "." || ) || "." || MEMNAMEMEMNAME INTO INTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars";
SELECTSELECT TRIMTRIM((LIBNAMELIBNAME) || "." || ) || "." || MEMNAMEMEMNAME INTO INTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars";
SUMMARYSET( ) macro module
![Page 174: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/174.jpg)
INTO INTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars";
INTO INTO :dsets :dsets SEPARATED BYSEPARATED BY " " " " FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars";
SUMMARYSET( ) macro module
![Page 175: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/175.jpg)
FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
FROMFROM DICTIONARYDICTIONARY..TABLESTABLES WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
SUMMARYSET( ) macro module
![Page 176: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/176.jpg)
WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
WHERE LIBNAMEWHERE LIBNAME = "WORK" = "WORK" AND AND MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
SUMMARYSET( ) macro module
![Page 177: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/177.jpg)
MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
PROC APPENDPROC APPEND BASEBASE=&base=&base DATADATA=&setlist=&setlist FORCEFORCE;;
MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
PROC APPENDPROC APPEND BASEBASE=&base=&base DATADATA=&setlist=&setlist FORCEFORCE;;
SUMMARYSET( ) macro module
![Page 178: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/178.jpg)
MEMNAME LIKE UPCASE("&setlist%"); QUIT ;
%LET i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var&merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
PROC APPEND BASE=&base DATA=&setlist FORCE;
MEMNAME LIKE UPCASE("&setlist%"); QUIT ;
%LET i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var&merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
PROC APPEND BASE=&base DATA=&setlist FORCE;
Sort the 3 Summary Sets by key_varSort the 3 Summary Sets by key_var
![Page 179: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/179.jpg)
MEMNAME LIKE UPCASE("&setlist%"); QUIT ;
%LET i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var&merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var&merge_var;; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
PROC APPEND BASE=&base DATA=&setlist FORCE;
MEMNAME LIKE UPCASE("&setlist%"); QUIT ;
%LET i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var&merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var&merge_var;; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
PROC APPEND BASE=&base DATA=&setlist FORCE;
Merge the 3 Summary Sets by key_var Merge the 3 Summary Sets by key_var
![Page 180: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/180.jpg)
MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
PROC APPENDPROC APPEND BASEBASE=&base=&base DATADATA=&setlist=&setlist FORCEFORCE;;
MEMNAME LIKE UPCASEMEMNAME LIKE UPCASE("&setlist%");("&setlist%"); QUITQUIT ;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
PROC APPENDPROC APPEND BASEBASE=&base=&base DATADATA=&setlist=&setlist FORCEFORCE;;
SUMMARYSET( ) macro module
![Page 181: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/181.jpg)
QUITQUIT ;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
PROC APPENDPROC APPEND BASEBASE=&base=&base DATADATA=&setlist=&setlist FORCEFORCE;; RUNRUN;;
QUITQUIT ;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
PROC APPENDPROC APPEND BASEBASE=&base=&base DATADATA=&setlist=&setlist FORCEFORCE;; RUNRUN;;
SUMMARYSET( ) macro module
![Page 182: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/182.jpg)
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
PROC APPENDPROC APPEND BASEBASE=&base=&base DATADATA=&setlist=&setlist FORCEFORCE;; RUNRUN;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
PROC APPENDPROC APPEND BASEBASE=&base=&base DATADATA=&setlist=&setlist FORCEFORCE;; RUNRUN;;
SUMMARYSET( ) macro module
![Page 183: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/183.jpg)
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
PROC APPENDPROC APPEND BASEBASE=&base=&base DATADATA=&setlist=&setlist FORCEFORCE;; RUNRUN;;
PROC DATASETSPROC DATASETS;;
%%LETLET i= 1; i= 1;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
PROC APPENDPROC APPEND BASEBASE=&base=&base DATADATA=&setlist=&setlist FORCEFORCE;; RUNRUN;;
PROC DATASETSPROC DATASETS;;
SUMMARYSET( ) macro module
![Page 184: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/184.jpg)
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
PROC APPENDPROC APPEND BASEBASE=&base=&base DATADATA=&setlist=&setlist FORCEFORCE;; RUNRUN;;
PROC DATASETSPROC DATASETS;; DELETEDELETE &setlist: &delsets / &setlist: &delsets / MEMTYPEMEMTYPE = = DATADATA;;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
PROC APPENDPROC APPEND BASEBASE=&base=&base DATADATA=&setlist=&setlist FORCEFORCE;; RUNRUN;;
PROC DATASETSPROC DATASETS;; DELETEDELETE &setlist: &delsets / &setlist: &delsets / MEMTYPEMEMTYPE = = DATADATA;;
SUMMARYSET( ) macro module
![Page 185: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/185.jpg)
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
PROC APPENDPROC APPEND BASEBASE=&base=&base DATADATA=&setlist=&setlist FORCEFORCE;; RUNRUN;;
PROC DATASETSPROC DATASETS;; DELETEDELETE &setlist: &delsets / &setlist: &delsets / MEMTYPEMEMTYPE = = DATADATA;; QUIT;
%%DODO % %UNTILUNTIL ( (NOTNOT % %LENGTHLENGTH(%(%SCANSCAN(&dsets,&i, %(&dsets,&i, %STRSTR( ))));( )))); PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
PROC APPENDPROC APPEND BASEBASE=&base=&base DATADATA=&setlist=&setlist FORCEFORCE;; RUNRUN;;
PROC DATASETSPROC DATASETS;; DELETEDELETE &setlist: &delsets / &setlist: &delsets / MEMTYPEMEMTYPE = = DATADATA;; QUIT;
SUMMARYSET( ) macro module
![Page 186: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/186.jpg)
PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
PROC APPENDPROC APPEND BASEBASE=&base=&base DATADATA=&setlist=&setlist FORCEFORCE;; RUNRUN;;
PROC DATASETSPROC DATASETS;; DELETEDELETE &setlist: &delsets / &setlist: &delsets / MEMTYPEMEMTYPE = = DATADATA;; QUITQUIT;
PROC SORT DATAPROC SORT DATA=%SCANSCAN(&dsets,&i, %STRSTR( )); BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
PROC APPENDPROC APPEND BASEBASE=&base=&base DATADATA=&setlist=&setlist FORCEFORCE;; RUNRUN;;
PROC DATASETSPROC DATASETS;; DELETEDELETE &setlist: &delsets / &setlist: &delsets / MEMTYPEMEMTYPE = = DATADATA;; QUITQUIT;
SUMMARYSET( ) macro module
![Page 187: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/187.jpg)
BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
PROC APPENDPROC APPEND BASEBASE=&base=&base DATADATA=&setlist=&setlist FORCEFORCE;; RUNRUN;;
PROC DATASETSPROC DATASETS;; DELETEDELETE &setlist: &delsets / &setlist: &delsets / MEMTYPEMEMTYPE = = DATADATA;; QUITQUIT;
%MENDMEND summaryset;
BYBY &merge_var; RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
PROC APPENDPROC APPEND BASEBASE=&base=&base DATADATA=&setlist=&setlist FORCEFORCE;; RUNRUN;;
PROC DATASETSPROC DATASETS;; DELETEDELETE &setlist: &delsets / &setlist: &delsets / MEMTYPEMEMTYPE = = DATADATA;; QUITQUIT;
%MENDMEND summaryset;
SUMMARYSET( ) macro module
![Page 188: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/188.jpg)
RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
PROC APPENDPROC APPEND BASEBASE=&base=&base DATADATA=&setlist=&setlist FORCEFORCE;; RUNRUN;;
PROC DATASETSPROC DATASETS;; DELETEDELETE &setlist: &delsets / &setlist: &delsets / MEMTYPEMEMTYPE = = DATADATA;; QUITQUIT;
%MENDMEND summaryset;
RUNRUN; %%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
PROC APPENDPROC APPEND BASEBASE=&base=&base DATADATA=&setlist=&setlist FORCEFORCE;; RUNRUN;;
PROC DATASETSPROC DATASETS;; DELETEDELETE &setlist: &delsets / &setlist: &delsets / MEMTYPEMEMTYPE = = DATADATA;; QUITQUIT;
%MENDMEND summaryset;
SUMMARYSET( ) macro module
![Page 189: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/189.jpg)
%%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
PROC APPENDPROC APPEND BASEBASE=&base=&base DATADATA=&setlist=&setlist FORCEFORCE;; RUNRUN;;
PROC DATASETSPROC DATASETS;; DELETEDELETE &setlist: &delsets / &setlist: &delsets / MEMTYPEMEMTYPE = = DATADATA;; QUITQUIT;
%MENDMEND summaryset;
%%LETLET i = % i = %EVALEVAL(&i+1);(&i+1); %%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
PROC APPENDPROC APPEND BASEBASE=&base=&base DATADATA=&setlist=&setlist FORCEFORCE;; RUNRUN;;
PROC DATASETSPROC DATASETS;; DELETEDELETE &setlist: &delsets / &setlist: &delsets / MEMTYPEMEMTYPE = = DATADATA;; QUITQUIT;
%MENDMEND summaryset;
SUMMARYSET( ) macro module
![Page 190: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/190.jpg)
%%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
PROC APPENDPROC APPEND BASEBASE=&base=&base DATADATA=&setlist=&setlist FORCEFORCE;; RUNRUN;;
PROC DATASETSPROC DATASETS;; DELETEDELETE &setlist: &delsets / &setlist: &delsets / MEMTYPEMEMTYPE = = DATADATA;; QUITQUIT;
%MENDMEND summaryset;
%%ENDEND;;
DATA DATA summary_;summary_; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
PROC APPENDPROC APPEND BASEBASE=&base=&base DATADATA=&setlist=&setlist FORCEFORCE;; RUNRUN;;
PROC DATASETSPROC DATASETS;; DELETEDELETE &setlist: &delsets / &setlist: &delsets / MEMTYPEMEMTYPE = = DATADATA;; QUITQUIT;
%MENDMEND summaryset;
SUMMARYSET( ) macro module
![Page 191: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/191.jpg)
DATA DATA &setlist;&setlist; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
PROC APPENDPROC APPEND BASEBASE=&base=&base DATADATA=&setlist=&setlist FORCEFORCE;; RUNRUN;;
PROC DATASETSPROC DATASETS;; DELETEDELETE &setlist: &delsets / &setlist: &delsets / MEMTYPEMEMTYPE = = DATADATA;; QUITQUIT;
%MENDMEND summaryset;
DATA DATA &setlist;&setlist; MERGEMERGE &dsets; &dsets; BYBY &merge_var; &merge_var; class_vars="&class_vars";class_vars="&class_vars"; continuous_vars="&continuous_vars";continuous_vars="&continuous_vars"; RUNRUN;;
PROC APPENDPROC APPEND BASEBASE=&base=&base DATADATA=&setlist=&setlist FORCEFORCE;; RUNRUN;;
PROC DATASETSPROC DATASETS;; DELETEDELETE &setlist: &delsets / &setlist: &delsets / MEMTYPEMEMTYPE = = DATADATA;; QUITQUIT;
%MENDMEND summaryset;
SUMMARYSET( ) macro module
![Page 192: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/192.jpg)
DATA summary_; MERGE &dsets; BY &merge_var; class_vars="&class_vars"; continuous_vars="&continuous_vars"; RUN;
PROC APPENDPROC APPEND BASEBASE=&base=&base DATADATA==&setlist&setlist FORCEFORCE;; RUNRUN;;
PROC DATASETSPROC DATASETS;; DELETEDELETE &setlist: &delsets / &setlist: &delsets / MEMTYPEMEMTYPE = = DATADATA;; QUITQUIT;
%MENDMEND summaryset;
DATA summary_; MERGE &dsets; BY &merge_var; class_vars="&class_vars"; continuous_vars="&continuous_vars"; RUN;
PROC APPENDPROC APPEND BASEBASE=&base=&base DATADATA==&setlist&setlist FORCEFORCE;; RUNRUN;;
PROC DATASETSPROC DATASETS;; DELETEDELETE &setlist: &delsets / &setlist: &delsets / MEMTYPEMEMTYPE = = DATADATA;; QUITQUIT;
%MENDMEND summaryset;
Append the SUMMARY_ Data SetAppend the SUMMARY_ Data Set
![Page 193: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/193.jpg)
DATA summary_; MERGE &dsets; BY &merge_var; class_vars="&class_vars"; continuous_vars="&continuous_vars"; RUN;
PROC APPENDPROC APPEND BASEBASE==&base&base DATADATA=&setlist=&setlist FORCEFORCE;; RUNRUN;;
PROC DATASETSPROC DATASETS;; DELETEDELETE &setlist: &delsets / &setlist: &delsets / MEMTYPEMEMTYPE = = DATADATA;; QUITQUIT;
%MENDMEND summaryset;
DATA summary_; MERGE &dsets; BY &merge_var; class_vars="&class_vars"; continuous_vars="&continuous_vars"; RUN;
PROC APPENDPROC APPEND BASEBASE==&base&base DATADATA=&setlist=&setlist FORCEFORCE;; RUNRUN;;
PROC DATASETSPROC DATASETS;; DELETEDELETE &setlist: &delsets / &setlist: &delsets / MEMTYPEMEMTYPE = = DATADATA;; QUITQUIT;
%MENDMEND summaryset;
To the GLM_SUMMARY Data SetTo the GLM_SUMMARY Data Set
![Page 194: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/194.jpg)
DATA summary_; MERGE &dsets; BY &merge_var; class_vars="&class_vars"; continuous_vars="&continuous_vars"; RUN;
PROC APPEND BASE=&base DATA=&setlist FORCE; RUN;
PROC DATASETSPROC DATASETS;; DELETEDELETE &setlist: &delsets&setlist: &delsets / / MEMTYPEMEMTYPE = = DATADATA;; QUITQUIT;
%MENDMEND summaryset;
DATA summary_; MERGE &dsets; BY &merge_var; class_vars="&class_vars"; continuous_vars="&continuous_vars"; RUN;
PROC APPEND BASE=&base DATA=&setlist FORCE; RUN;
PROC DATASETSPROC DATASETS;; DELETEDELETE &setlist: &delsets&setlist: &delsets / / MEMTYPEMEMTYPE = = DATADATA;; QUITQUIT;
%MENDMEND summaryset;
Remove all Temporary Data SetsRemove all Temporary Data Sets
![Page 195: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/195.jpg)
DATA summary_; MERGE &dsets; BY &merge_var; class_vars="&class_vars"; continuous_vars="&continuous_vars"; RUN;
PROC APPEND BASE=&base DATA=&setlist FORCE; RUN;
PROC DATASETSPROC DATASETS;; DELETEDELETE &setlist: &setlist: &delsets / &delsets / MEMTYPEMEMTYPE = = DATADATA;; QUITQUIT;
%MENDMEND summaryset;
DATA summary_; MERGE &dsets; BY &merge_var; class_vars="&class_vars"; continuous_vars="&continuous_vars"; RUN;
PROC APPEND BASE=&base DATA=&setlist FORCE; RUN;
PROC DATASETSPROC DATASETS;; DELETEDELETE &setlist: &setlist: &delsets / &delsets / MEMTYPEMEMTYPE = = DATADATA;; QUITQUIT;
%MENDMEND summaryset;
New to SAS Version 9.2New to SAS Version 9.2
![Page 196: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/196.jpg)
The CONTENTS Procedure (abbreviated)
Data Set Name WORK.GLM_SUMMARY Observations 1
# Variable Type Len Format Label
1 key_var Char 32 Name of Independent Variable 2 response_var Char 32 Name of Response Variable 3 key_label Char 40 Label of Independent Variable 4 response_label Char 40 Label of Response Variable 5 class_vars Char 200 Adjusted PROC GLM: Class covariates 6 continuous_vars Char 200 Adjusted PROC GLM: Continuous covariates 7 mean Num 8 PROC MEANS: Mean of Independent Variable 8 stddev Num 8 PROC MEANS: Standard Deviation of Independent Variable 9 stderror Num 8 PROC MEANS: Standard Error of Independent Variable10 n Num 8 PROC MEANS: N of Independent Variable11 crude_estimate Num 8 PVALUE6.4 Crude PROC GLM: Parameter Estimate12 adjusted_estimate Num 8 PVALUE6.4 Adjusted PROC GLM: Parameter Estimate13 crude_stderr Num 8 ODDSR8.3 Crude PROC GLM: Standard Error of Estimate14 adjusted_stderr Num 8 ODDSR8.3 Adjusted PROC GLM: Standard Error of Estimate
PopulatePopulate thethe GLM_SUMMARYGLM_SUMMARY DataData SetSet
![Page 197: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/197.jpg)
These four macros perform These four macros perform primary main tasks for creating a primary main tasks for creating a
summary data set.summary data set.
![Page 198: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/198.jpg)
Three secondary main tasks which Three secondary main tasks which support these primary tasks.support these primary tasks.
![Page 199: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/199.jpg)
• Validate the user information passed into Validate the user information passed into the supervisory macrothe supervisory macro
Three secondary main tasks Three secondary main tasks which support these primary which support these primary
main tasks.main tasks.
![Page 200: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/200.jpg)
• Validate the user information passed into Validate the user information passed into the supervisory macrothe supervisory macro
• Identify covariates as either Class or Identify covariates as either Class or Continuous.Continuous.
Three secondary main tasks Three secondary main tasks which support these primary which support these primary
main tasks.main tasks.
![Page 201: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/201.jpg)
• Validate the user information passed into Validate the user information passed into the supervisory macrothe supervisory macro
• Identify covariates as either Class or Identify covariates as either Class or Continuous.Continuous.
• Create an analysis data set.Create an analysis data set.
Three secondary main tasks Three secondary main tasks which support these primary which support these primary
main tasks.main tasks.
![Page 202: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/202.jpg)
VALIDATE( ) Macro ModuleVALIDATE( ) Macro Module
Perform checks on the user supplied parametersPerform checks on the user supplied parameters1. Is the input dataset specified.
2. Does the input dataset exist.
3. Is the response variable specified.
4. Does response variable exist within user supplied dataset.
5. Is the response variable numeric.
6. Is the independent variable of interest specified.
7. Does independent variable exist within user supplied dataset.
8. Is the independent variable numeric.
9. Do all base co-variables exist within user supplied dataset.
10. Are each of the base model co-variables numeric.
11. Is the final output dataset specified.
![Page 203: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/203.jpg)
VALIDATE( ) Macro ModuleVALIDATE( ) Macro Module
Perform checks on the user supplied parametersPerform checks on the user supplied parameters1.1. Is the input dataset specified.Is the input dataset specified.
2.2. Does the input dataset exist.Does the input dataset exist.
3.3. Is the response variable specified.Is the response variable specified.
4.4. Does response variable exist within user supplied dataset.Does response variable exist within user supplied dataset.
5.5. Is the response variable numeric.Is the response variable numeric.
6.6. Is the independent variable of interest specified.Is the independent variable of interest specified.
7.7. Does independent variable exist within user supplied dataset.Does independent variable exist within user supplied dataset.
8.8. Is the independent variable numeric.Is the independent variable numeric.
9.9. Do all base co-variables exist within user supplied dataset. Do all base co-variables exist within user supplied dataset.
10.10. Are each of the base model co-variables numeric.Are each of the base model co-variables numeric.
11.11. Is the final output dataset specified.Is the final output dataset specified.
![Page 204: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/204.jpg)
VALIDATE( ) Macro ModuleVALIDATE( ) Macro Module
%%MACROMACRO validate(__dset = , validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = );
%GLOBAL _echeck ;
%MENDMEND validate;
%%MACROMACRO validate(__dset = , validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = );
%GLOBAL _echeck ;
%MENDMEND validate;
![Page 205: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/205.jpg)
VALIDATE( ) Macro ModuleVALIDATE( ) Macro Module
%%MACROMACRO validate(__dset = , validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %LOCAL _echeck; %GLOBAL _echeck ;
%LETLET echeck=1;
%MENDMEND validate;
%%MACROMACRO validate(__dset = , validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %LOCAL _echeck; %GLOBAL _echeck ;
%LETLET echeck=1;
%MENDMEND validate;
![Page 206: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/206.jpg)
VALIDATE( ) Macro ModuleVALIDATE( ) Macro Module
%validate(data = &dataset ,%validate(data = &dataset , var1 = &response ,var1 = &response , var2 = &independent ,var2 = &independent , covariates = &covariates,covariates = &covariates, outfile = &outfile )outfile = &outfile )
%%IFIF &echeck = 1 &echeck = 1 %THEN %THEN %RETURN%RETURN;;
%validate(data = &dataset ,%validate(data = &dataset , var1 = &response ,var1 = &response , var2 = &independent ,var2 = &independent , covariates = &covariates,covariates = &covariates, outfile = &outfile )outfile = &outfile )
%%IFIF &echeck = 1 &echeck = 1 %THEN %THEN %RETURN%RETURN;;
![Page 207: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/207.jpg)
SPLIT( ) Macro ModuleSPLIT( ) Macro Module
Co-variables to appear in the adjusted PROC LOGISTICCo-variables to appear in the adjusted PROC LOGISTIC
![Page 208: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/208.jpg)
SPLIT( ) Macro ModuleSPLIT( ) Macro Module
No SAS code is generated.No SAS code is generated.
![Page 209: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/209.jpg)
SPLIT( ) Macro ModuleSPLIT( ) Macro Module
No SAS code is generated.No SAS code is generated.
Design a User Define Macro Function.Design a User Define Macro Function.
![Page 210: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/210.jpg)
SPLIT( ) Macro ModuleSPLIT( ) Macro Module
No SAS code is generated.No SAS code is generated.
Design a User Define Macro Function.Design a User Define Macro Function.
Returns a text string.Returns a text string.
![Page 211: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/211.jpg)
SPLIT( ) Macro FunctionSPLIT( ) Macro Function
Co-variables to appear in the adjusted PROC GLMCo-variables to appear in the adjusted PROC GLM
&covariates = @height @age race gender&covariates = @height @age race gender
![Page 212: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/212.jpg)
SPLIT( ) Macro FunctionSPLIT( ) Macro Function
Co-variables to appear in the adjusted PROC GLMCo-variables to appear in the adjusted PROC GLM
&covariates = @height @age &covariates = @height @age race genderrace gender
• Categorical variables: appear in CLASS & MODEL statementCategorical variables: appear in CLASS & MODEL statement
![Page 213: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/213.jpg)
SPLIT( ) Macro FunctionSPLIT( ) Macro Function
Co-variables to appear in the adjusted PROC GLMCo-variables to appear in the adjusted PROC GLM
&covariates = @&covariates = @heightheight @ @ageage race gender race gender
• Categorical variables: appear in CLASS & MODEL statementCategorical variables: appear in CLASS & MODEL statement
• Continuous variables: appear only in the MODEL statement Continuous variables: appear only in the MODEL statement
![Page 214: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/214.jpg)
SPLIT( ) Macro FunctionSPLIT( ) Macro Function
&covariates = @height @age race gender&covariates = @height @age race gender
![Page 215: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/215.jpg)
SPLIT( ) Macro FunctionSPLIT( ) Macro Function
&covariates = @height @age race gender &covariates = @height @age race gender
%LET continuous_vars = %split(vars = &covariates, control = @);%LET continuous_vars = %split(vars = &covariates, control = @);
%LET class_vars = %split(vars = &covariates );%LET class_vars = %split(vars = &covariates );
![Page 216: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/216.jpg)
SPLIT( ) Macro FunctionSPLIT( ) Macro Function
&covariates = @height @age race gender &covariates = @height @age race gender
%LET continuous_vars = height age;%LET continuous_vars = height age;
%LET class_vars = race gender;%LET class_vars = race gender;
![Page 217: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/217.jpg)
%MACRO%MACRO split(vars=, control=); %LOCAL%LOCAL count varlist chars; %IF%IF &vars NE %THEN %DONE %THEN %DO; %IF%IF &control NE %THEN %DONE %THEN %DO; %LET%LET count=1 ; %DO %UNTIL%DO %UNTIL (%QSCAN%QSCAN(&vars,&count)= ) ; %LET%LET var = %QSCAN%QSCAN(&vars,&count); %IF %SUBSTR%IF %SUBSTR(&var,1,1)=&control %THEN%THEN %SYSFUNC%SYSFUNC(COMPRESSCOMPRESS(%QSCAN%QSCAN(&vars,&count),&control)); %LET%LET count = %EVAL%EVAL(&count+1); %END%END ; %END%END;; %ELSE %DO%ELSE %DO; %LET%LET count=1 ; %DO %UNTIL%DO %UNTIL (%QSCAN%QSCAN(&vars,&count)= ) ; %LET%LET var = %QSCAN%QSCAN(&vars,&count); %IF %INDEX%IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %UPCASE%UPCASE(%SUBSTR%SUBSTR(&var,1,1))) NENE 0 %THEN %THEN %QSCAN%QSCAN(&vars,&count) ;(&vars,&count) ; %LET%LET count = %EVAL%EVAL(&count+1); %END%END; %END%END; %END%END;%MEND%MEND split;
%MACRO%MACRO split(vars=, control=); %LOCAL%LOCAL count varlist chars; %IF%IF &vars NE %THEN %DONE %THEN %DO; %IF%IF &control NE %THEN %DONE %THEN %DO; %LET%LET count=1 ; %DO %UNTIL%DO %UNTIL (%QSCAN%QSCAN(&vars,&count)= ) ; %LET%LET var = %QSCAN%QSCAN(&vars,&count); %IF %SUBSTR%IF %SUBSTR(&var,1,1)=&control %THEN%THEN %SYSFUNC%SYSFUNC(COMPRESSCOMPRESS(%QSCAN%QSCAN(&vars,&count),&control)); %LET%LET count = %EVAL%EVAL(&count+1); %END%END ; %END%END;; %ELSE %DO%ELSE %DO; %LET%LET count=1 ; %DO %UNTIL%DO %UNTIL (%QSCAN%QSCAN(&vars,&count)= ) ; %LET%LET var = %QSCAN%QSCAN(&vars,&count); %IF %INDEX%IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %UPCASE%UPCASE(%SUBSTR%SUBSTR(&var,1,1))) NENE 0 %THEN %THEN %QSCAN%QSCAN(&vars,&count) ;(&vars,&count) ; %LET%LET count = %EVAL%EVAL(&count+1); %END%END; %END%END; %END%END;%MEND%MEND split;
![Page 218: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/218.jpg)
%MACRO%MACRO split(vars=, control=); %LOCAL%LOCAL count varlist chars; %IF%IF &vars NE %THEN %DONE %THEN %DO; %IF%IF &control NE %THEN %DONE %THEN %DO; %LET%LET count=1 ; %DO %UNTIL%DO %UNTIL (%QSCAN%QSCAN(&vars,&count)= ) ; %LET%LET var = %QSCAN%QSCAN(&vars,&count); %IF %SUBSTR%IF %SUBSTR(&var,1,1)=&control %THEN%THEN %SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control));%SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)); %LET%LET count = %EVAL%EVAL(&count+1); %END%END ; %END%END;; %ELSE %DO%ELSE %DO; %LET%LET count=1 ; %DO %UNTIL%DO %UNTIL (%QSCAN%QSCAN(&vars,&count)= ) ; %LET%LET var = %QSCAN%QSCAN(&vars,&count); %IF %INDEX%IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %UPCASE%UPCASE(%SUBSTR%SUBSTR(&var,1,1))) NENE 0 %THEN %THEN %QSCAN%QSCAN(&vars,&count) ;(&vars,&count) ; %LET%LET count = %EVAL%EVAL(&count+1); %END%END; %END%END; %END%END;%MEND%MEND split;
%MACRO%MACRO split(vars=, control=); %LOCAL%LOCAL count varlist chars; %IF%IF &vars NE %THEN %DONE %THEN %DO; %IF%IF &control NE %THEN %DONE %THEN %DO; %LET%LET count=1 ; %DO %UNTIL%DO %UNTIL (%QSCAN%QSCAN(&vars,&count)= ) ; %LET%LET var = %QSCAN%QSCAN(&vars,&count); %IF %SUBSTR%IF %SUBSTR(&var,1,1)=&control %THEN%THEN %SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control));%SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)); %LET%LET count = %EVAL%EVAL(&count+1); %END%END ; %END%END;; %ELSE %DO%ELSE %DO; %LET%LET count=1 ; %DO %UNTIL%DO %UNTIL (%QSCAN%QSCAN(&vars,&count)= ) ; %LET%LET var = %QSCAN%QSCAN(&vars,&count); %IF %INDEX%IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %UPCASE%UPCASE(%SUBSTR%SUBSTR(&var,1,1))) NENE 0 %THEN %THEN %QSCAN%QSCAN(&vars,&count) ;(&vars,&count) ; %LET%LET count = %EVAL%EVAL(&count+1); %END%END; %END%END; %END%END;%MEND%MEND split;
![Page 219: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/219.jpg)
%MACRO%MACRO split(vars=, control=); %LOCAL%LOCAL count varlist chars; %IF%IF &vars NE %THEN %DONE %THEN %DO; %IF%IF &control NE %THEN %DONE %THEN %DO; %LET%LET count=1 ; %DO %UNTIL%DO %UNTIL (%QSCAN%QSCAN(&vars,&count)= ) ; %LET%LET var = %QSCAN%QSCAN(&vars,&count); %IF %SUBSTR%IF %SUBSTR(&var,1,1)=&control %THEN%THEN %SYSFUNC%SYSFUNC(COMPRESSCOMPRESS(%QSCAN%QSCAN(&vars,&count),&control)); %LET%LET count = %EVAL%EVAL(&count+1); %END%END ; %END%END;; %ELSE %DO%ELSE %DO; %LET%LET count=1 ; %DO %UNTIL%DO %UNTIL (%QSCAN%QSCAN(&vars,&count)= ) ; %LET%LET var = %QSCAN%QSCAN(&vars,&count); %IF %INDEX%IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %UPCASE%UPCASE(%SUBSTR%SUBSTR(&var,1,1))) NENE 0 %THEN %THEN %QSCAN(&vars,&count) ;%QSCAN(&vars,&count) ; %LET%LET count = %EVAL%EVAL(&count+1); %END%END; %END%END; %END%END;%MEND%MEND split;
%MACRO%MACRO split(vars=, control=); %LOCAL%LOCAL count varlist chars; %IF%IF &vars NE %THEN %DONE %THEN %DO; %IF%IF &control NE %THEN %DONE %THEN %DO; %LET%LET count=1 ; %DO %UNTIL%DO %UNTIL (%QSCAN%QSCAN(&vars,&count)= ) ; %LET%LET var = %QSCAN%QSCAN(&vars,&count); %IF %SUBSTR%IF %SUBSTR(&var,1,1)=&control %THEN%THEN %SYSFUNC%SYSFUNC(COMPRESSCOMPRESS(%QSCAN%QSCAN(&vars,&count),&control)); %LET%LET count = %EVAL%EVAL(&count+1); %END%END ; %END%END;; %ELSE %DO%ELSE %DO; %LET%LET count=1 ; %DO %UNTIL%DO %UNTIL (%QSCAN%QSCAN(&vars,&count)= ) ; %LET%LET var = %QSCAN%QSCAN(&vars,&count); %IF %INDEX%IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %UPCASE%UPCASE(%SUBSTR%SUBSTR(&var,1,1))) NENE 0 %THEN %THEN %QSCAN(&vars,&count) ;%QSCAN(&vars,&count) ; %LET%LET count = %EVAL%EVAL(&count+1); %END%END; %END%END; %END%END;%MEND%MEND split;
![Page 220: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/220.jpg)
ANALYSISSET( ) Macro ModuleANALYSISSET( ) Macro Module
Create an analysis dataset that can be
uniformly processed by all three procedures
![Page 221: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/221.jpg)
ANALYSISSET( ) Macro ModuleANALYSISSET( ) Macro Module
%MACRO makeset(__dset = , __var1 = , __var2 = , __variables = ) ;
DATADATA analysis_setanalysis_set ; SETSET &data (KEEPKEEP = &var1 &var2 &variables); IFIF NMISSNMISS(OFOF _numeric__numeric_)) = 0 ; RUNRUN;
%MEND makeset;
%MACRO makeset(__dset = , __var1 = , __var2 = , __variables = ) ;
DATADATA analysis_setanalysis_set ; SETSET &data (KEEPKEEP = &var1 &var2 &variables); IFIF NMISSNMISS(OFOF _numeric__numeric_)) = 0 ; RUNRUN;
%MEND makeset;
![Page 222: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/222.jpg)
ANALYSISSET( ) Macro ModuleANALYSISSET( ) Macro Module
%MACRO makeset(__dset = , __var1 = , __var2 = , __variables = ) ;
DATADATA analysis_setanalysis_set ; SETSET &data (KEEPKEEP = &var1 &var2 &variables&var1 &var2 &variables); IFIF NMISSNMISS(OFOF _numeric__numeric_)) = 0 ; RUNRUN;
%MEND makeset;
%MACRO makeset(__dset = , __var1 = , __var2 = , __variables = ) ;
DATADATA analysis_setanalysis_set ; SETSET &data (KEEPKEEP = &var1 &var2 &variables&var1 &var2 &variables); IFIF NMISSNMISS(OFOF _numeric__numeric_)) = 0 ; RUNRUN;
%MEND makeset;
![Page 223: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/223.jpg)
ANALYSISSET( ) Macro ModuleANALYSISSET( ) Macro Module
%MACRO makeset(__dset = , __var1 = , __var2 = , __variables = ) ;
DATADATA analysis_setanalysis_set ; SETSET &data (KEEPKEEP = &var1 &var2 &variables&var1 &var2 &variables); IF NMISS(OF _numeric_) = 0 ;IF NMISS(OF _numeric_) = 0 ; RUNRUN;
%MEND makeset;
%MACRO makeset(__dset = , __var1 = , __var2 = , __variables = ) ;
DATADATA analysis_setanalysis_set ; SETSET &data (KEEPKEEP = &var1 &var2 &variables&var1 &var2 &variables); IF NMISS(OF _numeric_) = 0 ;IF NMISS(OF _numeric_) = 0 ; RUNRUN;
%MEND makeset;
![Page 224: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/224.jpg)
ANALYSISSET( ) Macro ModuleANALYSISSET( ) Macro Module
%MACROMACRO analysisset(data = , var1 = , var2 = , variables = ) ;
DATADATA analysis_setanalysis_set ; SETSET &data (KEEPKEEP = &var1 &var2 &variables&var1 &var2 &variables); IF NMISSNMISS((OFOF _numeric__numeric_) = 0 ;) = 0 ; RUNRUN;
%MENDMEND analysisset;
%MACROMACRO analysisset(data = , var1 = , var2 = , variables = ) ;
DATADATA analysis_setanalysis_set ; SETSET &data (KEEPKEEP = &var1 &var2 &variables&var1 &var2 &variables); IF NMISSNMISS((OFOF _numeric__numeric_) = 0 ;) = 0 ; RUNRUN;
%MENDMEND analysisset;
![Page 225: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/225.jpg)
ANALYSISSET( ) Macro ModuleANALYSISSET( ) Macro Module
%MACRO analysisset(data = , var1 = , var2 = , %analysisset(data = mydata , var1 = bmi , var2 = years_on_farm ,var2 = years_on_farm , variables = height age race gender variables = height age race gender ) IF NMISS(OF _numeric_) = 0 ; RUN;
%MEND analysisset;
%MACRO analysisset(data = , var1 = , var2 = , %analysisset(data = mydata , var1 = bmi , var2 = years_on_farm ,var2 = years_on_farm , variables = height age race gender variables = height age race gender ) IF NMISS(OF _numeric_) = 0 ; RUN;
%MEND analysisset;
![Page 226: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/226.jpg)
ANALYSISSET( ) Macro ModuleANALYSISSET( ) Macro Module
The CONTENTS Procedure(abbreviated)
Data Set Name ANALYSIS_SET Observations 5873Member Type DATA Variables 6
Alphabetic List of Variables and Attributes
# Variable Type Len Format Label
4 age Num 8 Age of Participant 5 bmi Num 8 Body Mass Index 6 gender Num 8 _SEX. Gender 2 height Num 8 Height in inches 1 race Num 8 _RACE. Race 3 years_on_farm Num 8 Years lived/worked on farm
![Page 227: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/227.jpg)
We Have Discussed the Coding We Have Discussed the Coding
Of Seven Macro ModulesOf Seven Macro Modules
%MACRO procglm (test = , data = , response = , independent = , class_vars = , continuous_vars = ); ODS LISTING CLOSE; ODS OUTPUT parameterestimates = summary_&test._glm (DROP = dependent probt tvalue RENAME = (Parameter = Key_var Estimate = &test._Estimate stderr = &test._stderr) WHERE =(UPCASE(key_var)=UPCASE("&independent"))) ; PROC GLM DATA=&data NAMELEN=32; %IF (NOT %LENGTH(%SCAN(&class_vars,1))) %THEN CLASS &class_vars ; ; MODEL &response = &continuous_vars &class_vars &independent; QUIT; ODS OUTPUT CLOSE; ODS LISTING;
%MEND procglm;
%MACRO procglm (test = , data = , response = , independent = , class_vars = , continuous_vars = ); ODS LISTING CLOSE; ODS OUTPUT parameterestimates = summary_&test._glm (DROP = dependent probt tvalue RENAME = (Parameter = Key_var Estimate = &test._Estimate stderr = &test._stderr) WHERE =(UPCASE(key_var)=UPCASE("&independent"))) ; PROC GLM DATA=&data NAMELEN=32; %IF (NOT %LENGTH(%SCAN(&class_vars,1))) %THEN CLASS &class_vars ; ; MODEL &response = &continuous_vars &class_vars &independent; QUIT; ODS OUTPUT CLOSE; ODS LISTING;
%MEND procglm;
%MACRO initbase(base=);%MACRO initbase(base=); OPTION NONOTES;OPTION NONOTES; DATA &base;DATA &base; LENGTH key_var response_var $32 LENGTH key_var response_var $32 key_label response_label $40key_label response_label $40 class_vars continuous_vars $200class_vars continuous_vars $200 mean stddev stderror n mean stddev stderror n crude_estimate adjusted_estimate crude_estimate adjusted_estimate crude_stderr adjusted_stderr 8.;crude_stderr adjusted_stderr 8.; LABEL key_var = "Name of Independent Variable"LABEL key_var = "Name of Independent Variable" key_label = "Label of Independent Variable" key_label = "Label of Independent Variable" response_var = "Name of Response Variable"response_var = "Name of Response Variable" response_label = "Label of Response Variable"response_label = "Label of Response Variable" mean = "PROC MEANS: Mean of Independent mean = "PROC MEANS: Mean of Independent Variable"Variable" n = "PROC MEANS: N of Independent Variable"n = "PROC MEANS: N of Independent Variable" stddev = "PROC MEANS: Standard Deviation Variable"stddev = "PROC MEANS: Standard Deviation Variable" stderror = "PROC MEANS: Standard Error IndeVariable"stderror = "PROC MEANS: Standard Error IndeVariable" crude_estimate = "Crude PROC GLM: Parameter Estimate"crude_estimate = "Crude PROC GLM: Parameter Estimate" crude_stderr = "Crude PROC GLM: Standard Error stimate"crude_stderr = "Crude PROC GLM: Standard Error stimate" djusted_estimate = "Adjusted PROC GLM: Parameter Estimate"djusted_estimate = "Adjusted PROC GLM: Parameter Estimate" adjusted_stderr = "Adjusted PROC GLM: Standard ErrEstimate"adjusted_stderr = "Adjusted PROC GLM: Standard ErrEstimate" class_vars = “Adjusted PROC GLM: Class covariates”class_vars = “Adjusted PROC GLM: Class covariates” continuous_vars = “Adjusted PROC GLM: Continuous variates”;continuous_vars = “Adjusted PROC GLM: Continuous variates”; FORMAT crude_estimate adjusted_estimate PVALUE6.4FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3 ;crude_stderr adjusted_stderr ODDSR8.3 ; RUN;RUN; OPTION NOTES;OPTION NOTES; DATA &base;DATA &base; SET &base;SET &base; STOP;STOP; RUN;RUN;%MEND initbase;%MEND initbase;
%MACRO initbase(base=);%MACRO initbase(base=); OPTION NONOTES;OPTION NONOTES; DATA &base;DATA &base; LENGTH key_var response_var $32 LENGTH key_var response_var $32 key_label response_label $40key_label response_label $40 class_vars continuous_vars $200class_vars continuous_vars $200 mean stddev stderror n mean stddev stderror n crude_estimate adjusted_estimate crude_estimate adjusted_estimate crude_stderr adjusted_stderr 8.;crude_stderr adjusted_stderr 8.; LABEL key_var = "Name of Independent Variable"LABEL key_var = "Name of Independent Variable" key_label = "Label of Independent Variable" key_label = "Label of Independent Variable" response_var = "Name of Response Variable"response_var = "Name of Response Variable" response_label = "Label of Response Variable"response_label = "Label of Response Variable" mean = "PROC MEANS: Mean of Independent mean = "PROC MEANS: Mean of Independent Variable"Variable" n = "PROC MEANS: N of Independent Variable"n = "PROC MEANS: N of Independent Variable" stddev = "PROC MEANS: Standard Deviation Variable"stddev = "PROC MEANS: Standard Deviation Variable" stderror = "PROC MEANS: Standard Error IndeVariable"stderror = "PROC MEANS: Standard Error IndeVariable" crude_estimate = "Crude PROC GLM: Parameter Estimate"crude_estimate = "Crude PROC GLM: Parameter Estimate" crude_stderr = "Crude PROC GLM: Standard Error stimate"crude_stderr = "Crude PROC GLM: Standard Error stimate" djusted_estimate = "Adjusted PROC GLM: Parameter Estimate"djusted_estimate = "Adjusted PROC GLM: Parameter Estimate" adjusted_stderr = "Adjusted PROC GLM: Standard ErrEstimate"adjusted_stderr = "Adjusted PROC GLM: Standard ErrEstimate" class_vars = “Adjusted PROC GLM: Class covariates”class_vars = “Adjusted PROC GLM: Class covariates” continuous_vars = “Adjusted PROC GLM: Continuous variates”;continuous_vars = “Adjusted PROC GLM: Continuous variates”; FORMAT crude_estimate adjusted_estimate PVALUE6.4FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3 ;crude_stderr adjusted_stderr ODDSR8.3 ; RUN;RUN; OPTION NOTES;OPTION NOTES; DATA &base;DATA &base; SET &base;SET &base; STOP;STOP; RUN;RUN;%MEND initbase;%MEND initbase;
%MACRO analysisset(data = ,%MACRO analysisset(data = , var1 = ,var1 = , var2 = ,var2 = , variables = ) ;variables = ) ; DATA analysis_set ;DATA analysis_set ; SET &data(KEEP = &var1 &var2 &variables);SET &data(KEEP = &var1 &var2 &variables); IF NMISS(OF _numeric_) = 0 THEN OUTPUT; IF NMISS(OF _numeric_) = 0 THEN OUTPUT; RUN; RUN; %MEND analysisset;%MEND analysisset;
%MACRO analysisset(data = ,%MACRO analysisset(data = , var1 = ,var1 = , var2 = ,var2 = , variables = ) ;variables = ) ; DATA analysis_set ;DATA analysis_set ; SET &data(KEEP = &var1 &var2 &variables);SET &data(KEEP = &var1 &var2 &variables); IF NMISS(OF _numeric_) = 0 THEN OUTPUT; IF NMISS(OF _numeric_) = 0 THEN OUTPUT; RUN; RUN; %MEND analysisset;%MEND analysisset;
%MACRO procmeans(data = ,%MACRO procmeans(data = , var1 = ,var1 = , var2 =);var2 =); ODS LISTING CLOSE; ODS LISTING CLOSE; ODS OUTPUT summary=summary_means ODS OUTPUT summary=summary_means (DROP = &var1._mean &var1._n &var1._stderr (DROP = &var1._mean &var1._n &var1._stderr &var1._stddev&var1._stddev RENAME = (VNAME_&var1 = response_varRENAME = (VNAME_&var1 = response_var LABEL_&var1 = response_labelLABEL_&var1 = response_label VNAME_&var2 = key_varVNAME_&var2 = key_var LABEL_&var2 = key_labelLABEL_&var2 = key_label &var2._mean = mean&var2._mean = mean &var2._n = n&var2._n = n &var2._stderr = stderror&var2._stderr = stderror &var2._stddev = stddev) );&var2._stddev = stddev) ); PROC MEANS DATA= &data mean n stderr std;PROC MEANS DATA= &data mean n stderr std; VAR &var1 &var2;VAR &var1 &var2; RUN;RUN; ODS OUTPUT CLOSE;ODS OUTPUT CLOSE; ODS LISTING;ODS LISTING; %MEND procmeans;%MEND procmeans;
%MACRO procmeans(data = ,%MACRO procmeans(data = , var1 = ,var1 = , var2 =);var2 =); ODS LISTING CLOSE; ODS LISTING CLOSE; ODS OUTPUT summary=summary_means ODS OUTPUT summary=summary_means (DROP = &var1._mean &var1._n &var1._stderr (DROP = &var1._mean &var1._n &var1._stderr &var1._stddev&var1._stddev RENAME = (VNAME_&var1 = response_varRENAME = (VNAME_&var1 = response_var LABEL_&var1 = response_labelLABEL_&var1 = response_label VNAME_&var2 = key_varVNAME_&var2 = key_var LABEL_&var2 = key_labelLABEL_&var2 = key_label &var2._mean = mean&var2._mean = mean &var2._n = n&var2._n = n &var2._stderr = stderror&var2._stderr = stderror &var2._stddev = stddev) );&var2._stddev = stddev) ); PROC MEANS DATA= &data mean n stderr std;PROC MEANS DATA= &data mean n stderr std; VAR &var1 &var2;VAR &var1 &var2; RUN;RUN; ODS OUTPUT CLOSE;ODS OUTPUT CLOSE; ODS LISTING;ODS LISTING; %MEND procmeans;%MEND procmeans;
%MACRO split(vars=, control=);%MACRO split(vars=, control=); %LOCAL count varlist chars; %LOCAL count varlist chars; %IF &vars NE %THEN %DO; %IF &vars NE %THEN %DO; %IF &control NE %THEN %DO; %IF &control NE %THEN %DO; %LET count=1 ; %LET count=1 ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %LET var = %QSCAN(&vars,&count); %LET var = %QSCAN(&vars,&count); %IF %SUBSTR(&var,1,1)=&control %THEN %IF %SUBSTR(&var,1,1)=&control %THEN %SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)) ;%SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)) ; %LET count = %EVAL(&count+1); %LET count = %EVAL(&count+1); %END ; %END ; %END; %END; %ELSE %DO; %ELSE %DO; %LET count=1 ; %LET count=1 ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %LET var = %QSCAN(&vars,&count); %LET var = %QSCAN(&vars,&count); %IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %UPCASE(%SUBSTR(&var,1,1))) NE 0 %THEN %UPCASE(%SUBSTR(&var,1,1))) NE 0 %THEN %QSCAN(&vars,&count) ; %QSCAN(&vars,&count) ; %LET count = %EVAL(&count+1); %LET count = %EVAL(&count+1); %END ; %END ; %END; %END; %END; %END; %MEND split; %MEND split;
%MACRO split(vars=, control=);%MACRO split(vars=, control=); %LOCAL count varlist chars; %LOCAL count varlist chars; %IF &vars NE %THEN %DO; %IF &vars NE %THEN %DO; %IF &control NE %THEN %DO; %IF &control NE %THEN %DO; %LET count=1 ; %LET count=1 ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %LET var = %QSCAN(&vars,&count); %LET var = %QSCAN(&vars,&count); %IF %SUBSTR(&var,1,1)=&control %THEN %IF %SUBSTR(&var,1,1)=&control %THEN %SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)) ;%SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)) ; %LET count = %EVAL(&count+1); %LET count = %EVAL(&count+1); %END ; %END ; %END; %END; %ELSE %DO; %ELSE %DO; %LET count=1 ; %LET count=1 ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %LET var = %QSCAN(&vars,&count); %LET var = %QSCAN(&vars,&count); %IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %UPCASE(%SUBSTR(&var,1,1))) NE 0 %THEN %UPCASE(%SUBSTR(&var,1,1))) NE 0 %THEN %QSCAN(&vars,&count) ; %QSCAN(&vars,&count) ; %LET count = %EVAL(&count+1); %LET count = %EVAL(&count+1); %END ; %END ; %END; %END; %END; %END; %MEND split; %MEND split;
%MACRO validate(__dset = ,%MACRO validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %GLOBAL _echeck ; %GLOBAL _echeck ; %LET _echeck=0 ;%LET _echeck=0 ; %LET _indflag=0 ;%LET _indflag=0 ; %* check that DATA exists *;%* check that DATA exists *; %IF &__dset = %STR( ) %THEN %DO;%IF &__dset = %STR( ) %THEN %DO; %let ex=NO ;%let ex=NO ; %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %do ;%else %do ; %if %sysfunc(exist(&__dset)) %then %let ex=YES;%if %sysfunc(exist(&__dset)) %then %let ex=YES; %else %let ex=NO ;%else %let ex=NO ; %end ;%end ; %if &ex=NO %then %do ;%if &ex=NO %then %do ; %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end;%end; %* check input parameters *; %* check input parameters *; %let dsnid = %sysfunc(open(&__dset)) ;%let dsnid = %sysfunc(open(&__dset)) ; %* check that response variable exists *; %* check that response variable exists *; %if &__var1 = %str( ) %then %do;%if &__var1 = %str( ) %then %do; %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do;%else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do; %let _echeck=1 ;%let _echeck=1 ; %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET &__dset Execution terminating.;&__dset Execution terminating.; %end; %end; %* check that response variable is numeric *;%* check that response variable is numeric *;
%MACRO validate(__dset = ,%MACRO validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %GLOBAL _echeck ; %GLOBAL _echeck ; %LET _echeck=0 ;%LET _echeck=0 ; %LET _indflag=0 ;%LET _indflag=0 ; %* check that DATA exists *;%* check that DATA exists *; %IF &__dset = %STR( ) %THEN %DO;%IF &__dset = %STR( ) %THEN %DO; %let ex=NO ;%let ex=NO ; %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %do ;%else %do ; %if %sysfunc(exist(&__dset)) %then %let ex=YES;%if %sysfunc(exist(&__dset)) %then %let ex=YES; %else %let ex=NO ;%else %let ex=NO ; %end ;%end ; %if &ex=NO %then %do ;%if &ex=NO %then %do ; %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end;%end; %* check input parameters *; %* check input parameters *; %let dsnid = %sysfunc(open(&__dset)) ;%let dsnid = %sysfunc(open(&__dset)) ; %* check that response variable exists *; %* check that response variable exists *; %if &__var1 = %str( ) %then %do;%if &__var1 = %str( ) %then %do; %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do;%else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do; %let _echeck=1 ;%let _echeck=1 ; %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET &__dset Execution terminating.;&__dset Execution terminating.; %end; %end; %* check that response variable is numeric *;%* check that response variable is numeric *;
%MACRO validate(__dset = ,%MACRO validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %GLOBAL _echeck ; %GLOBAL _echeck ; %LET _echeck=0 ;%LET _echeck=0 ; %LET _indflag=0 ;%LET _indflag=0 ; %* check that DATA exists *;%* check that DATA exists *; %IF &__dset = %STR( ) %THEN %DO;%IF &__dset = %STR( ) %THEN %DO; %let ex=NO ;%let ex=NO ; %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %do ;%else %do ; %if %sysfunc(exist(&__dset)) %then %let ex=YES;%if %sysfunc(exist(&__dset)) %then %let ex=YES; %else %let ex=NO ;%else %let ex=NO ; %end ;%end ; %if &ex=NO %then %do ;%if &ex=NO %then %do ; %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end;%end; %* check input parameters *; %* check input parameters *; %let dsnid = %sysfunc(open(&__dset)) ;%let dsnid = %sysfunc(open(&__dset)) ; %* check that response variable exists *; %* check that response variable exists *; %if &__var1 = %str( ) %then %do;%if &__var1 = %str( ) %then %do; %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do;%else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do; %let _echeck=1 ;%let _echeck=1 ; %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET &__dset Execution terminating.;&__dset Execution terminating.; %end; %end; %* check that response variable is numeric *;%* check that response variable is numeric *;
%MACRO validate(__dset = ,%MACRO validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %GLOBAL _echeck ; %GLOBAL _echeck ; %LET _echeck=0 ;%LET _echeck=0 ; %LET _indflag=0 ;%LET _indflag=0 ; %* check that DATA exists *;%* check that DATA exists *; %IF &__dset = %STR( ) %THEN %DO;%IF &__dset = %STR( ) %THEN %DO; %let ex=NO ;%let ex=NO ; %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %do ;%else %do ; %if %sysfunc(exist(&__dset)) %then %let ex=YES;%if %sysfunc(exist(&__dset)) %then %let ex=YES; %else %let ex=NO ;%else %let ex=NO ; %end ;%end ; %if &ex=NO %then %do ;%if &ex=NO %then %do ; %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end;%end; %* check input parameters *; %* check input parameters *; %let dsnid = %sysfunc(open(&__dset)) ;%let dsnid = %sysfunc(open(&__dset)) ; %* check that response variable exists *; %* check that response variable exists *; %if &__var1 = %str( ) %then %do;%if &__var1 = %str( ) %then %do; %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do;%else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do; %let _echeck=1 ;%let _echeck=1 ; %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET &__dset Execution terminating.;&__dset Execution terminating.; %end; %end; %* check that response variable is numeric *;%* check that response variable is numeric *;
%MACRO summaryset(merge_var = , base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCAL i datasets; PROC SQL NOPRINT ; SELECT TRIM(LIBNAME) || "." || MEMNAME INTO :datasets SEPARATED BY " " FROM DICTIONARY.TABLES WHERE LIBNAME = "WORK" AND MEMNAME LIKE UPCASE("&setlist%"); QUIT ; %LET i= 1; %DO %UNTIL (NOT %LENGTH(%SCAN(&datasets,&i,%STR( )))); PROC SORT DATA=%SCAN(&datasets,&i,%STR( )); BY &merge_var; RUN; %LET i = %EVAL(&i+1); %END; DATA summary_; MERGE &datasets; BY &merge_var; class_vars="&class_vars"; continuous_vars="&continuous_vars"; RUN; PROC APPEND BASE=&base DATA=&setlist FORCE; RUN; PROC DATASETS; DELETE &setlist: &delsets / MEMTYPE = DATA; QUIT; %MEND summaryset;
%MACRO summaryset(merge_var = , base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCAL i datasets; PROC SQL NOPRINT ; SELECT TRIM(LIBNAME) || "." || MEMNAME INTO :datasets SEPARATED BY " " FROM DICTIONARY.TABLES WHERE LIBNAME = "WORK" AND MEMNAME LIKE UPCASE("&setlist%"); QUIT ; %LET i= 1; %DO %UNTIL (NOT %LENGTH(%SCAN(&datasets,&i,%STR( )))); PROC SORT DATA=%SCAN(&datasets,&i,%STR( )); BY &merge_var; RUN; %LET i = %EVAL(&i+1); %END; DATA summary_; MERGE &datasets; BY &merge_var; class_vars="&class_vars"; continuous_vars="&continuous_vars"; RUN; PROC APPEND BASE=&base DATA=&setlist FORCE; RUN; PROC DATASETS; DELETE &setlist: &delsets / MEMTYPE = DATA; QUIT; %MEND summaryset;
![Page 228: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/228.jpg)
VALIDATE( )VALIDATE( )
%MACRO procglm (test = , data = , response = , independent = , class_vars = , continuous_vars = ); ODS LISTING CLOSE; ODS OUTPUT parameterestimates = summary_&test._glm (DROP = dependent probt tvalue RENAME = (Parameter = Key_var Estimate = &test._Estimate stderr = &test._stderr) WHERE =(UPCASE(key_var)=UPCASE("&independent"))) ; PROC GLM DATA=&data NAMELEN=32; %IF (NOT %LENGTH(%SCAN(&class_vars,1))) %THEN CLASS &class_vars ; ; MODEL &response = &continuous_vars &class_vars &independent; QUIT; ODS OUTPUT CLOSE; ODS LISTING;
%MEND procglm;
%MACRO procglm (test = , data = , response = , independent = , class_vars = , continuous_vars = ); ODS LISTING CLOSE; ODS OUTPUT parameterestimates = summary_&test._glm (DROP = dependent probt tvalue RENAME = (Parameter = Key_var Estimate = &test._Estimate stderr = &test._stderr) WHERE =(UPCASE(key_var)=UPCASE("&independent"))) ; PROC GLM DATA=&data NAMELEN=32; %IF (NOT %LENGTH(%SCAN(&class_vars,1))) %THEN CLASS &class_vars ; ; MODEL &response = &continuous_vars &class_vars &independent; QUIT; ODS OUTPUT CLOSE; ODS LISTING;
%MEND procglm;
%MACRO initbase(base=);%MACRO initbase(base=); OPTION NONOTES;OPTION NONOTES; DATA &base;DATA &base; LENGTH key_var response_var $32 LENGTH key_var response_var $32 key_label response_label $40key_label response_label $40 class_vars continuous_vars $200class_vars continuous_vars $200 mean stddev stderror n mean stddev stderror n crude_estimate adjusted_estimate crude_estimate adjusted_estimate crude_stderr adjusted_stderr 8.;crude_stderr adjusted_stderr 8.; LABEL key_var = "Name of Independent Variable"LABEL key_var = "Name of Independent Variable" key_label = "Label of Independent Variable" key_label = "Label of Independent Variable" response_var = "Name of Response Variable"response_var = "Name of Response Variable" response_label = "Label of Response Variable"response_label = "Label of Response Variable" mean = "PROC MEANS: Mean of Independent mean = "PROC MEANS: Mean of Independent Variable"Variable" n = "PROC MEANS: N of Independent Variable"n = "PROC MEANS: N of Independent Variable" stddev = "PROC MEANS: Standard Deviation Variable"stddev = "PROC MEANS: Standard Deviation Variable" stderror = "PROC MEANS: Standard Error IndeVariable"stderror = "PROC MEANS: Standard Error IndeVariable" crude_estimate = "Crude PROC GLM: Parameter Estimate"crude_estimate = "Crude PROC GLM: Parameter Estimate" crude_stderr = "Crude PROC GLM: Standard Error stimate"crude_stderr = "Crude PROC GLM: Standard Error stimate" djusted_estimate = "Adjusted PROC GLM: Parameter Estimate"djusted_estimate = "Adjusted PROC GLM: Parameter Estimate" adjusted_stderr = "Adjusted PROC GLM: Standard ErrEstimate"adjusted_stderr = "Adjusted PROC GLM: Standard ErrEstimate" class_vars = “Adjusted PROC GLM: Class covariates”class_vars = “Adjusted PROC GLM: Class covariates” continuous_vars = “Adjusted PROC GLM: Continuous variates”;continuous_vars = “Adjusted PROC GLM: Continuous variates”; FORMAT crude_estimate adjusted_estimate PVALUE6.4FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3 ;crude_stderr adjusted_stderr ODDSR8.3 ; RUN;RUN; OPTION NOTES;OPTION NOTES; DATA &base;DATA &base; SET &base;SET &base; STOP;STOP; RUN;RUN;%MEND initbase;%MEND initbase;
%MACRO initbase(base=);%MACRO initbase(base=); OPTION NONOTES;OPTION NONOTES; DATA &base;DATA &base; LENGTH key_var response_var $32 LENGTH key_var response_var $32 key_label response_label $40key_label response_label $40 class_vars continuous_vars $200class_vars continuous_vars $200 mean stddev stderror n mean stddev stderror n crude_estimate adjusted_estimate crude_estimate adjusted_estimate crude_stderr adjusted_stderr 8.;crude_stderr adjusted_stderr 8.; LABEL key_var = "Name of Independent Variable"LABEL key_var = "Name of Independent Variable" key_label = "Label of Independent Variable" key_label = "Label of Independent Variable" response_var = "Name of Response Variable"response_var = "Name of Response Variable" response_label = "Label of Response Variable"response_label = "Label of Response Variable" mean = "PROC MEANS: Mean of Independent mean = "PROC MEANS: Mean of Independent Variable"Variable" n = "PROC MEANS: N of Independent Variable"n = "PROC MEANS: N of Independent Variable" stddev = "PROC MEANS: Standard Deviation Variable"stddev = "PROC MEANS: Standard Deviation Variable" stderror = "PROC MEANS: Standard Error IndeVariable"stderror = "PROC MEANS: Standard Error IndeVariable" crude_estimate = "Crude PROC GLM: Parameter Estimate"crude_estimate = "Crude PROC GLM: Parameter Estimate" crude_stderr = "Crude PROC GLM: Standard Error stimate"crude_stderr = "Crude PROC GLM: Standard Error stimate" djusted_estimate = "Adjusted PROC GLM: Parameter Estimate"djusted_estimate = "Adjusted PROC GLM: Parameter Estimate" adjusted_stderr = "Adjusted PROC GLM: Standard ErrEstimate"adjusted_stderr = "Adjusted PROC GLM: Standard ErrEstimate" class_vars = “Adjusted PROC GLM: Class covariates”class_vars = “Adjusted PROC GLM: Class covariates” continuous_vars = “Adjusted PROC GLM: Continuous variates”;continuous_vars = “Adjusted PROC GLM: Continuous variates”; FORMAT crude_estimate adjusted_estimate PVALUE6.4FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3 ;crude_stderr adjusted_stderr ODDSR8.3 ; RUN;RUN; OPTION NOTES;OPTION NOTES; DATA &base;DATA &base; SET &base;SET &base; STOP;STOP; RUN;RUN;%MEND initbase;%MEND initbase;
%MACRO analysisset(data = ,%MACRO analysisset(data = , var1 = ,var1 = , var2 = ,var2 = , variables = ) ;variables = ) ; DATA analysis_set ;DATA analysis_set ; SET &data(KEEP = &var1 &var2 &variables);SET &data(KEEP = &var1 &var2 &variables); IF NMISS(OF _numeric_) = 0 THEN OUTPUT; IF NMISS(OF _numeric_) = 0 THEN OUTPUT; RUN; RUN; %MEND analysisset;%MEND analysisset;
%MACRO analysisset(data = ,%MACRO analysisset(data = , var1 = ,var1 = , var2 = ,var2 = , variables = ) ;variables = ) ; DATA analysis_set ;DATA analysis_set ; SET &data(KEEP = &var1 &var2 &variables);SET &data(KEEP = &var1 &var2 &variables); IF NMISS(OF _numeric_) = 0 THEN OUTPUT; IF NMISS(OF _numeric_) = 0 THEN OUTPUT; RUN; RUN; %MEND analysisset;%MEND analysisset;
%MACRO procmeans(data = ,%MACRO procmeans(data = , var1 = ,var1 = , var2 =);var2 =); ODS LISTING CLOSE; ODS LISTING CLOSE; ODS OUTPUT summary=summary_means ODS OUTPUT summary=summary_means (DROP = &var1._mean &var1._n &var1._stderr (DROP = &var1._mean &var1._n &var1._stderr &var1._stddev&var1._stddev RENAME = (VNAME_&var1 = response_varRENAME = (VNAME_&var1 = response_var LABEL_&var1 = response_labelLABEL_&var1 = response_label VNAME_&var2 = key_varVNAME_&var2 = key_var LABEL_&var2 = key_labelLABEL_&var2 = key_label &var2._mean = mean&var2._mean = mean &var2._n = n&var2._n = n &var2._stderr = stderror&var2._stderr = stderror &var2._stddev = stddev) );&var2._stddev = stddev) ); PROC MEANS DATA= &data mean n stderr std;PROC MEANS DATA= &data mean n stderr std; VAR &var1 &var2;VAR &var1 &var2; RUN;RUN; ODS OUTPUT CLOSE;ODS OUTPUT CLOSE; ODS LISTING;ODS LISTING; %MEND procmeans;%MEND procmeans;
%MACRO procmeans(data = ,%MACRO procmeans(data = , var1 = ,var1 = , var2 =);var2 =); ODS LISTING CLOSE; ODS LISTING CLOSE; ODS OUTPUT summary=summary_means ODS OUTPUT summary=summary_means (DROP = &var1._mean &var1._n &var1._stderr (DROP = &var1._mean &var1._n &var1._stderr &var1._stddev&var1._stddev RENAME = (VNAME_&var1 = response_varRENAME = (VNAME_&var1 = response_var LABEL_&var1 = response_labelLABEL_&var1 = response_label VNAME_&var2 = key_varVNAME_&var2 = key_var LABEL_&var2 = key_labelLABEL_&var2 = key_label &var2._mean = mean&var2._mean = mean &var2._n = n&var2._n = n &var2._stderr = stderror&var2._stderr = stderror &var2._stddev = stddev) );&var2._stddev = stddev) ); PROC MEANS DATA= &data mean n stderr std;PROC MEANS DATA= &data mean n stderr std; VAR &var1 &var2;VAR &var1 &var2; RUN;RUN; ODS OUTPUT CLOSE;ODS OUTPUT CLOSE; ODS LISTING;ODS LISTING; %MEND procmeans;%MEND procmeans;
%MACRO split(vars=, control=);%MACRO split(vars=, control=); %LOCAL count varlist chars; %LOCAL count varlist chars; %IF &vars NE %THEN %DO; %IF &vars NE %THEN %DO; %IF &control NE %THEN %DO; %IF &control NE %THEN %DO; %LET count=1 ; %LET count=1 ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %LET var = %QSCAN(&vars,&count); %LET var = %QSCAN(&vars,&count); %IF %SUBSTR(&var,1,1)=&control %THEN %IF %SUBSTR(&var,1,1)=&control %THEN %SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)) ;%SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)) ; %LET count = %EVAL(&count+1); %LET count = %EVAL(&count+1); %END ; %END ; %END; %END; %ELSE %DO; %ELSE %DO; %LET count=1 ; %LET count=1 ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %LET var = %QSCAN(&vars,&count); %LET var = %QSCAN(&vars,&count); %IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %UPCASE(%SUBSTR(&var,1,1))) NE 0 %THEN %UPCASE(%SUBSTR(&var,1,1))) NE 0 %THEN %QSCAN(&vars,&count) ; %QSCAN(&vars,&count) ; %LET count = %EVAL(&count+1); %LET count = %EVAL(&count+1); %END ; %END ; %END; %END; %END; %END; %MEND split; %MEND split;
%MACRO split(vars=, control=);%MACRO split(vars=, control=); %LOCAL count varlist chars; %LOCAL count varlist chars; %IF &vars NE %THEN %DO; %IF &vars NE %THEN %DO; %IF &control NE %THEN %DO; %IF &control NE %THEN %DO; %LET count=1 ; %LET count=1 ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %LET var = %QSCAN(&vars,&count); %LET var = %QSCAN(&vars,&count); %IF %SUBSTR(&var,1,1)=&control %THEN %IF %SUBSTR(&var,1,1)=&control %THEN %SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)) ;%SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)) ; %LET count = %EVAL(&count+1); %LET count = %EVAL(&count+1); %END ; %END ; %END; %END; %ELSE %DO; %ELSE %DO; %LET count=1 ; %LET count=1 ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %LET var = %QSCAN(&vars,&count); %LET var = %QSCAN(&vars,&count); %IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %UPCASE(%SUBSTR(&var,1,1))) NE 0 %THEN %UPCASE(%SUBSTR(&var,1,1))) NE 0 %THEN %QSCAN(&vars,&count) ; %QSCAN(&vars,&count) ; %LET count = %EVAL(&count+1); %LET count = %EVAL(&count+1); %END ; %END ; %END; %END; %END; %END; %MEND split; %MEND split;
%MACRO validate(__dset = ,%MACRO validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %GLOBAL _echeck ; %GLOBAL _echeck ; %LET _echeck=0 ;%LET _echeck=0 ; %LET _indflag=0 ;%LET _indflag=0 ; %* check that DATA exists *;%* check that DATA exists *; %IF &__dset = %STR( ) %THEN %DO;%IF &__dset = %STR( ) %THEN %DO; %let ex=NO ;%let ex=NO ; %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %do ;%else %do ; %if %sysfunc(exist(&__dset)) %then %let ex=YES;%if %sysfunc(exist(&__dset)) %then %let ex=YES; %else %let ex=NO ;%else %let ex=NO ; %end ;%end ; %if &ex=NO %then %do ;%if &ex=NO %then %do ; %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end;%end; %* check input parameters *; %* check input parameters *; %let dsnid = %sysfunc(open(&__dset)) ;%let dsnid = %sysfunc(open(&__dset)) ; %* check that response variable exists *; %* check that response variable exists *; %if &__var1 = %str( ) %then %do;%if &__var1 = %str( ) %then %do; %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do;%else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do; %let _echeck=1 ;%let _echeck=1 ; %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET &__dset Execution terminating.;&__dset Execution terminating.; %end; %end; %* check that response variable is numeric *;%* check that response variable is numeric *;
%MACRO validate(__dset = ,%MACRO validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %GLOBAL _echeck ; %GLOBAL _echeck ; %LET _echeck=0 ;%LET _echeck=0 ; %LET _indflag=0 ;%LET _indflag=0 ; %* check that DATA exists *;%* check that DATA exists *; %IF &__dset = %STR( ) %THEN %DO;%IF &__dset = %STR( ) %THEN %DO; %let ex=NO ;%let ex=NO ; %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %do ;%else %do ; %if %sysfunc(exist(&__dset)) %then %let ex=YES;%if %sysfunc(exist(&__dset)) %then %let ex=YES; %else %let ex=NO ;%else %let ex=NO ; %end ;%end ; %if &ex=NO %then %do ;%if &ex=NO %then %do ; %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end;%end; %* check input parameters *; %* check input parameters *; %let dsnid = %sysfunc(open(&__dset)) ;%let dsnid = %sysfunc(open(&__dset)) ; %* check that response variable exists *; %* check that response variable exists *; %if &__var1 = %str( ) %then %do;%if &__var1 = %str( ) %then %do; %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do;%else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do; %let _echeck=1 ;%let _echeck=1 ; %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET &__dset Execution terminating.;&__dset Execution terminating.; %end; %end; %* check that response variable is numeric *;%* check that response variable is numeric *;
%MACRO validate(__dset = ,%MACRO validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %GLOBAL _echeck ; %GLOBAL _echeck ; %LET _echeck=0 ;%LET _echeck=0 ; %LET _indflag=0 ;%LET _indflag=0 ; %* check that DATA exists *;%* check that DATA exists *; %IF &__dset = %STR( ) %THEN %DO;%IF &__dset = %STR( ) %THEN %DO; %let ex=NO ;%let ex=NO ; %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %do ;%else %do ; %if %sysfunc(exist(&__dset)) %then %let ex=YES;%if %sysfunc(exist(&__dset)) %then %let ex=YES; %else %let ex=NO ;%else %let ex=NO ; %end ;%end ; %if &ex=NO %then %do ;%if &ex=NO %then %do ; %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end;%end; %* check input parameters *; %* check input parameters *; %let dsnid = %sysfunc(open(&__dset)) ;%let dsnid = %sysfunc(open(&__dset)) ; %* check that response variable exists *; %* check that response variable exists *; %if &__var1 = %str( ) %then %do;%if &__var1 = %str( ) %then %do; %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do;%else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do; %let _echeck=1 ;%let _echeck=1 ; %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET &__dset Execution terminating.;&__dset Execution terminating.; %end; %end; %* check that response variable is numeric *;%* check that response variable is numeric *;
%MACRO validate(__dset = ,%MACRO validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %GLOBAL _echeck ; %GLOBAL _echeck ; %LET _echeck=0 ;%LET _echeck=0 ; %LET _indflag=0 ;%LET _indflag=0 ; %* check that DATA exists *;%* check that DATA exists *; %IF &__dset = %STR( ) %THEN %DO;%IF &__dset = %STR( ) %THEN %DO; %let ex=NO ;%let ex=NO ; %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %do ;%else %do ; %if %sysfunc(exist(&__dset)) %then %let ex=YES;%if %sysfunc(exist(&__dset)) %then %let ex=YES; %else %let ex=NO ;%else %let ex=NO ; %end ;%end ; %if &ex=NO %then %do ;%if &ex=NO %then %do ; %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end;%end; %* check input parameters *; %* check input parameters *; %let dsnid = %sysfunc(open(&__dset)) ;%let dsnid = %sysfunc(open(&__dset)) ; %* check that response variable exists *; %* check that response variable exists *; %if &__var1 = %str( ) %then %do;%if &__var1 = %str( ) %then %do; %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do;%else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do; %let _echeck=1 ;%let _echeck=1 ; %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET &__dset Execution terminating.;&__dset Execution terminating.; %end; %end; %* check that response variable is numeric *;%* check that response variable is numeric *;
%MACRO summaryset(merge_var = , base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCAL i datasets; PROC SQL NOPRINT ; SELECT TRIM(LIBNAME) || "." || MEMNAME INTO :datasets SEPARATED BY " " FROM DICTIONARY.TABLES WHERE LIBNAME = "WORK" AND MEMNAME LIKE UPCASE("&setlist%"); QUIT ; %LET i= 1; %DO %UNTIL (NOT %LENGTH(%SCAN(&datasets,&i,%STR( )))); PROC SORT DATA=%SCAN(&datasets,&i,%STR( )); BY &merge_var; RUN; %LET i = %EVAL(&i+1); %END; DATA summary_; MERGE &datasets; BY &merge_var; class_vars="&class_vars"; continuous_vars="&continuous_vars"; RUN; PROC APPEND BASE=&base DATA=&setlist FORCE; RUN; PROC DATASETS; DELETE &setlist: &delsets / MEMTYPE = DATA; QUIT; %MEND summaryset;
%MACRO summaryset(merge_var = , base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCAL i datasets; PROC SQL NOPRINT ; SELECT TRIM(LIBNAME) || "." || MEMNAME INTO :datasets SEPARATED BY " " FROM DICTIONARY.TABLES WHERE LIBNAME = "WORK" AND MEMNAME LIKE UPCASE("&setlist%"); QUIT ; %LET i= 1; %DO %UNTIL (NOT %LENGTH(%SCAN(&datasets,&i,%STR( )))); PROC SORT DATA=%SCAN(&datasets,&i,%STR( )); BY &merge_var; RUN; %LET i = %EVAL(&i+1); %END; DATA summary_; MERGE &datasets; BY &merge_var; class_vars="&class_vars"; continuous_vars="&continuous_vars"; RUN; PROC APPEND BASE=&base DATA=&setlist FORCE; RUN; PROC DATASETS; DELETE &setlist: &delsets / MEMTYPE = DATA; QUIT; %MEND summaryset;
![Page 229: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/229.jpg)
INITBASE( )INITBASE( )
%MACRO procglm (test = , data = , response = , independent = , class_vars = , continuous_vars = ); ODS LISTING CLOSE; ODS OUTPUT parameterestimates = summary_&test._glm (DROP = dependent probt tvalue RENAME = (Parameter = Key_var Estimate = &test._Estimate stderr = &test._stderr) WHERE =(UPCASE(key_var)=UPCASE("&independent"))) ; PROC GLM DATA=&data NAMELEN=32; %IF (NOT %LENGTH(%SCAN(&class_vars,1))) %THEN CLASS &class_vars ; ; MODEL &response = &continuous_vars &class_vars &independent; QUIT; ODS OUTPUT CLOSE; ODS LISTING;
%MEND procglm;
%MACRO procglm (test = , data = , response = , independent = , class_vars = , continuous_vars = ); ODS LISTING CLOSE; ODS OUTPUT parameterestimates = summary_&test._glm (DROP = dependent probt tvalue RENAME = (Parameter = Key_var Estimate = &test._Estimate stderr = &test._stderr) WHERE =(UPCASE(key_var)=UPCASE("&independent"))) ; PROC GLM DATA=&data NAMELEN=32; %IF (NOT %LENGTH(%SCAN(&class_vars,1))) %THEN CLASS &class_vars ; ; MODEL &response = &continuous_vars &class_vars &independent; QUIT; ODS OUTPUT CLOSE; ODS LISTING;
%MEND procglm;
%MACRO initbase(base=);%MACRO initbase(base=); OPTION NONOTES;OPTION NONOTES; DATA &base;DATA &base; LENGTH key_var response_var $32 LENGTH key_var response_var $32 key_label response_label $40key_label response_label $40 class_vars continuous_vars $200class_vars continuous_vars $200 mean stddev stderror n mean stddev stderror n crude_estimate adjusted_estimate crude_estimate adjusted_estimate crude_stderr adjusted_stderr 8.;crude_stderr adjusted_stderr 8.; LABEL key_var = "Name of Independent Variable"LABEL key_var = "Name of Independent Variable" key_label = "Label of Independent Variable" key_label = "Label of Independent Variable" response_var = "Name of Response Variable"response_var = "Name of Response Variable" response_label = "Label of Response Variable"response_label = "Label of Response Variable" mean = "PROC MEANS: Mean of Independent mean = "PROC MEANS: Mean of Independent Variable"Variable" n = "PROC MEANS: N of Independent Variable"n = "PROC MEANS: N of Independent Variable" stddev = "PROC MEANS: Standard Deviation Variable"stddev = "PROC MEANS: Standard Deviation Variable" stderror = "PROC MEANS: Standard Error IndeVariable"stderror = "PROC MEANS: Standard Error IndeVariable" crude_estimate = "Crude PROC GLM: Parameter Estimate"crude_estimate = "Crude PROC GLM: Parameter Estimate" crude_stderr = "Crude PROC GLM: Standard Error stimate"crude_stderr = "Crude PROC GLM: Standard Error stimate" djusted_estimate = "Adjusted PROC GLM: Parameter Estimate"djusted_estimate = "Adjusted PROC GLM: Parameter Estimate" adjusted_stderr = "Adjusted PROC GLM: Standard ErrEstimate"adjusted_stderr = "Adjusted PROC GLM: Standard ErrEstimate" class_vars = “Adjusted PROC GLM: Class covariates”class_vars = “Adjusted PROC GLM: Class covariates” continuous_vars = “Adjusted PROC GLM: Continuous variates”;continuous_vars = “Adjusted PROC GLM: Continuous variates”; FORMAT crude_estimate adjusted_estimate PVALUE6.4FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3 ;crude_stderr adjusted_stderr ODDSR8.3 ; RUN;RUN; OPTION NOTES;OPTION NOTES; DATA &base;DATA &base; SET &base;SET &base; STOP;STOP; RUN;RUN;%MEND initbase;%MEND initbase;
%MACRO initbase(base=);%MACRO initbase(base=); OPTION NONOTES;OPTION NONOTES; DATA &base;DATA &base; LENGTH key_var response_var $32 LENGTH key_var response_var $32 key_label response_label $40key_label response_label $40 class_vars continuous_vars $200class_vars continuous_vars $200 mean stddev stderror n mean stddev stderror n crude_estimate adjusted_estimate crude_estimate adjusted_estimate crude_stderr adjusted_stderr 8.;crude_stderr adjusted_stderr 8.; LABEL key_var = "Name of Independent Variable"LABEL key_var = "Name of Independent Variable" key_label = "Label of Independent Variable" key_label = "Label of Independent Variable" response_var = "Name of Response Variable"response_var = "Name of Response Variable" response_label = "Label of Response Variable"response_label = "Label of Response Variable" mean = "PROC MEANS: Mean of Independent mean = "PROC MEANS: Mean of Independent Variable"Variable" n = "PROC MEANS: N of Independent Variable"n = "PROC MEANS: N of Independent Variable" stddev = "PROC MEANS: Standard Deviation Variable"stddev = "PROC MEANS: Standard Deviation Variable" stderror = "PROC MEANS: Standard Error IndeVariable"stderror = "PROC MEANS: Standard Error IndeVariable" crude_estimate = "Crude PROC GLM: Parameter Estimate"crude_estimate = "Crude PROC GLM: Parameter Estimate" crude_stderr = "Crude PROC GLM: Standard Error stimate"crude_stderr = "Crude PROC GLM: Standard Error stimate" djusted_estimate = "Adjusted PROC GLM: Parameter Estimate"djusted_estimate = "Adjusted PROC GLM: Parameter Estimate" adjusted_stderr = "Adjusted PROC GLM: Standard ErrEstimate"adjusted_stderr = "Adjusted PROC GLM: Standard ErrEstimate" class_vars = “Adjusted PROC GLM: Class covariates”class_vars = “Adjusted PROC GLM: Class covariates” continuous_vars = “Adjusted PROC GLM: Continuous variates”;continuous_vars = “Adjusted PROC GLM: Continuous variates”; FORMAT crude_estimate adjusted_estimate PVALUE6.4FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3 ;crude_stderr adjusted_stderr ODDSR8.3 ; RUN;RUN; OPTION NOTES;OPTION NOTES; DATA &base;DATA &base; SET &base;SET &base; STOP;STOP; RUN;RUN;%MEND initbase;%MEND initbase;
%MACRO analysisset(data = ,%MACRO analysisset(data = , var1 = ,var1 = , var2 = ,var2 = , variables = ) ;variables = ) ; DATA analysis_set ;DATA analysis_set ; SET &data(KEEP = &var1 &var2 &variables);SET &data(KEEP = &var1 &var2 &variables); IF NMISS(OF _numeric_) = 0 THEN OUTPUT; IF NMISS(OF _numeric_) = 0 THEN OUTPUT; RUN; RUN; %MEND analysisset;%MEND analysisset;
%MACRO analysisset(data = ,%MACRO analysisset(data = , var1 = ,var1 = , var2 = ,var2 = , variables = ) ;variables = ) ; DATA analysis_set ;DATA analysis_set ; SET &data(KEEP = &var1 &var2 &variables);SET &data(KEEP = &var1 &var2 &variables); IF NMISS(OF _numeric_) = 0 THEN OUTPUT; IF NMISS(OF _numeric_) = 0 THEN OUTPUT; RUN; RUN; %MEND analysisset;%MEND analysisset;
%MACRO procmeans(data = ,%MACRO procmeans(data = , var1 = ,var1 = , var2 =);var2 =); ODS LISTING CLOSE; ODS LISTING CLOSE; ODS OUTPUT summary=summary_means ODS OUTPUT summary=summary_means (DROP = &var1._mean &var1._n &var1._stderr (DROP = &var1._mean &var1._n &var1._stderr &var1._stddev&var1._stddev RENAME = (VNAME_&var1 = response_varRENAME = (VNAME_&var1 = response_var LABEL_&var1 = response_labelLABEL_&var1 = response_label VNAME_&var2 = key_varVNAME_&var2 = key_var LABEL_&var2 = key_labelLABEL_&var2 = key_label &var2._mean = mean&var2._mean = mean &var2._n = n&var2._n = n &var2._stderr = stderror&var2._stderr = stderror &var2._stddev = stddev) );&var2._stddev = stddev) ); PROC MEANS DATA= &data mean n stderr std;PROC MEANS DATA= &data mean n stderr std; VAR &var1 &var2;VAR &var1 &var2; RUN;RUN; ODS OUTPUT CLOSE;ODS OUTPUT CLOSE; ODS LISTING;ODS LISTING; %MEND procmeans;%MEND procmeans;
%MACRO procmeans(data = ,%MACRO procmeans(data = , var1 = ,var1 = , var2 =);var2 =); ODS LISTING CLOSE; ODS LISTING CLOSE; ODS OUTPUT summary=summary_means ODS OUTPUT summary=summary_means (DROP = &var1._mean &var1._n &var1._stderr (DROP = &var1._mean &var1._n &var1._stderr &var1._stddev&var1._stddev RENAME = (VNAME_&var1 = response_varRENAME = (VNAME_&var1 = response_var LABEL_&var1 = response_labelLABEL_&var1 = response_label VNAME_&var2 = key_varVNAME_&var2 = key_var LABEL_&var2 = key_labelLABEL_&var2 = key_label &var2._mean = mean&var2._mean = mean &var2._n = n&var2._n = n &var2._stderr = stderror&var2._stderr = stderror &var2._stddev = stddev) );&var2._stddev = stddev) ); PROC MEANS DATA= &data mean n stderr std;PROC MEANS DATA= &data mean n stderr std; VAR &var1 &var2;VAR &var1 &var2; RUN;RUN; ODS OUTPUT CLOSE;ODS OUTPUT CLOSE; ODS LISTING;ODS LISTING; %MEND procmeans;%MEND procmeans;
%MACRO split(vars=, control=);%MACRO split(vars=, control=); %LOCAL count varlist chars; %LOCAL count varlist chars; %IF &vars NE %THEN %DO; %IF &vars NE %THEN %DO; %IF &control NE %THEN %DO; %IF &control NE %THEN %DO; %LET count=1 ; %LET count=1 ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %LET var = %QSCAN(&vars,&count); %LET var = %QSCAN(&vars,&count); %IF %SUBSTR(&var,1,1)=&control %THEN %IF %SUBSTR(&var,1,1)=&control %THEN %SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)) ;%SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)) ; %LET count = %EVAL(&count+1); %LET count = %EVAL(&count+1); %END ; %END ; %END; %END; %ELSE %DO; %ELSE %DO; %LET count=1 ; %LET count=1 ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %LET var = %QSCAN(&vars,&count); %LET var = %QSCAN(&vars,&count); %IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %UPCASE(%SUBSTR(&var,1,1))) NE 0 %THEN %UPCASE(%SUBSTR(&var,1,1))) NE 0 %THEN %QSCAN(&vars,&count) ; %QSCAN(&vars,&count) ; %LET count = %EVAL(&count+1); %LET count = %EVAL(&count+1); %END ; %END ; %END; %END; %END; %END; %MEND split; %MEND split;
%MACRO split(vars=, control=);%MACRO split(vars=, control=); %LOCAL count varlist chars; %LOCAL count varlist chars; %IF &vars NE %THEN %DO; %IF &vars NE %THEN %DO; %IF &control NE %THEN %DO; %IF &control NE %THEN %DO; %LET count=1 ; %LET count=1 ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %LET var = %QSCAN(&vars,&count); %LET var = %QSCAN(&vars,&count); %IF %SUBSTR(&var,1,1)=&control %THEN %IF %SUBSTR(&var,1,1)=&control %THEN %SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)) ;%SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)) ; %LET count = %EVAL(&count+1); %LET count = %EVAL(&count+1); %END ; %END ; %END; %END; %ELSE %DO; %ELSE %DO; %LET count=1 ; %LET count=1 ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %LET var = %QSCAN(&vars,&count); %LET var = %QSCAN(&vars,&count); %IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %UPCASE(%SUBSTR(&var,1,1))) NE 0 %THEN %UPCASE(%SUBSTR(&var,1,1))) NE 0 %THEN %QSCAN(&vars,&count) ; %QSCAN(&vars,&count) ; %LET count = %EVAL(&count+1); %LET count = %EVAL(&count+1); %END ; %END ; %END; %END; %END; %END; %MEND split; %MEND split;
%MACRO validate(__dset = ,%MACRO validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %GLOBAL _echeck ; %GLOBAL _echeck ; %LET _echeck=0 ;%LET _echeck=0 ; %LET _indflag=0 ;%LET _indflag=0 ; %* check that DATA exists *;%* check that DATA exists *; %IF &__dset = %STR( ) %THEN %DO;%IF &__dset = %STR( ) %THEN %DO; %let ex=NO ;%let ex=NO ; %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %do ;%else %do ; %if %sysfunc(exist(&__dset)) %then %let ex=YES;%if %sysfunc(exist(&__dset)) %then %let ex=YES; %else %let ex=NO ;%else %let ex=NO ; %end ;%end ; %if &ex=NO %then %do ;%if &ex=NO %then %do ; %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end;%end; %* check input parameters *; %* check input parameters *; %let dsnid = %sysfunc(open(&__dset)) ;%let dsnid = %sysfunc(open(&__dset)) ; %* check that response variable exists *; %* check that response variable exists *; %if &__var1 = %str( ) %then %do;%if &__var1 = %str( ) %then %do; %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do;%else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do; %let _echeck=1 ;%let _echeck=1 ; %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET &__dset Execution terminating.;&__dset Execution terminating.; %end; %end; %* check that response variable is numeric *;%* check that response variable is numeric *;
%MACRO validate(__dset = ,%MACRO validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %GLOBAL _echeck ; %GLOBAL _echeck ; %LET _echeck=0 ;%LET _echeck=0 ; %LET _indflag=0 ;%LET _indflag=0 ; %* check that DATA exists *;%* check that DATA exists *; %IF &__dset = %STR( ) %THEN %DO;%IF &__dset = %STR( ) %THEN %DO; %let ex=NO ;%let ex=NO ; %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %do ;%else %do ; %if %sysfunc(exist(&__dset)) %then %let ex=YES;%if %sysfunc(exist(&__dset)) %then %let ex=YES; %else %let ex=NO ;%else %let ex=NO ; %end ;%end ; %if &ex=NO %then %do ;%if &ex=NO %then %do ; %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end;%end; %* check input parameters *; %* check input parameters *; %let dsnid = %sysfunc(open(&__dset)) ;%let dsnid = %sysfunc(open(&__dset)) ; %* check that response variable exists *; %* check that response variable exists *; %if &__var1 = %str( ) %then %do;%if &__var1 = %str( ) %then %do; %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do;%else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do; %let _echeck=1 ;%let _echeck=1 ; %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET &__dset Execution terminating.;&__dset Execution terminating.; %end; %end; %* check that response variable is numeric *;%* check that response variable is numeric *;
%MACRO validate(__dset = ,%MACRO validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %GLOBAL _echeck ; %GLOBAL _echeck ; %LET _echeck=0 ;%LET _echeck=0 ; %LET _indflag=0 ;%LET _indflag=0 ; %* check that DATA exists *;%* check that DATA exists *; %IF &__dset = %STR( ) %THEN %DO;%IF &__dset = %STR( ) %THEN %DO; %let ex=NO ;%let ex=NO ; %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %do ;%else %do ; %if %sysfunc(exist(&__dset)) %then %let ex=YES;%if %sysfunc(exist(&__dset)) %then %let ex=YES; %else %let ex=NO ;%else %let ex=NO ; %end ;%end ; %if &ex=NO %then %do ;%if &ex=NO %then %do ; %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end;%end; %* check input parameters *; %* check input parameters *; %let dsnid = %sysfunc(open(&__dset)) ;%let dsnid = %sysfunc(open(&__dset)) ; %* check that response variable exists *; %* check that response variable exists *; %if &__var1 = %str( ) %then %do;%if &__var1 = %str( ) %then %do; %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do;%else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do; %let _echeck=1 ;%let _echeck=1 ; %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET &__dset Execution terminating.;&__dset Execution terminating.; %end; %end; %* check that response variable is numeric *;%* check that response variable is numeric *;
%MACRO validate(__dset = ,%MACRO validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %GLOBAL _echeck ; %GLOBAL _echeck ; %LET _echeck=0 ;%LET _echeck=0 ; %LET _indflag=0 ;%LET _indflag=0 ; %* check that DATA exists *;%* check that DATA exists *; %IF &__dset = %STR( ) %THEN %DO;%IF &__dset = %STR( ) %THEN %DO; %let ex=NO ;%let ex=NO ; %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %do ;%else %do ; %if %sysfunc(exist(&__dset)) %then %let ex=YES;%if %sysfunc(exist(&__dset)) %then %let ex=YES; %else %let ex=NO ;%else %let ex=NO ; %end ;%end ; %if &ex=NO %then %do ;%if &ex=NO %then %do ; %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end;%end; %* check input parameters *; %* check input parameters *; %let dsnid = %sysfunc(open(&__dset)) ;%let dsnid = %sysfunc(open(&__dset)) ; %* check that response variable exists *; %* check that response variable exists *; %if &__var1 = %str( ) %then %do;%if &__var1 = %str( ) %then %do; %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do;%else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do; %let _echeck=1 ;%let _echeck=1 ; %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET &__dset Execution terminating.;&__dset Execution terminating.; %end; %end; %* check that response variable is numeric *;%* check that response variable is numeric *;
%MACRO summaryset(merge_var = , base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCAL i datasets; PROC SQL NOPRINT ; SELECT TRIM(LIBNAME) || "." || MEMNAME INTO :datasets SEPARATED BY " " FROM DICTIONARY.TABLES WHERE LIBNAME = "WORK" AND MEMNAME LIKE UPCASE("&setlist%"); QUIT ; %LET i= 1; %DO %UNTIL (NOT %LENGTH(%SCAN(&datasets,&i,%STR( )))); PROC SORT DATA=%SCAN(&datasets,&i,%STR( )); BY &merge_var; RUN; %LET i = %EVAL(&i+1); %END; DATA summary_; MERGE &datasets; BY &merge_var; class_vars="&class_vars"; continuous_vars="&continuous_vars"; RUN; PROC APPEND BASE=&base DATA=&setlist FORCE; RUN; PROC DATASETS; DELETE &setlist: &delsets / MEMTYPE = DATA; QUIT; %MEND summaryset;
%MACRO summaryset(merge_var = , base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCAL i datasets; PROC SQL NOPRINT ; SELECT TRIM(LIBNAME) || "." || MEMNAME INTO :datasets SEPARATED BY " " FROM DICTIONARY.TABLES WHERE LIBNAME = "WORK" AND MEMNAME LIKE UPCASE("&setlist%"); QUIT ; %LET i= 1; %DO %UNTIL (NOT %LENGTH(%SCAN(&datasets,&i,%STR( )))); PROC SORT DATA=%SCAN(&datasets,&i,%STR( )); BY &merge_var; RUN; %LET i = %EVAL(&i+1); %END; DATA summary_; MERGE &datasets; BY &merge_var; class_vars="&class_vars"; continuous_vars="&continuous_vars"; RUN; PROC APPEND BASE=&base DATA=&setlist FORCE; RUN; PROC DATASETS; DELETE &setlist: &delsets / MEMTYPE = DATA; QUIT; %MEND summaryset;
![Page 230: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/230.jpg)
SPLIT( )SPLIT( )
%MACRO procglm (test = , data = , response = , independent = , class_vars = , continuous_vars = ); ODS LISTING CLOSE; ODS OUTPUT parameterestimates = summary_&test._glm (DROP = dependent probt tvalue RENAME = (Parameter = Key_var Estimate = &test._Estimate stderr = &test._stderr) WHERE =(UPCASE(key_var)=UPCASE("&independent"))) ; PROC GLM DATA=&data NAMELEN=32; %IF (NOT %LENGTH(%SCAN(&class_vars,1))) %THEN CLASS &class_vars ; ; MODEL &response = &continuous_vars &class_vars &independent; QUIT; ODS OUTPUT CLOSE; ODS LISTING;
%MEND procglm;
%MACRO procglm (test = , data = , response = , independent = , class_vars = , continuous_vars = ); ODS LISTING CLOSE; ODS OUTPUT parameterestimates = summary_&test._glm (DROP = dependent probt tvalue RENAME = (Parameter = Key_var Estimate = &test._Estimate stderr = &test._stderr) WHERE =(UPCASE(key_var)=UPCASE("&independent"))) ; PROC GLM DATA=&data NAMELEN=32; %IF (NOT %LENGTH(%SCAN(&class_vars,1))) %THEN CLASS &class_vars ; ; MODEL &response = &continuous_vars &class_vars &independent; QUIT; ODS OUTPUT CLOSE; ODS LISTING;
%MEND procglm;
%MACRO initbase(base=);%MACRO initbase(base=); OPTION NONOTES;OPTION NONOTES; DATA &base;DATA &base; LENGTH key_var response_var $32 LENGTH key_var response_var $32 key_label response_label $40key_label response_label $40 class_vars continuous_vars $200class_vars continuous_vars $200 mean stddev stderror n mean stddev stderror n crude_estimate adjusted_estimate crude_estimate adjusted_estimate crude_stderr adjusted_stderr 8.;crude_stderr adjusted_stderr 8.; LABEL key_var = "Name of Independent Variable"LABEL key_var = "Name of Independent Variable" key_label = "Label of Independent Variable" key_label = "Label of Independent Variable" response_var = "Name of Response Variable"response_var = "Name of Response Variable" response_label = "Label of Response Variable"response_label = "Label of Response Variable" mean = "PROC MEANS: Mean of Independent mean = "PROC MEANS: Mean of Independent Variable"Variable" n = "PROC MEANS: N of Independent Variable"n = "PROC MEANS: N of Independent Variable" stddev = "PROC MEANS: Standard Deviation Variable"stddev = "PROC MEANS: Standard Deviation Variable" stderror = "PROC MEANS: Standard Error IndeVariable"stderror = "PROC MEANS: Standard Error IndeVariable" crude_estimate = "Crude PROC GLM: Parameter Estimate"crude_estimate = "Crude PROC GLM: Parameter Estimate" crude_stderr = "Crude PROC GLM: Standard Error stimate"crude_stderr = "Crude PROC GLM: Standard Error stimate" djusted_estimate = "Adjusted PROC GLM: Parameter Estimate"djusted_estimate = "Adjusted PROC GLM: Parameter Estimate" adjusted_stderr = "Adjusted PROC GLM: Standard ErrEstimate"adjusted_stderr = "Adjusted PROC GLM: Standard ErrEstimate" class_vars = “Adjusted PROC GLM: Class covariates”class_vars = “Adjusted PROC GLM: Class covariates” continuous_vars = “Adjusted PROC GLM: Continuous variates”;continuous_vars = “Adjusted PROC GLM: Continuous variates”; FORMAT crude_estimate adjusted_estimate PVALUE6.4FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3 ;crude_stderr adjusted_stderr ODDSR8.3 ; RUN;RUN; OPTION NOTES;OPTION NOTES; DATA &base;DATA &base; SET &base;SET &base; STOP;STOP; RUN;RUN;%MEND initbase;%MEND initbase;
%MACRO initbase(base=);%MACRO initbase(base=); OPTION NONOTES;OPTION NONOTES; DATA &base;DATA &base; LENGTH key_var response_var $32 LENGTH key_var response_var $32 key_label response_label $40key_label response_label $40 class_vars continuous_vars $200class_vars continuous_vars $200 mean stddev stderror n mean stddev stderror n crude_estimate adjusted_estimate crude_estimate adjusted_estimate crude_stderr adjusted_stderr 8.;crude_stderr adjusted_stderr 8.; LABEL key_var = "Name of Independent Variable"LABEL key_var = "Name of Independent Variable" key_label = "Label of Independent Variable" key_label = "Label of Independent Variable" response_var = "Name of Response Variable"response_var = "Name of Response Variable" response_label = "Label of Response Variable"response_label = "Label of Response Variable" mean = "PROC MEANS: Mean of Independent mean = "PROC MEANS: Mean of Independent Variable"Variable" n = "PROC MEANS: N of Independent Variable"n = "PROC MEANS: N of Independent Variable" stddev = "PROC MEANS: Standard Deviation Variable"stddev = "PROC MEANS: Standard Deviation Variable" stderror = "PROC MEANS: Standard Error IndeVariable"stderror = "PROC MEANS: Standard Error IndeVariable" crude_estimate = "Crude PROC GLM: Parameter Estimate"crude_estimate = "Crude PROC GLM: Parameter Estimate" crude_stderr = "Crude PROC GLM: Standard Error stimate"crude_stderr = "Crude PROC GLM: Standard Error stimate" djusted_estimate = "Adjusted PROC GLM: Parameter Estimate"djusted_estimate = "Adjusted PROC GLM: Parameter Estimate" adjusted_stderr = "Adjusted PROC GLM: Standard ErrEstimate"adjusted_stderr = "Adjusted PROC GLM: Standard ErrEstimate" class_vars = “Adjusted PROC GLM: Class covariates”class_vars = “Adjusted PROC GLM: Class covariates” continuous_vars = “Adjusted PROC GLM: Continuous variates”;continuous_vars = “Adjusted PROC GLM: Continuous variates”; FORMAT crude_estimate adjusted_estimate PVALUE6.4FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3 ;crude_stderr adjusted_stderr ODDSR8.3 ; RUN;RUN; OPTION NOTES;OPTION NOTES; DATA &base;DATA &base; SET &base;SET &base; STOP;STOP; RUN;RUN;%MEND initbase;%MEND initbase;
%MACRO analysisset(data = ,%MACRO analysisset(data = , var1 = ,var1 = , var2 = ,var2 = , variables = ) ;variables = ) ; DATA analysis_set ;DATA analysis_set ; SET &data(KEEP = &var1 &var2 &variables);SET &data(KEEP = &var1 &var2 &variables); IF NMISS(OF _numeric_) = 0 THEN OUTPUT; IF NMISS(OF _numeric_) = 0 THEN OUTPUT; RUN; RUN; %MEND analysisset;%MEND analysisset;
%MACRO analysisset(data = ,%MACRO analysisset(data = , var1 = ,var1 = , var2 = ,var2 = , variables = ) ;variables = ) ; DATA analysis_set ;DATA analysis_set ; SET &data(KEEP = &var1 &var2 &variables);SET &data(KEEP = &var1 &var2 &variables); IF NMISS(OF _numeric_) = 0 THEN OUTPUT; IF NMISS(OF _numeric_) = 0 THEN OUTPUT; RUN; RUN; %MEND analysisset;%MEND analysisset;
%MACRO procmeans(data = ,%MACRO procmeans(data = , var1 = ,var1 = , var2 =);var2 =); ODS LISTING CLOSE; ODS LISTING CLOSE; ODS OUTPUT summary=summary_means ODS OUTPUT summary=summary_means (DROP = &var1._mean &var1._n &var1._stderr (DROP = &var1._mean &var1._n &var1._stderr &var1._stddev&var1._stddev RENAME = (VNAME_&var1 = response_varRENAME = (VNAME_&var1 = response_var LABEL_&var1 = response_labelLABEL_&var1 = response_label VNAME_&var2 = key_varVNAME_&var2 = key_var LABEL_&var2 = key_labelLABEL_&var2 = key_label &var2._mean = mean&var2._mean = mean &var2._n = n&var2._n = n &var2._stderr = stderror&var2._stderr = stderror &var2._stddev = stddev) );&var2._stddev = stddev) ); PROC MEANS DATA= &data mean n stderr std;PROC MEANS DATA= &data mean n stderr std; VAR &var1 &var2;VAR &var1 &var2; RUN;RUN; ODS OUTPUT CLOSE;ODS OUTPUT CLOSE; ODS LISTING;ODS LISTING; %MEND procmeans;%MEND procmeans;
%MACRO procmeans(data = ,%MACRO procmeans(data = , var1 = ,var1 = , var2 =);var2 =); ODS LISTING CLOSE; ODS LISTING CLOSE; ODS OUTPUT summary=summary_means ODS OUTPUT summary=summary_means (DROP = &var1._mean &var1._n &var1._stderr (DROP = &var1._mean &var1._n &var1._stderr &var1._stddev&var1._stddev RENAME = (VNAME_&var1 = response_varRENAME = (VNAME_&var1 = response_var LABEL_&var1 = response_labelLABEL_&var1 = response_label VNAME_&var2 = key_varVNAME_&var2 = key_var LABEL_&var2 = key_labelLABEL_&var2 = key_label &var2._mean = mean&var2._mean = mean &var2._n = n&var2._n = n &var2._stderr = stderror&var2._stderr = stderror &var2._stddev = stddev) );&var2._stddev = stddev) ); PROC MEANS DATA= &data mean n stderr std;PROC MEANS DATA= &data mean n stderr std; VAR &var1 &var2;VAR &var1 &var2; RUN;RUN; ODS OUTPUT CLOSE;ODS OUTPUT CLOSE; ODS LISTING;ODS LISTING; %MEND procmeans;%MEND procmeans;
%MACRO split(vars=, control=);%MACRO split(vars=, control=); %LOCAL count varlist chars; %LOCAL count varlist chars; %IF &vars NE %THEN %DO; %IF &vars NE %THEN %DO; %IF &control NE %THEN %DO; %IF &control NE %THEN %DO; %LET count=1 ; %LET count=1 ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %LET var = %QSCAN(&vars,&count); %LET var = %QSCAN(&vars,&count); %IF %SUBSTR(&var,1,1)=&control %THEN %IF %SUBSTR(&var,1,1)=&control %THEN %SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)) ;%SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)) ; %LET count = %EVAL(&count+1); %LET count = %EVAL(&count+1); %END ; %END ; %END; %END; %ELSE %DO; %ELSE %DO; %LET count=1 ; %LET count=1 ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %LET var = %QSCAN(&vars,&count); %LET var = %QSCAN(&vars,&count); %IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %UPCASE(%SUBSTR(&var,1,1))) NE 0 %THEN %UPCASE(%SUBSTR(&var,1,1))) NE 0 %THEN %QSCAN(&vars,&count) ; %QSCAN(&vars,&count) ; %LET count = %EVAL(&count+1); %LET count = %EVAL(&count+1); %END ; %END ; %END; %END; %END; %END; %MEND split; %MEND split;
%MACRO split(vars=, control=);%MACRO split(vars=, control=); %LOCAL count varlist chars; %LOCAL count varlist chars; %IF &vars NE %THEN %DO; %IF &vars NE %THEN %DO; %IF &control NE %THEN %DO; %IF &control NE %THEN %DO; %LET count=1 ; %LET count=1 ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %LET var = %QSCAN(&vars,&count); %LET var = %QSCAN(&vars,&count); %IF %SUBSTR(&var,1,1)=&control %THEN %IF %SUBSTR(&var,1,1)=&control %THEN %SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)) ;%SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)) ; %LET count = %EVAL(&count+1); %LET count = %EVAL(&count+1); %END ; %END ; %END; %END; %ELSE %DO; %ELSE %DO; %LET count=1 ; %LET count=1 ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %LET var = %QSCAN(&vars,&count); %LET var = %QSCAN(&vars,&count); %IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %UPCASE(%SUBSTR(&var,1,1))) NE 0 %THEN %UPCASE(%SUBSTR(&var,1,1))) NE 0 %THEN %QSCAN(&vars,&count) ; %QSCAN(&vars,&count) ; %LET count = %EVAL(&count+1); %LET count = %EVAL(&count+1); %END ; %END ; %END; %END; %END; %END; %MEND split; %MEND split;
%MACRO validate(__dset = ,%MACRO validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %GLOBAL _echeck ; %GLOBAL _echeck ; %LET _echeck=0 ;%LET _echeck=0 ; %LET _indflag=0 ;%LET _indflag=0 ; %* check that DATA exists *;%* check that DATA exists *; %IF &__dset = %STR( ) %THEN %DO;%IF &__dset = %STR( ) %THEN %DO; %let ex=NO ;%let ex=NO ; %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %do ;%else %do ; %if %sysfunc(exist(&__dset)) %then %let ex=YES;%if %sysfunc(exist(&__dset)) %then %let ex=YES; %else %let ex=NO ;%else %let ex=NO ; %end ;%end ; %if &ex=NO %then %do ;%if &ex=NO %then %do ; %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end;%end; %* check input parameters *; %* check input parameters *; %let dsnid = %sysfunc(open(&__dset)) ;%let dsnid = %sysfunc(open(&__dset)) ; %* check that response variable exists *; %* check that response variable exists *; %if &__var1 = %str( ) %then %do;%if &__var1 = %str( ) %then %do; %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do;%else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do; %let _echeck=1 ;%let _echeck=1 ; %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET &__dset Execution terminating.;&__dset Execution terminating.; %end; %end; %* check that response variable is numeric *;%* check that response variable is numeric *;
%MACRO validate(__dset = ,%MACRO validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %GLOBAL _echeck ; %GLOBAL _echeck ; %LET _echeck=0 ;%LET _echeck=0 ; %LET _indflag=0 ;%LET _indflag=0 ; %* check that DATA exists *;%* check that DATA exists *; %IF &__dset = %STR( ) %THEN %DO;%IF &__dset = %STR( ) %THEN %DO; %let ex=NO ;%let ex=NO ; %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %do ;%else %do ; %if %sysfunc(exist(&__dset)) %then %let ex=YES;%if %sysfunc(exist(&__dset)) %then %let ex=YES; %else %let ex=NO ;%else %let ex=NO ; %end ;%end ; %if &ex=NO %then %do ;%if &ex=NO %then %do ; %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end;%end; %* check input parameters *; %* check input parameters *; %let dsnid = %sysfunc(open(&__dset)) ;%let dsnid = %sysfunc(open(&__dset)) ; %* check that response variable exists *; %* check that response variable exists *; %if &__var1 = %str( ) %then %do;%if &__var1 = %str( ) %then %do; %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do;%else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do; %let _echeck=1 ;%let _echeck=1 ; %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET &__dset Execution terminating.;&__dset Execution terminating.; %end; %end; %* check that response variable is numeric *;%* check that response variable is numeric *;
%MACRO validate(__dset = ,%MACRO validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %GLOBAL _echeck ; %GLOBAL _echeck ; %LET _echeck=0 ;%LET _echeck=0 ; %LET _indflag=0 ;%LET _indflag=0 ; %* check that DATA exists *;%* check that DATA exists *; %IF &__dset = %STR( ) %THEN %DO;%IF &__dset = %STR( ) %THEN %DO; %let ex=NO ;%let ex=NO ; %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %do ;%else %do ; %if %sysfunc(exist(&__dset)) %then %let ex=YES;%if %sysfunc(exist(&__dset)) %then %let ex=YES; %else %let ex=NO ;%else %let ex=NO ; %end ;%end ; %if &ex=NO %then %do ;%if &ex=NO %then %do ; %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end;%end; %* check input parameters *; %* check input parameters *; %let dsnid = %sysfunc(open(&__dset)) ;%let dsnid = %sysfunc(open(&__dset)) ; %* check that response variable exists *; %* check that response variable exists *; %if &__var1 = %str( ) %then %do;%if &__var1 = %str( ) %then %do; %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do;%else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do; %let _echeck=1 ;%let _echeck=1 ; %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET &__dset Execution terminating.;&__dset Execution terminating.; %end; %end; %* check that response variable is numeric *;%* check that response variable is numeric *;
%MACRO validate(__dset = ,%MACRO validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %GLOBAL _echeck ; %GLOBAL _echeck ; %LET _echeck=0 ;%LET _echeck=0 ; %LET _indflag=0 ;%LET _indflag=0 ; %* check that DATA exists *;%* check that DATA exists *; %IF &__dset = %STR( ) %THEN %DO;%IF &__dset = %STR( ) %THEN %DO; %let ex=NO ;%let ex=NO ; %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %do ;%else %do ; %if %sysfunc(exist(&__dset)) %then %let ex=YES;%if %sysfunc(exist(&__dset)) %then %let ex=YES; %else %let ex=NO ;%else %let ex=NO ; %end ;%end ; %if &ex=NO %then %do ;%if &ex=NO %then %do ; %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end;%end; %* check input parameters *; %* check input parameters *; %let dsnid = %sysfunc(open(&__dset)) ;%let dsnid = %sysfunc(open(&__dset)) ; %* check that response variable exists *; %* check that response variable exists *; %if &__var1 = %str( ) %then %do;%if &__var1 = %str( ) %then %do; %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do;%else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do; %let _echeck=1 ;%let _echeck=1 ; %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET &__dset Execution terminating.;&__dset Execution terminating.; %end; %end; %* check that response variable is numeric *;%* check that response variable is numeric *;
%MACRO summaryset(merge_var = , base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCAL i datasets; PROC SQL NOPRINT ; SELECT TRIM(LIBNAME) || "." || MEMNAME INTO :datasets SEPARATED BY " " FROM DICTIONARY.TABLES WHERE LIBNAME = "WORK" AND MEMNAME LIKE UPCASE("&setlist%"); QUIT ; %LET i= 1; %DO %UNTIL (NOT %LENGTH(%SCAN(&datasets,&i,%STR( )))); PROC SORT DATA=%SCAN(&datasets,&i,%STR( )); BY &merge_var; RUN; %LET i = %EVAL(&i+1); %END; DATA summary_; MERGE &datasets; BY &merge_var; class_vars="&class_vars"; continuous_vars="&continuous_vars"; RUN; PROC APPEND BASE=&base DATA=&setlist FORCE; RUN; PROC DATASETS; DELETE &setlist: &delsets / MEMTYPE = DATA; QUIT; %MEND summaryset;
%MACRO summaryset(merge_var = , base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCAL i datasets; PROC SQL NOPRINT ; SELECT TRIM(LIBNAME) || "." || MEMNAME INTO :datasets SEPARATED BY " " FROM DICTIONARY.TABLES WHERE LIBNAME = "WORK" AND MEMNAME LIKE UPCASE("&setlist%"); QUIT ; %LET i= 1; %DO %UNTIL (NOT %LENGTH(%SCAN(&datasets,&i,%STR( )))); PROC SORT DATA=%SCAN(&datasets,&i,%STR( )); BY &merge_var; RUN; %LET i = %EVAL(&i+1); %END; DATA summary_; MERGE &datasets; BY &merge_var; class_vars="&class_vars"; continuous_vars="&continuous_vars"; RUN; PROC APPEND BASE=&base DATA=&setlist FORCE; RUN; PROC DATASETS; DELETE &setlist: &delsets / MEMTYPE = DATA; QUIT; %MEND summaryset;
![Page 231: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/231.jpg)
ANALYSISSET( )ANALYSISSET( )
%MACRO procglm (test = , data = , response = , independent = , class_vars = , continuous_vars = ); ODS LISTING CLOSE; ODS OUTPUT parameterestimates = summary_&test._glm (DROP = dependent probt tvalue RENAME = (Parameter = Key_var Estimate = &test._Estimate stderr = &test._stderr) WHERE =(UPCASE(key_var)=UPCASE("&independent"))) ; PROC GLM DATA=&data NAMELEN=32; %IF (NOT %LENGTH(%SCAN(&class_vars,1))) %THEN CLASS &class_vars ; ; MODEL &response = &continuous_vars &class_vars &independent; QUIT; ODS OUTPUT CLOSE; ODS LISTING;
%MEND procglm;
%MACRO procglm (test = , data = , response = , independent = , class_vars = , continuous_vars = ); ODS LISTING CLOSE; ODS OUTPUT parameterestimates = summary_&test._glm (DROP = dependent probt tvalue RENAME = (Parameter = Key_var Estimate = &test._Estimate stderr = &test._stderr) WHERE =(UPCASE(key_var)=UPCASE("&independent"))) ; PROC GLM DATA=&data NAMELEN=32; %IF (NOT %LENGTH(%SCAN(&class_vars,1))) %THEN CLASS &class_vars ; ; MODEL &response = &continuous_vars &class_vars &independent; QUIT; ODS OUTPUT CLOSE; ODS LISTING;
%MEND procglm;
%MACRO initbase(base=);%MACRO initbase(base=); OPTION NONOTES;OPTION NONOTES; DATA &base;DATA &base; LENGTH key_var response_var $32 LENGTH key_var response_var $32 key_label response_label $40key_label response_label $40 class_vars continuous_vars $200class_vars continuous_vars $200 mean stddev stderror n mean stddev stderror n crude_estimate adjusted_estimate crude_estimate adjusted_estimate crude_stderr adjusted_stderr 8.;crude_stderr adjusted_stderr 8.; LABEL key_var = "Name of Independent Variable"LABEL key_var = "Name of Independent Variable" key_label = "Label of Independent Variable" key_label = "Label of Independent Variable" response_var = "Name of Response Variable"response_var = "Name of Response Variable" response_label = "Label of Response Variable"response_label = "Label of Response Variable" mean = "PROC MEANS: Mean of Independent mean = "PROC MEANS: Mean of Independent Variable"Variable" n = "PROC MEANS: N of Independent Variable"n = "PROC MEANS: N of Independent Variable" stddev = "PROC MEANS: Standard Deviation Variable"stddev = "PROC MEANS: Standard Deviation Variable" stderror = "PROC MEANS: Standard Error IndeVariable"stderror = "PROC MEANS: Standard Error IndeVariable" crude_estimate = "Crude PROC GLM: Parameter Estimate"crude_estimate = "Crude PROC GLM: Parameter Estimate" crude_stderr = "Crude PROC GLM: Standard Error stimate"crude_stderr = "Crude PROC GLM: Standard Error stimate" djusted_estimate = "Adjusted PROC GLM: Parameter Estimate"djusted_estimate = "Adjusted PROC GLM: Parameter Estimate" adjusted_stderr = "Adjusted PROC GLM: Standard ErrEstimate"adjusted_stderr = "Adjusted PROC GLM: Standard ErrEstimate" class_vars = “Adjusted PROC GLM: Class covariates”class_vars = “Adjusted PROC GLM: Class covariates” continuous_vars = “Adjusted PROC GLM: Continuous variates”;continuous_vars = “Adjusted PROC GLM: Continuous variates”; FORMAT crude_estimate adjusted_estimate PVALUE6.4FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3 ;crude_stderr adjusted_stderr ODDSR8.3 ; RUN;RUN; OPTION NOTES;OPTION NOTES; DATA &base;DATA &base; SET &base;SET &base; STOP;STOP; RUN;RUN;%MEND initbase;%MEND initbase;
%MACRO initbase(base=);%MACRO initbase(base=); OPTION NONOTES;OPTION NONOTES; DATA &base;DATA &base; LENGTH key_var response_var $32 LENGTH key_var response_var $32 key_label response_label $40key_label response_label $40 class_vars continuous_vars $200class_vars continuous_vars $200 mean stddev stderror n mean stddev stderror n crude_estimate adjusted_estimate crude_estimate adjusted_estimate crude_stderr adjusted_stderr 8.;crude_stderr adjusted_stderr 8.; LABEL key_var = "Name of Independent Variable"LABEL key_var = "Name of Independent Variable" key_label = "Label of Independent Variable" key_label = "Label of Independent Variable" response_var = "Name of Response Variable"response_var = "Name of Response Variable" response_label = "Label of Response Variable"response_label = "Label of Response Variable" mean = "PROC MEANS: Mean of Independent mean = "PROC MEANS: Mean of Independent Variable"Variable" n = "PROC MEANS: N of Independent Variable"n = "PROC MEANS: N of Independent Variable" stddev = "PROC MEANS: Standard Deviation Variable"stddev = "PROC MEANS: Standard Deviation Variable" stderror = "PROC MEANS: Standard Error IndeVariable"stderror = "PROC MEANS: Standard Error IndeVariable" crude_estimate = "Crude PROC GLM: Parameter Estimate"crude_estimate = "Crude PROC GLM: Parameter Estimate" crude_stderr = "Crude PROC GLM: Standard Error stimate"crude_stderr = "Crude PROC GLM: Standard Error stimate" djusted_estimate = "Adjusted PROC GLM: Parameter Estimate"djusted_estimate = "Adjusted PROC GLM: Parameter Estimate" adjusted_stderr = "Adjusted PROC GLM: Standard ErrEstimate"adjusted_stderr = "Adjusted PROC GLM: Standard ErrEstimate" class_vars = “Adjusted PROC GLM: Class covariates”class_vars = “Adjusted PROC GLM: Class covariates” continuous_vars = “Adjusted PROC GLM: Continuous variates”;continuous_vars = “Adjusted PROC GLM: Continuous variates”; FORMAT crude_estimate adjusted_estimate PVALUE6.4FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3 ;crude_stderr adjusted_stderr ODDSR8.3 ; RUN;RUN; OPTION NOTES;OPTION NOTES; DATA &base;DATA &base; SET &base;SET &base; STOP;STOP; RUN;RUN;%MEND initbase;%MEND initbase;
%MACRO analysisset(data = ,%MACRO analysisset(data = , var1 = ,var1 = , var2 = ,var2 = , variables = ) ;variables = ) ; DATA analysis_set ;DATA analysis_set ; SET &data(KEEP = &var1 &var2 &variables);SET &data(KEEP = &var1 &var2 &variables); IF NMISS(OF _numeric_) = 0 THEN OUTPUT; IF NMISS(OF _numeric_) = 0 THEN OUTPUT; RUN; RUN; %MEND analysisset;%MEND analysisset;
%MACRO analysisset(data = ,%MACRO analysisset(data = , var1 = ,var1 = , var2 = ,var2 = , variables = ) ;variables = ) ; DATA analysis_set ;DATA analysis_set ; SET &data(KEEP = &var1 &var2 &variables);SET &data(KEEP = &var1 &var2 &variables); IF NMISS(OF _numeric_) = 0 THEN OUTPUT; IF NMISS(OF _numeric_) = 0 THEN OUTPUT; RUN; RUN; %MEND analysisset;%MEND analysisset;
%MACRO procmeans(data = ,%MACRO procmeans(data = , var1 = ,var1 = , var2 =);var2 =); ODS LISTING CLOSE; ODS LISTING CLOSE; ODS OUTPUT summary=summary_means ODS OUTPUT summary=summary_means (DROP = &var1._mean &var1._n &var1._stderr (DROP = &var1._mean &var1._n &var1._stderr &var1._stddev&var1._stddev RENAME = (VNAME_&var1 = response_varRENAME = (VNAME_&var1 = response_var LABEL_&var1 = response_labelLABEL_&var1 = response_label VNAME_&var2 = key_varVNAME_&var2 = key_var LABEL_&var2 = key_labelLABEL_&var2 = key_label &var2._mean = mean&var2._mean = mean &var2._n = n&var2._n = n &var2._stderr = stderror&var2._stderr = stderror &var2._stddev = stddev) );&var2._stddev = stddev) ); PROC MEANS DATA= &data mean n stderr std;PROC MEANS DATA= &data mean n stderr std; VAR &var1 &var2;VAR &var1 &var2; RUN;RUN; ODS OUTPUT CLOSE;ODS OUTPUT CLOSE; ODS LISTING;ODS LISTING; %MEND procmeans;%MEND procmeans;
%MACRO procmeans(data = ,%MACRO procmeans(data = , var1 = ,var1 = , var2 =);var2 =); ODS LISTING CLOSE; ODS LISTING CLOSE; ODS OUTPUT summary=summary_means ODS OUTPUT summary=summary_means (DROP = &var1._mean &var1._n &var1._stderr (DROP = &var1._mean &var1._n &var1._stderr &var1._stddev&var1._stddev RENAME = (VNAME_&var1 = response_varRENAME = (VNAME_&var1 = response_var LABEL_&var1 = response_labelLABEL_&var1 = response_label VNAME_&var2 = key_varVNAME_&var2 = key_var LABEL_&var2 = key_labelLABEL_&var2 = key_label &var2._mean = mean&var2._mean = mean &var2._n = n&var2._n = n &var2._stderr = stderror&var2._stderr = stderror &var2._stddev = stddev) );&var2._stddev = stddev) ); PROC MEANS DATA= &data mean n stderr std;PROC MEANS DATA= &data mean n stderr std; VAR &var1 &var2;VAR &var1 &var2; RUN;RUN; ODS OUTPUT CLOSE;ODS OUTPUT CLOSE; ODS LISTING;ODS LISTING; %MEND procmeans;%MEND procmeans;
%MACRO split(vars=, control=);%MACRO split(vars=, control=); %LOCAL count varlist chars; %LOCAL count varlist chars; %IF &vars NE %THEN %DO; %IF &vars NE %THEN %DO; %IF &control NE %THEN %DO; %IF &control NE %THEN %DO; %LET count=1 ; %LET count=1 ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %LET var = %QSCAN(&vars,&count); %LET var = %QSCAN(&vars,&count); %IF %SUBSTR(&var,1,1)=&control %THEN %IF %SUBSTR(&var,1,1)=&control %THEN %SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)) ;%SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)) ; %LET count = %EVAL(&count+1); %LET count = %EVAL(&count+1); %END ; %END ; %END; %END; %ELSE %DO; %ELSE %DO; %LET count=1 ; %LET count=1 ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %LET var = %QSCAN(&vars,&count); %LET var = %QSCAN(&vars,&count); %IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %UPCASE(%SUBSTR(&var,1,1))) NE 0 %THEN %UPCASE(%SUBSTR(&var,1,1))) NE 0 %THEN %QSCAN(&vars,&count) ; %QSCAN(&vars,&count) ; %LET count = %EVAL(&count+1); %LET count = %EVAL(&count+1); %END ; %END ; %END; %END; %END; %END; %MEND split; %MEND split;
%MACRO split(vars=, control=);%MACRO split(vars=, control=); %LOCAL count varlist chars; %LOCAL count varlist chars; %IF &vars NE %THEN %DO; %IF &vars NE %THEN %DO; %IF &control NE %THEN %DO; %IF &control NE %THEN %DO; %LET count=1 ; %LET count=1 ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %LET var = %QSCAN(&vars,&count); %LET var = %QSCAN(&vars,&count); %IF %SUBSTR(&var,1,1)=&control %THEN %IF %SUBSTR(&var,1,1)=&control %THEN %SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)) ;%SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)) ; %LET count = %EVAL(&count+1); %LET count = %EVAL(&count+1); %END ; %END ; %END; %END; %ELSE %DO; %ELSE %DO; %LET count=1 ; %LET count=1 ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %LET var = %QSCAN(&vars,&count); %LET var = %QSCAN(&vars,&count); %IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %UPCASE(%SUBSTR(&var,1,1))) NE 0 %THEN %UPCASE(%SUBSTR(&var,1,1))) NE 0 %THEN %QSCAN(&vars,&count) ; %QSCAN(&vars,&count) ; %LET count = %EVAL(&count+1); %LET count = %EVAL(&count+1); %END ; %END ; %END; %END; %END; %END; %MEND split; %MEND split;
%MACRO validate(__dset = ,%MACRO validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %GLOBAL _echeck ; %GLOBAL _echeck ; %LET _echeck=0 ;%LET _echeck=0 ; %LET _indflag=0 ;%LET _indflag=0 ; %* check that DATA exists *;%* check that DATA exists *; %IF &__dset = %STR( ) %THEN %DO;%IF &__dset = %STR( ) %THEN %DO; %let ex=NO ;%let ex=NO ; %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %do ;%else %do ; %if %sysfunc(exist(&__dset)) %then %let ex=YES;%if %sysfunc(exist(&__dset)) %then %let ex=YES; %else %let ex=NO ;%else %let ex=NO ; %end ;%end ; %if &ex=NO %then %do ;%if &ex=NO %then %do ; %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end;%end; %* check input parameters *; %* check input parameters *; %let dsnid = %sysfunc(open(&__dset)) ;%let dsnid = %sysfunc(open(&__dset)) ; %* check that response variable exists *; %* check that response variable exists *; %if &__var1 = %str( ) %then %do;%if &__var1 = %str( ) %then %do; %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do;%else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do; %let _echeck=1 ;%let _echeck=1 ; %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET &__dset Execution terminating.;&__dset Execution terminating.; %end; %end; %* check that response variable is numeric *;%* check that response variable is numeric *;
%MACRO validate(__dset = ,%MACRO validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %GLOBAL _echeck ; %GLOBAL _echeck ; %LET _echeck=0 ;%LET _echeck=0 ; %LET _indflag=0 ;%LET _indflag=0 ; %* check that DATA exists *;%* check that DATA exists *; %IF &__dset = %STR( ) %THEN %DO;%IF &__dset = %STR( ) %THEN %DO; %let ex=NO ;%let ex=NO ; %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %do ;%else %do ; %if %sysfunc(exist(&__dset)) %then %let ex=YES;%if %sysfunc(exist(&__dset)) %then %let ex=YES; %else %let ex=NO ;%else %let ex=NO ; %end ;%end ; %if &ex=NO %then %do ;%if &ex=NO %then %do ; %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end;%end; %* check input parameters *; %* check input parameters *; %let dsnid = %sysfunc(open(&__dset)) ;%let dsnid = %sysfunc(open(&__dset)) ; %* check that response variable exists *; %* check that response variable exists *; %if &__var1 = %str( ) %then %do;%if &__var1 = %str( ) %then %do; %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do;%else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do; %let _echeck=1 ;%let _echeck=1 ; %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET &__dset Execution terminating.;&__dset Execution terminating.; %end; %end; %* check that response variable is numeric *;%* check that response variable is numeric *;
%MACRO validate(__dset = ,%MACRO validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %GLOBAL _echeck ; %GLOBAL _echeck ; %LET _echeck=0 ;%LET _echeck=0 ; %LET _indflag=0 ;%LET _indflag=0 ; %* check that DATA exists *;%* check that DATA exists *; %IF &__dset = %STR( ) %THEN %DO;%IF &__dset = %STR( ) %THEN %DO; %let ex=NO ;%let ex=NO ; %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %do ;%else %do ; %if %sysfunc(exist(&__dset)) %then %let ex=YES;%if %sysfunc(exist(&__dset)) %then %let ex=YES; %else %let ex=NO ;%else %let ex=NO ; %end ;%end ; %if &ex=NO %then %do ;%if &ex=NO %then %do ; %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end;%end; %* check input parameters *; %* check input parameters *; %let dsnid = %sysfunc(open(&__dset)) ;%let dsnid = %sysfunc(open(&__dset)) ; %* check that response variable exists *; %* check that response variable exists *; %if &__var1 = %str( ) %then %do;%if &__var1 = %str( ) %then %do; %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do;%else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do; %let _echeck=1 ;%let _echeck=1 ; %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET &__dset Execution terminating.;&__dset Execution terminating.; %end; %end; %* check that response variable is numeric *;%* check that response variable is numeric *;
%MACRO validate(__dset = ,%MACRO validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %GLOBAL _echeck ; %GLOBAL _echeck ; %LET _echeck=0 ;%LET _echeck=0 ; %LET _indflag=0 ;%LET _indflag=0 ; %* check that DATA exists *;%* check that DATA exists *; %IF &__dset = %STR( ) %THEN %DO;%IF &__dset = %STR( ) %THEN %DO; %let ex=NO ;%let ex=NO ; %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %do ;%else %do ; %if %sysfunc(exist(&__dset)) %then %let ex=YES;%if %sysfunc(exist(&__dset)) %then %let ex=YES; %else %let ex=NO ;%else %let ex=NO ; %end ;%end ; %if &ex=NO %then %do ;%if &ex=NO %then %do ; %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end;%end; %* check input parameters *; %* check input parameters *; %let dsnid = %sysfunc(open(&__dset)) ;%let dsnid = %sysfunc(open(&__dset)) ; %* check that response variable exists *; %* check that response variable exists *; %if &__var1 = %str( ) %then %do;%if &__var1 = %str( ) %then %do; %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do;%else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do; %let _echeck=1 ;%let _echeck=1 ; %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET &__dset Execution terminating.;&__dset Execution terminating.; %end; %end; %* check that response variable is numeric *;%* check that response variable is numeric *;
%MACRO summaryset(merge_var = , base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCAL i datasets; PROC SQL NOPRINT ; SELECT TRIM(LIBNAME) || "." || MEMNAME INTO :datasets SEPARATED BY " " FROM DICTIONARY.TABLES WHERE LIBNAME = "WORK" AND MEMNAME LIKE UPCASE("&setlist%"); QUIT ; %LET i= 1; %DO %UNTIL (NOT %LENGTH(%SCAN(&datasets,&i,%STR( )))); PROC SORT DATA=%SCAN(&datasets,&i,%STR( )); BY &merge_var; RUN; %LET i = %EVAL(&i+1); %END; DATA summary_; MERGE &datasets; BY &merge_var; class_vars="&class_vars"; continuous_vars="&continuous_vars"; RUN; PROC APPEND BASE=&base DATA=&setlist FORCE; RUN; PROC DATASETS; DELETE &setlist: &delsets / MEMTYPE = DATA; QUIT; %MEND summaryset;
%MACRO summaryset(merge_var = , base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCAL i datasets; PROC SQL NOPRINT ; SELECT TRIM(LIBNAME) || "." || MEMNAME INTO :datasets SEPARATED BY " " FROM DICTIONARY.TABLES WHERE LIBNAME = "WORK" AND MEMNAME LIKE UPCASE("&setlist%"); QUIT ; %LET i= 1; %DO %UNTIL (NOT %LENGTH(%SCAN(&datasets,&i,%STR( )))); PROC SORT DATA=%SCAN(&datasets,&i,%STR( )); BY &merge_var; RUN; %LET i = %EVAL(&i+1); %END; DATA summary_; MERGE &datasets; BY &merge_var; class_vars="&class_vars"; continuous_vars="&continuous_vars"; RUN; PROC APPEND BASE=&base DATA=&setlist FORCE; RUN; PROC DATASETS; DELETE &setlist: &delsets / MEMTYPE = DATA; QUIT; %MEND summaryset;
![Page 232: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/232.jpg)
PROCMEANS( )PROCMEANS( )
%MACRO procglm (test = , data = , response = , independent = , class_vars = , continuous_vars = ); ODS LISTING CLOSE; ODS OUTPUT parameterestimates = summary_&test._glm (DROP = dependent probt tvalue RENAME = (Parameter = Key_var Estimate = &test._Estimate stderr = &test._stderr) WHERE =(UPCASE(key_var)=UPCASE("&independent"))) ; PROC GLM DATA=&data NAMELEN=32; %IF (NOT %LENGTH(%SCAN(&class_vars,1))) %THEN CLASS &class_vars ; ; MODEL &response = &continuous_vars &class_vars &independent; QUIT; ODS OUTPUT CLOSE; ODS LISTING;
%MEND procglm;
%MACRO procglm (test = , data = , response = , independent = , class_vars = , continuous_vars = ); ODS LISTING CLOSE; ODS OUTPUT parameterestimates = summary_&test._glm (DROP = dependent probt tvalue RENAME = (Parameter = Key_var Estimate = &test._Estimate stderr = &test._stderr) WHERE =(UPCASE(key_var)=UPCASE("&independent"))) ; PROC GLM DATA=&data NAMELEN=32; %IF (NOT %LENGTH(%SCAN(&class_vars,1))) %THEN CLASS &class_vars ; ; MODEL &response = &continuous_vars &class_vars &independent; QUIT; ODS OUTPUT CLOSE; ODS LISTING;
%MEND procglm;
%MACRO initbase(base=);%MACRO initbase(base=); OPTION NONOTES;OPTION NONOTES; DATA &base;DATA &base; LENGTH key_var response_var $32 LENGTH key_var response_var $32 key_label response_label $40key_label response_label $40 class_vars continuous_vars $200class_vars continuous_vars $200 mean stddev stderror n mean stddev stderror n crude_estimate adjusted_estimate crude_estimate adjusted_estimate crude_stderr adjusted_stderr 8.;crude_stderr adjusted_stderr 8.; LABEL key_var = "Name of Independent Variable"LABEL key_var = "Name of Independent Variable" key_label = "Label of Independent Variable" key_label = "Label of Independent Variable" response_var = "Name of Response Variable"response_var = "Name of Response Variable" response_label = "Label of Response Variable"response_label = "Label of Response Variable" mean = "PROC MEANS: Mean of Independent mean = "PROC MEANS: Mean of Independent Variable"Variable" n = "PROC MEANS: N of Independent Variable"n = "PROC MEANS: N of Independent Variable" stddev = "PROC MEANS: Standard Deviation Variable"stddev = "PROC MEANS: Standard Deviation Variable" stderror = "PROC MEANS: Standard Error IndeVariable"stderror = "PROC MEANS: Standard Error IndeVariable" crude_estimate = "Crude PROC GLM: Parameter Estimate"crude_estimate = "Crude PROC GLM: Parameter Estimate" crude_stderr = "Crude PROC GLM: Standard Error stimate"crude_stderr = "Crude PROC GLM: Standard Error stimate" djusted_estimate = "Adjusted PROC GLM: Parameter Estimate"djusted_estimate = "Adjusted PROC GLM: Parameter Estimate" adjusted_stderr = "Adjusted PROC GLM: Standard ErrEstimate"adjusted_stderr = "Adjusted PROC GLM: Standard ErrEstimate" class_vars = “Adjusted PROC GLM: Class covariates”class_vars = “Adjusted PROC GLM: Class covariates” continuous_vars = “Adjusted PROC GLM: Continuous variates”;continuous_vars = “Adjusted PROC GLM: Continuous variates”; FORMAT crude_estimate adjusted_estimate PVALUE6.4FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3 ;crude_stderr adjusted_stderr ODDSR8.3 ; RUN;RUN; OPTION NOTES;OPTION NOTES; DATA &base;DATA &base; SET &base;SET &base; STOP;STOP; RUN;RUN;%MEND initbase;%MEND initbase;
%MACRO initbase(base=);%MACRO initbase(base=); OPTION NONOTES;OPTION NONOTES; DATA &base;DATA &base; LENGTH key_var response_var $32 LENGTH key_var response_var $32 key_label response_label $40key_label response_label $40 class_vars continuous_vars $200class_vars continuous_vars $200 mean stddev stderror n mean stddev stderror n crude_estimate adjusted_estimate crude_estimate adjusted_estimate crude_stderr adjusted_stderr 8.;crude_stderr adjusted_stderr 8.; LABEL key_var = "Name of Independent Variable"LABEL key_var = "Name of Independent Variable" key_label = "Label of Independent Variable" key_label = "Label of Independent Variable" response_var = "Name of Response Variable"response_var = "Name of Response Variable" response_label = "Label of Response Variable"response_label = "Label of Response Variable" mean = "PROC MEANS: Mean of Independent mean = "PROC MEANS: Mean of Independent Variable"Variable" n = "PROC MEANS: N of Independent Variable"n = "PROC MEANS: N of Independent Variable" stddev = "PROC MEANS: Standard Deviation Variable"stddev = "PROC MEANS: Standard Deviation Variable" stderror = "PROC MEANS: Standard Error IndeVariable"stderror = "PROC MEANS: Standard Error IndeVariable" crude_estimate = "Crude PROC GLM: Parameter Estimate"crude_estimate = "Crude PROC GLM: Parameter Estimate" crude_stderr = "Crude PROC GLM: Standard Error stimate"crude_stderr = "Crude PROC GLM: Standard Error stimate" djusted_estimate = "Adjusted PROC GLM: Parameter Estimate"djusted_estimate = "Adjusted PROC GLM: Parameter Estimate" adjusted_stderr = "Adjusted PROC GLM: Standard ErrEstimate"adjusted_stderr = "Adjusted PROC GLM: Standard ErrEstimate" class_vars = “Adjusted PROC GLM: Class covariates”class_vars = “Adjusted PROC GLM: Class covariates” continuous_vars = “Adjusted PROC GLM: Continuous variates”;continuous_vars = “Adjusted PROC GLM: Continuous variates”; FORMAT crude_estimate adjusted_estimate PVALUE6.4FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3 ;crude_stderr adjusted_stderr ODDSR8.3 ; RUN;RUN; OPTION NOTES;OPTION NOTES; DATA &base;DATA &base; SET &base;SET &base; STOP;STOP; RUN;RUN;%MEND initbase;%MEND initbase;
%MACRO analysisset(data = ,%MACRO analysisset(data = , var1 = ,var1 = , var2 = ,var2 = , variables = ) ;variables = ) ; DATA analysis_set ;DATA analysis_set ; SET &data(KEEP = &var1 &var2 &variables);SET &data(KEEP = &var1 &var2 &variables); IF NMISS(OF _numeric_) = 0 THEN OUTPUT; IF NMISS(OF _numeric_) = 0 THEN OUTPUT; RUN; RUN; %MEND analysisset;%MEND analysisset;
%MACRO analysisset(data = ,%MACRO analysisset(data = , var1 = ,var1 = , var2 = ,var2 = , variables = ) ;variables = ) ; DATA analysis_set ;DATA analysis_set ; SET &data(KEEP = &var1 &var2 &variables);SET &data(KEEP = &var1 &var2 &variables); IF NMISS(OF _numeric_) = 0 THEN OUTPUT; IF NMISS(OF _numeric_) = 0 THEN OUTPUT; RUN; RUN; %MEND analysisset;%MEND analysisset;
%MACRO procmeans(data = ,%MACRO procmeans(data = , var1 = ,var1 = , var2 =);var2 =); ODS LISTING CLOSE; ODS LISTING CLOSE; ODS OUTPUT summary=summary_means ODS OUTPUT summary=summary_means (DROP = &var1._mean &var1._n &var1._stderr (DROP = &var1._mean &var1._n &var1._stderr &var1._stddev&var1._stddev RENAME = (VNAME_&var1 = response_varRENAME = (VNAME_&var1 = response_var LABEL_&var1 = response_labelLABEL_&var1 = response_label VNAME_&var2 = key_varVNAME_&var2 = key_var LABEL_&var2 = key_labelLABEL_&var2 = key_label &var2._mean = mean&var2._mean = mean &var2._n = n&var2._n = n &var2._stderr = stderror&var2._stderr = stderror &var2._stddev = stddev) );&var2._stddev = stddev) ); PROC MEANS DATA= &data mean n stderr std;PROC MEANS DATA= &data mean n stderr std; VAR &var1 &var2;VAR &var1 &var2; RUN;RUN; ODS OUTPUT CLOSE;ODS OUTPUT CLOSE; ODS LISTING;ODS LISTING; %MEND procmeans;%MEND procmeans;
%MACRO procmeans(data = ,%MACRO procmeans(data = , var1 = ,var1 = , var2 =);var2 =); ODS LISTING CLOSE; ODS LISTING CLOSE; ODS OUTPUT summary=summary_means ODS OUTPUT summary=summary_means (DROP = &var1._mean &var1._n &var1._stderr (DROP = &var1._mean &var1._n &var1._stderr &var1._stddev&var1._stddev RENAME = (VNAME_&var1 = response_varRENAME = (VNAME_&var1 = response_var LABEL_&var1 = response_labelLABEL_&var1 = response_label VNAME_&var2 = key_varVNAME_&var2 = key_var LABEL_&var2 = key_labelLABEL_&var2 = key_label &var2._mean = mean&var2._mean = mean &var2._n = n&var2._n = n &var2._stderr = stderror&var2._stderr = stderror &var2._stddev = stddev) );&var2._stddev = stddev) ); PROC MEANS DATA= &data mean n stderr std;PROC MEANS DATA= &data mean n stderr std; VAR &var1 &var2;VAR &var1 &var2; RUN;RUN; ODS OUTPUT CLOSE;ODS OUTPUT CLOSE; ODS LISTING;ODS LISTING; %MEND procmeans;%MEND procmeans;
%MACRO split(vars=, control=);%MACRO split(vars=, control=); %LOCAL count varlist chars; %LOCAL count varlist chars; %IF &vars NE %THEN %DO; %IF &vars NE %THEN %DO; %IF &control NE %THEN %DO; %IF &control NE %THEN %DO; %LET count=1 ; %LET count=1 ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %LET var = %QSCAN(&vars,&count); %LET var = %QSCAN(&vars,&count); %IF %SUBSTR(&var,1,1)=&control %THEN %IF %SUBSTR(&var,1,1)=&control %THEN %SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)) ;%SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)) ; %LET count = %EVAL(&count+1); %LET count = %EVAL(&count+1); %END ; %END ; %END; %END; %ELSE %DO; %ELSE %DO; %LET count=1 ; %LET count=1 ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %LET var = %QSCAN(&vars,&count); %LET var = %QSCAN(&vars,&count); %IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %UPCASE(%SUBSTR(&var,1,1))) NE 0 %THEN %UPCASE(%SUBSTR(&var,1,1))) NE 0 %THEN %QSCAN(&vars,&count) ; %QSCAN(&vars,&count) ; %LET count = %EVAL(&count+1); %LET count = %EVAL(&count+1); %END ; %END ; %END; %END; %END; %END; %MEND split; %MEND split;
%MACRO split(vars=, control=);%MACRO split(vars=, control=); %LOCAL count varlist chars; %LOCAL count varlist chars; %IF &vars NE %THEN %DO; %IF &vars NE %THEN %DO; %IF &control NE %THEN %DO; %IF &control NE %THEN %DO; %LET count=1 ; %LET count=1 ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %LET var = %QSCAN(&vars,&count); %LET var = %QSCAN(&vars,&count); %IF %SUBSTR(&var,1,1)=&control %THEN %IF %SUBSTR(&var,1,1)=&control %THEN %SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)) ;%SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)) ; %LET count = %EVAL(&count+1); %LET count = %EVAL(&count+1); %END ; %END ; %END; %END; %ELSE %DO; %ELSE %DO; %LET count=1 ; %LET count=1 ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %LET var = %QSCAN(&vars,&count); %LET var = %QSCAN(&vars,&count); %IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %UPCASE(%SUBSTR(&var,1,1))) NE 0 %THEN %UPCASE(%SUBSTR(&var,1,1))) NE 0 %THEN %QSCAN(&vars,&count) ; %QSCAN(&vars,&count) ; %LET count = %EVAL(&count+1); %LET count = %EVAL(&count+1); %END ; %END ; %END; %END; %END; %END; %MEND split; %MEND split;
%MACRO validate(__dset = ,%MACRO validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %GLOBAL _echeck ; %GLOBAL _echeck ; %LET _echeck=0 ;%LET _echeck=0 ; %LET _indflag=0 ;%LET _indflag=0 ; %* check that DATA exists *;%* check that DATA exists *; %IF &__dset = %STR( ) %THEN %DO;%IF &__dset = %STR( ) %THEN %DO; %let ex=NO ;%let ex=NO ; %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %do ;%else %do ; %if %sysfunc(exist(&__dset)) %then %let ex=YES;%if %sysfunc(exist(&__dset)) %then %let ex=YES; %else %let ex=NO ;%else %let ex=NO ; %end ;%end ; %if &ex=NO %then %do ;%if &ex=NO %then %do ; %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end;%end; %* check input parameters *; %* check input parameters *; %let dsnid = %sysfunc(open(&__dset)) ;%let dsnid = %sysfunc(open(&__dset)) ; %* check that response variable exists *; %* check that response variable exists *; %if &__var1 = %str( ) %then %do;%if &__var1 = %str( ) %then %do; %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do;%else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do; %let _echeck=1 ;%let _echeck=1 ; %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET &__dset Execution terminating.;&__dset Execution terminating.; %end; %end; %* check that response variable is numeric *;%* check that response variable is numeric *;
%MACRO validate(__dset = ,%MACRO validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %GLOBAL _echeck ; %GLOBAL _echeck ; %LET _echeck=0 ;%LET _echeck=0 ; %LET _indflag=0 ;%LET _indflag=0 ; %* check that DATA exists *;%* check that DATA exists *; %IF &__dset = %STR( ) %THEN %DO;%IF &__dset = %STR( ) %THEN %DO; %let ex=NO ;%let ex=NO ; %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %do ;%else %do ; %if %sysfunc(exist(&__dset)) %then %let ex=YES;%if %sysfunc(exist(&__dset)) %then %let ex=YES; %else %let ex=NO ;%else %let ex=NO ; %end ;%end ; %if &ex=NO %then %do ;%if &ex=NO %then %do ; %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end;%end; %* check input parameters *; %* check input parameters *; %let dsnid = %sysfunc(open(&__dset)) ;%let dsnid = %sysfunc(open(&__dset)) ; %* check that response variable exists *; %* check that response variable exists *; %if &__var1 = %str( ) %then %do;%if &__var1 = %str( ) %then %do; %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do;%else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do; %let _echeck=1 ;%let _echeck=1 ; %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET &__dset Execution terminating.;&__dset Execution terminating.; %end; %end; %* check that response variable is numeric *;%* check that response variable is numeric *;
%MACRO validate(__dset = ,%MACRO validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %GLOBAL _echeck ; %GLOBAL _echeck ; %LET _echeck=0 ;%LET _echeck=0 ; %LET _indflag=0 ;%LET _indflag=0 ; %* check that DATA exists *;%* check that DATA exists *; %IF &__dset = %STR( ) %THEN %DO;%IF &__dset = %STR( ) %THEN %DO; %let ex=NO ;%let ex=NO ; %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %do ;%else %do ; %if %sysfunc(exist(&__dset)) %then %let ex=YES;%if %sysfunc(exist(&__dset)) %then %let ex=YES; %else %let ex=NO ;%else %let ex=NO ; %end ;%end ; %if &ex=NO %then %do ;%if &ex=NO %then %do ; %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end;%end; %* check input parameters *; %* check input parameters *; %let dsnid = %sysfunc(open(&__dset)) ;%let dsnid = %sysfunc(open(&__dset)) ; %* check that response variable exists *; %* check that response variable exists *; %if &__var1 = %str( ) %then %do;%if &__var1 = %str( ) %then %do; %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do;%else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do; %let _echeck=1 ;%let _echeck=1 ; %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET &__dset Execution terminating.;&__dset Execution terminating.; %end; %end; %* check that response variable is numeric *;%* check that response variable is numeric *;
%MACRO validate(__dset = ,%MACRO validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %GLOBAL _echeck ; %GLOBAL _echeck ; %LET _echeck=0 ;%LET _echeck=0 ; %LET _indflag=0 ;%LET _indflag=0 ; %* check that DATA exists *;%* check that DATA exists *; %IF &__dset = %STR( ) %THEN %DO;%IF &__dset = %STR( ) %THEN %DO; %let ex=NO ;%let ex=NO ; %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %do ;%else %do ; %if %sysfunc(exist(&__dset)) %then %let ex=YES;%if %sysfunc(exist(&__dset)) %then %let ex=YES; %else %let ex=NO ;%else %let ex=NO ; %end ;%end ; %if &ex=NO %then %do ;%if &ex=NO %then %do ; %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end;%end; %* check input parameters *; %* check input parameters *; %let dsnid = %sysfunc(open(&__dset)) ;%let dsnid = %sysfunc(open(&__dset)) ; %* check that response variable exists *; %* check that response variable exists *; %if &__var1 = %str( ) %then %do;%if &__var1 = %str( ) %then %do; %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do;%else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do; %let _echeck=1 ;%let _echeck=1 ; %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET &__dset Execution terminating.;&__dset Execution terminating.; %end; %end; %* check that response variable is numeric *;%* check that response variable is numeric *;
%MACRO summaryset(merge_var = , base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCAL i datasets; PROC SQL NOPRINT ; SELECT TRIM(LIBNAME) || "." || MEMNAME INTO :datasets SEPARATED BY " " FROM DICTIONARY.TABLES WHERE LIBNAME = "WORK" AND MEMNAME LIKE UPCASE("&setlist%"); QUIT ; %LET i= 1; %DO %UNTIL (NOT %LENGTH(%SCAN(&datasets,&i,%STR( )))); PROC SORT DATA=%SCAN(&datasets,&i,%STR( )); BY &merge_var; RUN; %LET i = %EVAL(&i+1); %END; DATA summary_; MERGE &datasets; BY &merge_var; class_vars="&class_vars"; continuous_vars="&continuous_vars"; RUN; PROC APPEND BASE=&base DATA=&setlist FORCE; RUN; PROC DATASETS; DELETE &setlist: &delsets / MEMTYPE = DATA; QUIT; %MEND summaryset;
%MACRO summaryset(merge_var = , base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCAL i datasets; PROC SQL NOPRINT ; SELECT TRIM(LIBNAME) || "." || MEMNAME INTO :datasets SEPARATED BY " " FROM DICTIONARY.TABLES WHERE LIBNAME = "WORK" AND MEMNAME LIKE UPCASE("&setlist%"); QUIT ; %LET i= 1; %DO %UNTIL (NOT %LENGTH(%SCAN(&datasets,&i,%STR( )))); PROC SORT DATA=%SCAN(&datasets,&i,%STR( )); BY &merge_var; RUN; %LET i = %EVAL(&i+1); %END; DATA summary_; MERGE &datasets; BY &merge_var; class_vars="&class_vars"; continuous_vars="&continuous_vars"; RUN; PROC APPEND BASE=&base DATA=&setlist FORCE; RUN; PROC DATASETS; DELETE &setlist: &delsets / MEMTYPE = DATA; QUIT; %MEND summaryset;
![Page 233: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/233.jpg)
PROCGLM( )PROCGLM( )
%MACRO procglm (test = , data = , response = , independent = , class_vars = , continuous_vars = ); ODS LISTING CLOSE; ODS OUTPUT parameterestimates = summary_&test._glm (DROP = dependent probt tvalue RENAME = (Parameter = Key_var Estimate = &test._Estimate stderr = &test._stderr) WHERE =(UPCASE(key_var)=UPCASE("&independent"))) ; PROC GLM DATA=&data NAMELEN=32; %IF (NOT %LENGTH(%SCAN(&class_vars,1))) %THEN CLASS &class_vars ; ; MODEL &response = &continuous_vars &class_vars &independent; QUIT; ODS OUTPUT CLOSE; ODS LISTING;
%MEND procglm;
%MACRO procglm (test = , data = , response = , independent = , class_vars = , continuous_vars = ); ODS LISTING CLOSE; ODS OUTPUT parameterestimates = summary_&test._glm (DROP = dependent probt tvalue RENAME = (Parameter = Key_var Estimate = &test._Estimate stderr = &test._stderr) WHERE =(UPCASE(key_var)=UPCASE("&independent"))) ; PROC GLM DATA=&data NAMELEN=32; %IF (NOT %LENGTH(%SCAN(&class_vars,1))) %THEN CLASS &class_vars ; ; MODEL &response = &continuous_vars &class_vars &independent; QUIT; ODS OUTPUT CLOSE; ODS LISTING;
%MEND procglm;
%MACRO initbase(base=);%MACRO initbase(base=); OPTION NONOTES;OPTION NONOTES; DATA &base;DATA &base; LENGTH key_var response_var $32 LENGTH key_var response_var $32 key_label response_label $40key_label response_label $40 class_vars continuous_vars $200class_vars continuous_vars $200 mean stddev stderror n mean stddev stderror n crude_estimate adjusted_estimate crude_estimate adjusted_estimate crude_stderr adjusted_stderr 8.;crude_stderr adjusted_stderr 8.; LABEL key_var = "Name of Independent Variable"LABEL key_var = "Name of Independent Variable" key_label = "Label of Independent Variable" key_label = "Label of Independent Variable" response_var = "Name of Response Variable"response_var = "Name of Response Variable" response_label = "Label of Response Variable"response_label = "Label of Response Variable" mean = "PROC MEANS: Mean of Independent mean = "PROC MEANS: Mean of Independent Variable"Variable" n = "PROC MEANS: N of Independent Variable"n = "PROC MEANS: N of Independent Variable" stddev = "PROC MEANS: Standard Deviation Variable"stddev = "PROC MEANS: Standard Deviation Variable" stderror = "PROC MEANS: Standard Error IndeVariable"stderror = "PROC MEANS: Standard Error IndeVariable" crude_estimate = "Crude PROC GLM: Parameter Estimate"crude_estimate = "Crude PROC GLM: Parameter Estimate" crude_stderr = "Crude PROC GLM: Standard Error stimate"crude_stderr = "Crude PROC GLM: Standard Error stimate" djusted_estimate = "Adjusted PROC GLM: Parameter Estimate"djusted_estimate = "Adjusted PROC GLM: Parameter Estimate" adjusted_stderr = "Adjusted PROC GLM: Standard ErrEstimate"adjusted_stderr = "Adjusted PROC GLM: Standard ErrEstimate" class_vars = “Adjusted PROC GLM: Class covariates”class_vars = “Adjusted PROC GLM: Class covariates” continuous_vars = “Adjusted PROC GLM: Continuous variates”;continuous_vars = “Adjusted PROC GLM: Continuous variates”; FORMAT crude_estimate adjusted_estimate PVALUE6.4FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3 ;crude_stderr adjusted_stderr ODDSR8.3 ; RUN;RUN; OPTION NOTES;OPTION NOTES; DATA &base;DATA &base; SET &base;SET &base; STOP;STOP; RUN;RUN;%MEND initbase;%MEND initbase;
%MACRO initbase(base=);%MACRO initbase(base=); OPTION NONOTES;OPTION NONOTES; DATA &base;DATA &base; LENGTH key_var response_var $32 LENGTH key_var response_var $32 key_label response_label $40key_label response_label $40 class_vars continuous_vars $200class_vars continuous_vars $200 mean stddev stderror n mean stddev stderror n crude_estimate adjusted_estimate crude_estimate adjusted_estimate crude_stderr adjusted_stderr 8.;crude_stderr adjusted_stderr 8.; LABEL key_var = "Name of Independent Variable"LABEL key_var = "Name of Independent Variable" key_label = "Label of Independent Variable" key_label = "Label of Independent Variable" response_var = "Name of Response Variable"response_var = "Name of Response Variable" response_label = "Label of Response Variable"response_label = "Label of Response Variable" mean = "PROC MEANS: Mean of Independent mean = "PROC MEANS: Mean of Independent Variable"Variable" n = "PROC MEANS: N of Independent Variable"n = "PROC MEANS: N of Independent Variable" stddev = "PROC MEANS: Standard Deviation Variable"stddev = "PROC MEANS: Standard Deviation Variable" stderror = "PROC MEANS: Standard Error IndeVariable"stderror = "PROC MEANS: Standard Error IndeVariable" crude_estimate = "Crude PROC GLM: Parameter Estimate"crude_estimate = "Crude PROC GLM: Parameter Estimate" crude_stderr = "Crude PROC GLM: Standard Error stimate"crude_stderr = "Crude PROC GLM: Standard Error stimate" djusted_estimate = "Adjusted PROC GLM: Parameter Estimate"djusted_estimate = "Adjusted PROC GLM: Parameter Estimate" adjusted_stderr = "Adjusted PROC GLM: Standard ErrEstimate"adjusted_stderr = "Adjusted PROC GLM: Standard ErrEstimate" class_vars = “Adjusted PROC GLM: Class covariates”class_vars = “Adjusted PROC GLM: Class covariates” continuous_vars = “Adjusted PROC GLM: Continuous variates”;continuous_vars = “Adjusted PROC GLM: Continuous variates”; FORMAT crude_estimate adjusted_estimate PVALUE6.4FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3 ;crude_stderr adjusted_stderr ODDSR8.3 ; RUN;RUN; OPTION NOTES;OPTION NOTES; DATA &base;DATA &base; SET &base;SET &base; STOP;STOP; RUN;RUN;%MEND initbase;%MEND initbase;
%MACRO analysisset(data = ,%MACRO analysisset(data = , var1 = ,var1 = , var2 = ,var2 = , variables = ) ;variables = ) ; DATA analysis_set ;DATA analysis_set ; SET &data(KEEP = &var1 &var2 &variables);SET &data(KEEP = &var1 &var2 &variables); IF NMISS(OF _numeric_) = 0 THEN OUTPUT; IF NMISS(OF _numeric_) = 0 THEN OUTPUT; RUN; RUN; %MEND analysisset;%MEND analysisset;
%MACRO analysisset(data = ,%MACRO analysisset(data = , var1 = ,var1 = , var2 = ,var2 = , variables = ) ;variables = ) ; DATA analysis_set ;DATA analysis_set ; SET &data(KEEP = &var1 &var2 &variables);SET &data(KEEP = &var1 &var2 &variables); IF NMISS(OF _numeric_) = 0 THEN OUTPUT; IF NMISS(OF _numeric_) = 0 THEN OUTPUT; RUN; RUN; %MEND analysisset;%MEND analysisset;
%MACRO procmeans(data = ,%MACRO procmeans(data = , var1 = ,var1 = , var2 =);var2 =); ODS LISTING CLOSE; ODS LISTING CLOSE; ODS OUTPUT summary=summary_means ODS OUTPUT summary=summary_means (DROP = &var1._mean &var1._n &var1._stderr (DROP = &var1._mean &var1._n &var1._stderr &var1._stddev&var1._stddev RENAME = (VNAME_&var1 = response_varRENAME = (VNAME_&var1 = response_var LABEL_&var1 = response_labelLABEL_&var1 = response_label VNAME_&var2 = key_varVNAME_&var2 = key_var LABEL_&var2 = key_labelLABEL_&var2 = key_label &var2._mean = mean&var2._mean = mean &var2._n = n&var2._n = n &var2._stderr = stderror&var2._stderr = stderror &var2._stddev = stddev) );&var2._stddev = stddev) ); PROC MEANS DATA= &data mean n stderr std;PROC MEANS DATA= &data mean n stderr std; VAR &var1 &var2;VAR &var1 &var2; RUN;RUN; ODS OUTPUT CLOSE;ODS OUTPUT CLOSE; ODS LISTING;ODS LISTING; %MEND procmeans;%MEND procmeans;
%MACRO procmeans(data = ,%MACRO procmeans(data = , var1 = ,var1 = , var2 =);var2 =); ODS LISTING CLOSE; ODS LISTING CLOSE; ODS OUTPUT summary=summary_means ODS OUTPUT summary=summary_means (DROP = &var1._mean &var1._n &var1._stderr (DROP = &var1._mean &var1._n &var1._stderr &var1._stddev&var1._stddev RENAME = (VNAME_&var1 = response_varRENAME = (VNAME_&var1 = response_var LABEL_&var1 = response_labelLABEL_&var1 = response_label VNAME_&var2 = key_varVNAME_&var2 = key_var LABEL_&var2 = key_labelLABEL_&var2 = key_label &var2._mean = mean&var2._mean = mean &var2._n = n&var2._n = n &var2._stderr = stderror&var2._stderr = stderror &var2._stddev = stddev) );&var2._stddev = stddev) ); PROC MEANS DATA= &data mean n stderr std;PROC MEANS DATA= &data mean n stderr std; VAR &var1 &var2;VAR &var1 &var2; RUN;RUN; ODS OUTPUT CLOSE;ODS OUTPUT CLOSE; ODS LISTING;ODS LISTING; %MEND procmeans;%MEND procmeans;
%MACRO split(vars=, control=);%MACRO split(vars=, control=); %LOCAL count varlist chars; %LOCAL count varlist chars; %IF &vars NE %THEN %DO; %IF &vars NE %THEN %DO; %IF &control NE %THEN %DO; %IF &control NE %THEN %DO; %LET count=1 ; %LET count=1 ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %LET var = %QSCAN(&vars,&count); %LET var = %QSCAN(&vars,&count); %IF %SUBSTR(&var,1,1)=&control %THEN %IF %SUBSTR(&var,1,1)=&control %THEN %SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)) ;%SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)) ; %LET count = %EVAL(&count+1); %LET count = %EVAL(&count+1); %END ; %END ; %END; %END; %ELSE %DO; %ELSE %DO; %LET count=1 ; %LET count=1 ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %LET var = %QSCAN(&vars,&count); %LET var = %QSCAN(&vars,&count); %IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %UPCASE(%SUBSTR(&var,1,1))) NE 0 %THEN %UPCASE(%SUBSTR(&var,1,1))) NE 0 %THEN %QSCAN(&vars,&count) ; %QSCAN(&vars,&count) ; %LET count = %EVAL(&count+1); %LET count = %EVAL(&count+1); %END ; %END ; %END; %END; %END; %END; %MEND split; %MEND split;
%MACRO split(vars=, control=);%MACRO split(vars=, control=); %LOCAL count varlist chars; %LOCAL count varlist chars; %IF &vars NE %THEN %DO; %IF &vars NE %THEN %DO; %IF &control NE %THEN %DO; %IF &control NE %THEN %DO; %LET count=1 ; %LET count=1 ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %LET var = %QSCAN(&vars,&count); %LET var = %QSCAN(&vars,&count); %IF %SUBSTR(&var,1,1)=&control %THEN %IF %SUBSTR(&var,1,1)=&control %THEN %SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)) ;%SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)) ; %LET count = %EVAL(&count+1); %LET count = %EVAL(&count+1); %END ; %END ; %END; %END; %ELSE %DO; %ELSE %DO; %LET count=1 ; %LET count=1 ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %LET var = %QSCAN(&vars,&count); %LET var = %QSCAN(&vars,&count); %IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %UPCASE(%SUBSTR(&var,1,1))) NE 0 %THEN %UPCASE(%SUBSTR(&var,1,1))) NE 0 %THEN %QSCAN(&vars,&count) ; %QSCAN(&vars,&count) ; %LET count = %EVAL(&count+1); %LET count = %EVAL(&count+1); %END ; %END ; %END; %END; %END; %END; %MEND split; %MEND split;
%MACRO validate(__dset = ,%MACRO validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %GLOBAL _echeck ; %GLOBAL _echeck ; %LET _echeck=0 ;%LET _echeck=0 ; %LET _indflag=0 ;%LET _indflag=0 ; %* check that DATA exists *;%* check that DATA exists *; %IF &__dset = %STR( ) %THEN %DO;%IF &__dset = %STR( ) %THEN %DO; %let ex=NO ;%let ex=NO ; %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %do ;%else %do ; %if %sysfunc(exist(&__dset)) %then %let ex=YES;%if %sysfunc(exist(&__dset)) %then %let ex=YES; %else %let ex=NO ;%else %let ex=NO ; %end ;%end ; %if &ex=NO %then %do ;%if &ex=NO %then %do ; %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end;%end; %* check input parameters *; %* check input parameters *; %let dsnid = %sysfunc(open(&__dset)) ;%let dsnid = %sysfunc(open(&__dset)) ; %* check that response variable exists *; %* check that response variable exists *; %if &__var1 = %str( ) %then %do;%if &__var1 = %str( ) %then %do; %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do;%else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do; %let _echeck=1 ;%let _echeck=1 ; %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET &__dset Execution terminating.;&__dset Execution terminating.; %end; %end; %* check that response variable is numeric *;%* check that response variable is numeric *;
%MACRO validate(__dset = ,%MACRO validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %GLOBAL _echeck ; %GLOBAL _echeck ; %LET _echeck=0 ;%LET _echeck=0 ; %LET _indflag=0 ;%LET _indflag=0 ; %* check that DATA exists *;%* check that DATA exists *; %IF &__dset = %STR( ) %THEN %DO;%IF &__dset = %STR( ) %THEN %DO; %let ex=NO ;%let ex=NO ; %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %do ;%else %do ; %if %sysfunc(exist(&__dset)) %then %let ex=YES;%if %sysfunc(exist(&__dset)) %then %let ex=YES; %else %let ex=NO ;%else %let ex=NO ; %end ;%end ; %if &ex=NO %then %do ;%if &ex=NO %then %do ; %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end;%end; %* check input parameters *; %* check input parameters *; %let dsnid = %sysfunc(open(&__dset)) ;%let dsnid = %sysfunc(open(&__dset)) ; %* check that response variable exists *; %* check that response variable exists *; %if &__var1 = %str( ) %then %do;%if &__var1 = %str( ) %then %do; %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do;%else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do; %let _echeck=1 ;%let _echeck=1 ; %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET &__dset Execution terminating.;&__dset Execution terminating.; %end; %end; %* check that response variable is numeric *;%* check that response variable is numeric *;
%MACRO validate(__dset = ,%MACRO validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %GLOBAL _echeck ; %GLOBAL _echeck ; %LET _echeck=0 ;%LET _echeck=0 ; %LET _indflag=0 ;%LET _indflag=0 ; %* check that DATA exists *;%* check that DATA exists *; %IF &__dset = %STR( ) %THEN %DO;%IF &__dset = %STR( ) %THEN %DO; %let ex=NO ;%let ex=NO ; %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %do ;%else %do ; %if %sysfunc(exist(&__dset)) %then %let ex=YES;%if %sysfunc(exist(&__dset)) %then %let ex=YES; %else %let ex=NO ;%else %let ex=NO ; %end ;%end ; %if &ex=NO %then %do ;%if &ex=NO %then %do ; %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end;%end; %* check input parameters *; %* check input parameters *; %let dsnid = %sysfunc(open(&__dset)) ;%let dsnid = %sysfunc(open(&__dset)) ; %* check that response variable exists *; %* check that response variable exists *; %if &__var1 = %str( ) %then %do;%if &__var1 = %str( ) %then %do; %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do;%else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do; %let _echeck=1 ;%let _echeck=1 ; %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET &__dset Execution terminating.;&__dset Execution terminating.; %end; %end; %* check that response variable is numeric *;%* check that response variable is numeric *;
%MACRO validate(__dset = ,%MACRO validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %GLOBAL _echeck ; %GLOBAL _echeck ; %LET _echeck=0 ;%LET _echeck=0 ; %LET _indflag=0 ;%LET _indflag=0 ; %* check that DATA exists *;%* check that DATA exists *; %IF &__dset = %STR( ) %THEN %DO;%IF &__dset = %STR( ) %THEN %DO; %let ex=NO ;%let ex=NO ; %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %do ;%else %do ; %if %sysfunc(exist(&__dset)) %then %let ex=YES;%if %sysfunc(exist(&__dset)) %then %let ex=YES; %else %let ex=NO ;%else %let ex=NO ; %end ;%end ; %if &ex=NO %then %do ;%if &ex=NO %then %do ; %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end;%end; %* check input parameters *; %* check input parameters *; %let dsnid = %sysfunc(open(&__dset)) ;%let dsnid = %sysfunc(open(&__dset)) ; %* check that response variable exists *; %* check that response variable exists *; %if &__var1 = %str( ) %then %do;%if &__var1 = %str( ) %then %do; %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do;%else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do; %let _echeck=1 ;%let _echeck=1 ; %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET &__dset Execution terminating.;&__dset Execution terminating.; %end; %end; %* check that response variable is numeric *;%* check that response variable is numeric *;
%MACRO summaryset(merge_var = , base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCAL i datasets; PROC SQL NOPRINT ; SELECT TRIM(LIBNAME) || "." || MEMNAME INTO :datasets SEPARATED BY " " FROM DICTIONARY.TABLES WHERE LIBNAME = "WORK" AND MEMNAME LIKE UPCASE("&setlist%"); QUIT ; %LET i= 1; %DO %UNTIL (NOT %LENGTH(%SCAN(&datasets,&i,%STR( )))); PROC SORT DATA=%SCAN(&datasets,&i,%STR( )); BY &merge_var; RUN; %LET i = %EVAL(&i+1); %END; DATA summary_; MERGE &datasets; BY &merge_var; class_vars="&class_vars"; continuous_vars="&continuous_vars"; RUN; PROC APPEND BASE=&base DATA=&setlist FORCE; RUN; PROC DATASETS; DELETE &setlist: &delsets / MEMTYPE = DATA; QUIT; %MEND summaryset;
%MACRO summaryset(merge_var = , base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCAL i datasets; PROC SQL NOPRINT ; SELECT TRIM(LIBNAME) || "." || MEMNAME INTO :datasets SEPARATED BY " " FROM DICTIONARY.TABLES WHERE LIBNAME = "WORK" AND MEMNAME LIKE UPCASE("&setlist%"); QUIT ; %LET i= 1; %DO %UNTIL (NOT %LENGTH(%SCAN(&datasets,&i,%STR( )))); PROC SORT DATA=%SCAN(&datasets,&i,%STR( )); BY &merge_var; RUN; %LET i = %EVAL(&i+1); %END; DATA summary_; MERGE &datasets; BY &merge_var; class_vars="&class_vars"; continuous_vars="&continuous_vars"; RUN; PROC APPEND BASE=&base DATA=&setlist FORCE; RUN; PROC DATASETS; DELETE &setlist: &delsets / MEMTYPE = DATA; QUIT; %MEND summaryset;
![Page 234: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/234.jpg)
SUMMARYSET( )SUMMARYSET( )
%MACRO procglm (test = , data = , response = , independent = , class_vars = , continuous_vars = ); ODS LISTING CLOSE; ODS OUTPUT parameterestimates = summary_&test._glm (DROP = dependent probt tvalue RENAME = (Parameter = Key_var Estimate = &test._Estimate stderr = &test._stderr) WHERE =(UPCASE(key_var)=UPCASE("&independent"))) ; PROC GLM DATA=&data NAMELEN=32; %IF (NOT %LENGTH(%SCAN(&class_vars,1))) %THEN CLASS &class_vars ; ; MODEL &response = &continuous_vars &class_vars &independent; QUIT; ODS OUTPUT CLOSE; ODS LISTING;
%MEND procglm;
%MACRO procglm (test = , data = , response = , independent = , class_vars = , continuous_vars = ); ODS LISTING CLOSE; ODS OUTPUT parameterestimates = summary_&test._glm (DROP = dependent probt tvalue RENAME = (Parameter = Key_var Estimate = &test._Estimate stderr = &test._stderr) WHERE =(UPCASE(key_var)=UPCASE("&independent"))) ; PROC GLM DATA=&data NAMELEN=32; %IF (NOT %LENGTH(%SCAN(&class_vars,1))) %THEN CLASS &class_vars ; ; MODEL &response = &continuous_vars &class_vars &independent; QUIT; ODS OUTPUT CLOSE; ODS LISTING;
%MEND procglm;
%MACRO initbase(base=);%MACRO initbase(base=); OPTION NONOTES;OPTION NONOTES; DATA &base;DATA &base; LENGTH key_var response_var $32 LENGTH key_var response_var $32 key_label response_label $40key_label response_label $40 class_vars continuous_vars $200class_vars continuous_vars $200 mean stddev stderror n mean stddev stderror n crude_estimate adjusted_estimate crude_estimate adjusted_estimate crude_stderr adjusted_stderr 8.;crude_stderr adjusted_stderr 8.; LABEL key_var = "Name of Independent Variable"LABEL key_var = "Name of Independent Variable" key_label = "Label of Independent Variable" key_label = "Label of Independent Variable" response_var = "Name of Response Variable"response_var = "Name of Response Variable" response_label = "Label of Response Variable"response_label = "Label of Response Variable" mean = "PROC MEANS: Mean of Independent mean = "PROC MEANS: Mean of Independent Variable"Variable" n = "PROC MEANS: N of Independent Variable"n = "PROC MEANS: N of Independent Variable" stddev = "PROC MEANS: Standard Deviation Variable"stddev = "PROC MEANS: Standard Deviation Variable" stderror = "PROC MEANS: Standard Error IndeVariable"stderror = "PROC MEANS: Standard Error IndeVariable" crude_estimate = "Crude PROC GLM: Parameter Estimate"crude_estimate = "Crude PROC GLM: Parameter Estimate" crude_stderr = "Crude PROC GLM: Standard Error stimate"crude_stderr = "Crude PROC GLM: Standard Error stimate" djusted_estimate = "Adjusted PROC GLM: Parameter Estimate"djusted_estimate = "Adjusted PROC GLM: Parameter Estimate" adjusted_stderr = "Adjusted PROC GLM: Standard ErrEstimate"adjusted_stderr = "Adjusted PROC GLM: Standard ErrEstimate" class_vars = “Adjusted PROC GLM: Class covariates”class_vars = “Adjusted PROC GLM: Class covariates” continuous_vars = “Adjusted PROC GLM: Continuous variates”;continuous_vars = “Adjusted PROC GLM: Continuous variates”; FORMAT crude_estimate adjusted_estimate PVALUE6.4FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3 ;crude_stderr adjusted_stderr ODDSR8.3 ; RUN;RUN; OPTION NOTES;OPTION NOTES; DATA &base;DATA &base; SET &base;SET &base; STOP;STOP; RUN;RUN;%MEND initbase;%MEND initbase;
%MACRO initbase(base=);%MACRO initbase(base=); OPTION NONOTES;OPTION NONOTES; DATA &base;DATA &base; LENGTH key_var response_var $32 LENGTH key_var response_var $32 key_label response_label $40key_label response_label $40 class_vars continuous_vars $200class_vars continuous_vars $200 mean stddev stderror n mean stddev stderror n crude_estimate adjusted_estimate crude_estimate adjusted_estimate crude_stderr adjusted_stderr 8.;crude_stderr adjusted_stderr 8.; LABEL key_var = "Name of Independent Variable"LABEL key_var = "Name of Independent Variable" key_label = "Label of Independent Variable" key_label = "Label of Independent Variable" response_var = "Name of Response Variable"response_var = "Name of Response Variable" response_label = "Label of Response Variable"response_label = "Label of Response Variable" mean = "PROC MEANS: Mean of Independent mean = "PROC MEANS: Mean of Independent Variable"Variable" n = "PROC MEANS: N of Independent Variable"n = "PROC MEANS: N of Independent Variable" stddev = "PROC MEANS: Standard Deviation Variable"stddev = "PROC MEANS: Standard Deviation Variable" stderror = "PROC MEANS: Standard Error IndeVariable"stderror = "PROC MEANS: Standard Error IndeVariable" crude_estimate = "Crude PROC GLM: Parameter Estimate"crude_estimate = "Crude PROC GLM: Parameter Estimate" crude_stderr = "Crude PROC GLM: Standard Error stimate"crude_stderr = "Crude PROC GLM: Standard Error stimate" djusted_estimate = "Adjusted PROC GLM: Parameter Estimate"djusted_estimate = "Adjusted PROC GLM: Parameter Estimate" adjusted_stderr = "Adjusted PROC GLM: Standard ErrEstimate"adjusted_stderr = "Adjusted PROC GLM: Standard ErrEstimate" class_vars = “Adjusted PROC GLM: Class covariates”class_vars = “Adjusted PROC GLM: Class covariates” continuous_vars = “Adjusted PROC GLM: Continuous variates”;continuous_vars = “Adjusted PROC GLM: Continuous variates”; FORMAT crude_estimate adjusted_estimate PVALUE6.4FORMAT crude_estimate adjusted_estimate PVALUE6.4 crude_stderr adjusted_stderr ODDSR8.3 ;crude_stderr adjusted_stderr ODDSR8.3 ; RUN;RUN; OPTION NOTES;OPTION NOTES; DATA &base;DATA &base; SET &base;SET &base; STOP;STOP; RUN;RUN;%MEND initbase;%MEND initbase;
%MACRO analysisset(data = ,%MACRO analysisset(data = , var1 = ,var1 = , var2 = ,var2 = , variables = ) ;variables = ) ; DATA analysis_set ;DATA analysis_set ; SET &data(KEEP = &var1 &var2 &variables);SET &data(KEEP = &var1 &var2 &variables); IF NMISS(OF _numeric_) = 0 THEN OUTPUT; IF NMISS(OF _numeric_) = 0 THEN OUTPUT; RUN; RUN; %MEND analysisset;%MEND analysisset;
%MACRO analysisset(data = ,%MACRO analysisset(data = , var1 = ,var1 = , var2 = ,var2 = , variables = ) ;variables = ) ; DATA analysis_set ;DATA analysis_set ; SET &data(KEEP = &var1 &var2 &variables);SET &data(KEEP = &var1 &var2 &variables); IF NMISS(OF _numeric_) = 0 THEN OUTPUT; IF NMISS(OF _numeric_) = 0 THEN OUTPUT; RUN; RUN; %MEND analysisset;%MEND analysisset;
%MACRO procmeans(data = ,%MACRO procmeans(data = , var1 = ,var1 = , var2 =);var2 =); ODS LISTING CLOSE; ODS LISTING CLOSE; ODS OUTPUT summary=summary_means ODS OUTPUT summary=summary_means (DROP = &var1._mean &var1._n &var1._stderr (DROP = &var1._mean &var1._n &var1._stderr &var1._stddev&var1._stddev RENAME = (VNAME_&var1 = response_varRENAME = (VNAME_&var1 = response_var LABEL_&var1 = response_labelLABEL_&var1 = response_label VNAME_&var2 = key_varVNAME_&var2 = key_var LABEL_&var2 = key_labelLABEL_&var2 = key_label &var2._mean = mean&var2._mean = mean &var2._n = n&var2._n = n &var2._stderr = stderror&var2._stderr = stderror &var2._stddev = stddev) );&var2._stddev = stddev) ); PROC MEANS DATA= &data mean n stderr std;PROC MEANS DATA= &data mean n stderr std; VAR &var1 &var2;VAR &var1 &var2; RUN;RUN; ODS OUTPUT CLOSE;ODS OUTPUT CLOSE; ODS LISTING;ODS LISTING; %MEND procmeans;%MEND procmeans;
%MACRO procmeans(data = ,%MACRO procmeans(data = , var1 = ,var1 = , var2 =);var2 =); ODS LISTING CLOSE; ODS LISTING CLOSE; ODS OUTPUT summary=summary_means ODS OUTPUT summary=summary_means (DROP = &var1._mean &var1._n &var1._stderr (DROP = &var1._mean &var1._n &var1._stderr &var1._stddev&var1._stddev RENAME = (VNAME_&var1 = response_varRENAME = (VNAME_&var1 = response_var LABEL_&var1 = response_labelLABEL_&var1 = response_label VNAME_&var2 = key_varVNAME_&var2 = key_var LABEL_&var2 = key_labelLABEL_&var2 = key_label &var2._mean = mean&var2._mean = mean &var2._n = n&var2._n = n &var2._stderr = stderror&var2._stderr = stderror &var2._stddev = stddev) );&var2._stddev = stddev) ); PROC MEANS DATA= &data mean n stderr std;PROC MEANS DATA= &data mean n stderr std; VAR &var1 &var2;VAR &var1 &var2; RUN;RUN; ODS OUTPUT CLOSE;ODS OUTPUT CLOSE; ODS LISTING;ODS LISTING; %MEND procmeans;%MEND procmeans;
%MACRO split(vars=, control=);%MACRO split(vars=, control=); %LOCAL count varlist chars; %LOCAL count varlist chars; %IF &vars NE %THEN %DO; %IF &vars NE %THEN %DO; %IF &control NE %THEN %DO; %IF &control NE %THEN %DO; %LET count=1 ; %LET count=1 ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %LET var = %QSCAN(&vars,&count); %LET var = %QSCAN(&vars,&count); %IF %SUBSTR(&var,1,1)=&control %THEN %IF %SUBSTR(&var,1,1)=&control %THEN %SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)) ;%SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)) ; %LET count = %EVAL(&count+1); %LET count = %EVAL(&count+1); %END ; %END ; %END; %END; %ELSE %DO; %ELSE %DO; %LET count=1 ; %LET count=1 ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %LET var = %QSCAN(&vars,&count); %LET var = %QSCAN(&vars,&count); %IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %UPCASE(%SUBSTR(&var,1,1))) NE 0 %THEN %UPCASE(%SUBSTR(&var,1,1))) NE 0 %THEN %QSCAN(&vars,&count) ; %QSCAN(&vars,&count) ; %LET count = %EVAL(&count+1); %LET count = %EVAL(&count+1); %END ; %END ; %END; %END; %END; %END; %MEND split; %MEND split;
%MACRO split(vars=, control=);%MACRO split(vars=, control=); %LOCAL count varlist chars; %LOCAL count varlist chars; %IF &vars NE %THEN %DO; %IF &vars NE %THEN %DO; %IF &control NE %THEN %DO; %IF &control NE %THEN %DO; %LET count=1 ; %LET count=1 ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %LET var = %QSCAN(&vars,&count); %LET var = %QSCAN(&vars,&count); %IF %SUBSTR(&var,1,1)=&control %THEN %IF %SUBSTR(&var,1,1)=&control %THEN %SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)) ;%SYSFUNC(COMPRESS(%QSCAN(&vars,&count),&control)) ; %LET count = %EVAL(&count+1); %LET count = %EVAL(&count+1); %END ; %END ; %END; %END; %ELSE %DO; %ELSE %DO; %LET count=1 ; %LET count=1 ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %DO %UNTIL (%QSCAN(&vars,&count)= ) ; %LET var = %QSCAN(&vars,&count); %LET var = %QSCAN(&vars,&count); %IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %IF %INDEX(ABCDEFGHIJKLMNOPQRSTUVWXYZ_, %UPCASE(%SUBSTR(&var,1,1))) NE 0 %THEN %UPCASE(%SUBSTR(&var,1,1))) NE 0 %THEN %QSCAN(&vars,&count) ; %QSCAN(&vars,&count) ; %LET count = %EVAL(&count+1); %LET count = %EVAL(&count+1); %END ; %END ; %END; %END; %END; %END; %MEND split; %MEND split;
%MACRO validate(__dset = ,%MACRO validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %GLOBAL _echeck ; %GLOBAL _echeck ; %LET _echeck=0 ;%LET _echeck=0 ; %LET _indflag=0 ;%LET _indflag=0 ; %* check that DATA exists *;%* check that DATA exists *; %IF &__dset = %STR( ) %THEN %DO;%IF &__dset = %STR( ) %THEN %DO; %let ex=NO ;%let ex=NO ; %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %do ;%else %do ; %if %sysfunc(exist(&__dset)) %then %let ex=YES;%if %sysfunc(exist(&__dset)) %then %let ex=YES; %else %let ex=NO ;%else %let ex=NO ; %end ;%end ; %if &ex=NO %then %do ;%if &ex=NO %then %do ; %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end;%end; %* check input parameters *; %* check input parameters *; %let dsnid = %sysfunc(open(&__dset)) ;%let dsnid = %sysfunc(open(&__dset)) ; %* check that response variable exists *; %* check that response variable exists *; %if &__var1 = %str( ) %then %do;%if &__var1 = %str( ) %then %do; %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do;%else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do; %let _echeck=1 ;%let _echeck=1 ; %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET &__dset Execution terminating.;&__dset Execution terminating.; %end; %end; %* check that response variable is numeric *;%* check that response variable is numeric *;
%MACRO validate(__dset = ,%MACRO validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %GLOBAL _echeck ; %GLOBAL _echeck ; %LET _echeck=0 ;%LET _echeck=0 ; %LET _indflag=0 ;%LET _indflag=0 ; %* check that DATA exists *;%* check that DATA exists *; %IF &__dset = %STR( ) %THEN %DO;%IF &__dset = %STR( ) %THEN %DO; %let ex=NO ;%let ex=NO ; %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %do ;%else %do ; %if %sysfunc(exist(&__dset)) %then %let ex=YES;%if %sysfunc(exist(&__dset)) %then %let ex=YES; %else %let ex=NO ;%else %let ex=NO ; %end ;%end ; %if &ex=NO %then %do ;%if &ex=NO %then %do ; %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end;%end; %* check input parameters *; %* check input parameters *; %let dsnid = %sysfunc(open(&__dset)) ;%let dsnid = %sysfunc(open(&__dset)) ; %* check that response variable exists *; %* check that response variable exists *; %if &__var1 = %str( ) %then %do;%if &__var1 = %str( ) %then %do; %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do;%else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do; %let _echeck=1 ;%let _echeck=1 ; %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET &__dset Execution terminating.;&__dset Execution terminating.; %end; %end; %* check that response variable is numeric *;%* check that response variable is numeric *;
%MACRO validate(__dset = ,%MACRO validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %GLOBAL _echeck ; %GLOBAL _echeck ; %LET _echeck=0 ;%LET _echeck=0 ; %LET _indflag=0 ;%LET _indflag=0 ; %* check that DATA exists *;%* check that DATA exists *; %IF &__dset = %STR( ) %THEN %DO;%IF &__dset = %STR( ) %THEN %DO; %let ex=NO ;%let ex=NO ; %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %do ;%else %do ; %if %sysfunc(exist(&__dset)) %then %let ex=YES;%if %sysfunc(exist(&__dset)) %then %let ex=YES; %else %let ex=NO ;%else %let ex=NO ; %end ;%end ; %if &ex=NO %then %do ;%if &ex=NO %then %do ; %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end;%end; %* check input parameters *; %* check input parameters *; %let dsnid = %sysfunc(open(&__dset)) ;%let dsnid = %sysfunc(open(&__dset)) ; %* check that response variable exists *; %* check that response variable exists *; %if &__var1 = %str( ) %then %do;%if &__var1 = %str( ) %then %do; %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do;%else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do; %let _echeck=1 ;%let _echeck=1 ; %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET &__dset Execution terminating.;&__dset Execution terminating.; %end; %end; %* check that response variable is numeric *;%* check that response variable is numeric *;
%MACRO validate(__dset = ,%MACRO validate(__dset = , __var1 = ,__var1 = , __var2 = ,__var2 = , __ref = ,__ref = , __vars = ,__vars = , __out = ); __out = ); %GLOBAL _echeck ; %GLOBAL _echeck ; %LET _echeck=0 ;%LET _echeck=0 ; %LET _indflag=0 ;%LET _indflag=0 ; %* check that DATA exists *;%* check that DATA exists *; %IF &__dset = %STR( ) %THEN %DO;%IF &__dset = %STR( ) %THEN %DO; %let ex=NO ;%let ex=NO ; %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY %put Summary-> THE __DSET PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %do ;%else %do ; %if %sysfunc(exist(&__dset)) %then %let ex=YES;%if %sysfunc(exist(&__dset)) %then %let ex=YES; %else %let ex=NO ;%else %let ex=NO ; %end ;%end ; %if &ex=NO %then %do ;%if &ex=NO %then %do ; %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST %put Summary-> THE INPUT DATASET [ &__dset ] DOES NOT EXIST SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end;%end; %* check input parameters *; %* check input parameters *; %let dsnid = %sysfunc(open(&__dset)) ;%let dsnid = %sysfunc(open(&__dset)) ; %* check that response variable exists *; %* check that response variable exists *; %if &__var1 = %str( ) %then %do;%if &__var1 = %str( ) %then %do; %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED %put Summary-> THE __VAR1 PARAMETER WAS NOT SPECIFIED SUMMARY WILL STOP EXECUTING;SUMMARY WILL STOP EXECUTING; %let _echeck=1 ;%let _echeck=1 ; %end ; %end ; %else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do;%else %if %sysfunc(varnum(&dsnid,&__var1))=0 %then %do; %let _echeck=1 ;%let _echeck=1 ; %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET %put Summary-> THE VARIABLE &__var1 NOT FOUND IN DATASET &__dset Execution terminating.;&__dset Execution terminating.; %end; %end; %* check that response variable is numeric *;%* check that response variable is numeric *;
%MACRO summaryset(merge_var = , base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCAL i datasets; PROC SQL NOPRINT ; SELECT TRIM(LIBNAME) || "." || MEMNAME INTO :datasets SEPARATED BY " " FROM DICTIONARY.TABLES WHERE LIBNAME = "WORK" AND MEMNAME LIKE UPCASE("&setlist%"); QUIT ; %LET i= 1; %DO %UNTIL (NOT %LENGTH(%SCAN(&datasets,&i,%STR( )))); PROC SORT DATA=%SCAN(&datasets,&i,%STR( )); BY &merge_var; RUN; %LET i = %EVAL(&i+1); %END; DATA summary_; MERGE &datasets; BY &merge_var; class_vars="&class_vars"; continuous_vars="&continuous_vars"; RUN; PROC APPEND BASE=&base DATA=&setlist FORCE; RUN; PROC DATASETS; DELETE &setlist: &delsets / MEMTYPE = DATA; QUIT; %MEND summaryset;
%MACRO summaryset(merge_var = , base = , setlist = , delsets = , class_vars = , continuous_vars = ); %LOCAL i datasets; PROC SQL NOPRINT ; SELECT TRIM(LIBNAME) || "." || MEMNAME INTO :datasets SEPARATED BY " " FROM DICTIONARY.TABLES WHERE LIBNAME = "WORK" AND MEMNAME LIKE UPCASE("&setlist%"); QUIT ; %LET i= 1; %DO %UNTIL (NOT %LENGTH(%SCAN(&datasets,&i,%STR( )))); PROC SORT DATA=%SCAN(&datasets,&i,%STR( )); BY &merge_var; RUN; %LET i = %EVAL(&i+1); %END; DATA summary_; MERGE &datasets; BY &merge_var; class_vars="&class_vars"; continuous_vars="&continuous_vars"; RUN; PROC APPEND BASE=&base DATA=&setlist FORCE; RUN; PROC DATASETS; DELETE &setlist: &delsets / MEMTYPE = DATA; QUIT; %MEND summaryset;
![Page 235: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/235.jpg)
%MACRO supervisor(dataset = , %MACRO supervisor(dataset = , response = , response = , independent = , independent = , covariates = , covariates = , outfile = ,outfile = , report = ); report = );
%LOCAL echeck;%LOCAL echeck;
%LET response = %UPCASE(&response);%LET response = %UPCASE(&response); %LET independent = %UPCASE(&independent);%LET independent = %UPCASE(&independent);
%%validatevalidate(dset = &dataset,(dset = &dataset, var1 = &response,var1 = &response, var2 = &independent ,var2 = &independent , basevs = &covariates,basevs = &covariates, out = &outfile ) out = &outfile )
%IF &echeck = 1 %THEN %RETURN;%IF &echeck = 1 %THEN %RETURN;
%IF %SYSFUNC(EXIST(&outfile)) NE 1 %THEN %%IF %SYSFUNC(EXIST(&outfile)) NE 1 %THEN %initbaseinitbase(base=&outfile);(base=&outfile);
%LET class_vars =%split(vars=&covariates,control=);%LET class_vars =%split(vars=&covariates,control=); %LET continuous_vars =%split(vars=&covariates,control=@); %LET continuous_vars =%split(vars=&covariates,control=@);
%%analysissetanalysisset(data = &dataset ,(data = &dataset , var1 = &response ,var1 = &response , var2 = &independent ,var2 = &independent , variables = &class_vars &continuous_vars )variables = &class_vars &continuous_vars )
%%procmeansprocmeans(data = analysis_set,(data = analysis_set, var1 = &response ,var1 = &response ,
var2 = &independent )var2 = &independent )
%%procglmprocglm (test = Crude, (test = Crude, data = analysis_set,data = analysis_set, response = &response,response = &response, independent = &independent )independent = &independent )
%%procglmprocglm (test = Adjusted, (test = Adjusted, data = analysis_set,data = analysis_set, response = &response,response = &response, independent = &independent ,independent = &independent , class_vars = &class_vars,class_vars = &class_vars, continuous_vars = &continuous_vars )continuous_vars = &continuous_vars )
%%summarysetsummaryset(merge_var = key_var,(merge_var = key_var, base = GLM_summary,base = GLM_summary, setlist = SUMMARY_, setlist = SUMMARY_, delsets = analysis_set,delsets = analysis_set, class_vars = &class_vars ,class_vars = &class_vars , continuous_vars = &continuous_vars)continuous_vars = &continuous_vars) %IF %UPCASE(&report) = YES %THEN %%IF %UPCASE(&report) = YES %THEN %PrintReportPrintReport(data=&outfile);(data=&outfile);
%MEND supervisor;%MEND supervisor;
%MACRO supervisor(dataset = , %MACRO supervisor(dataset = , response = , response = , independent = , independent = , covariates = , covariates = , outfile = ,outfile = , report = ); report = );
%LOCAL echeck;%LOCAL echeck;
%LET response = %UPCASE(&response);%LET response = %UPCASE(&response); %LET independent = %UPCASE(&independent);%LET independent = %UPCASE(&independent);
%%validatevalidate(dset = &dataset,(dset = &dataset, var1 = &response,var1 = &response, var2 = &independent ,var2 = &independent , basevs = &covariates,basevs = &covariates, out = &outfile ) out = &outfile )
%IF &echeck = 1 %THEN %RETURN;%IF &echeck = 1 %THEN %RETURN;
%IF %SYSFUNC(EXIST(&outfile)) NE 1 %THEN %%IF %SYSFUNC(EXIST(&outfile)) NE 1 %THEN %initbaseinitbase(base=&outfile);(base=&outfile);
%LET class_vars =%split(vars=&covariates,control=);%LET class_vars =%split(vars=&covariates,control=); %LET continuous_vars =%split(vars=&covariates,control=@); %LET continuous_vars =%split(vars=&covariates,control=@);
%%analysissetanalysisset(data = &dataset ,(data = &dataset , var1 = &response ,var1 = &response , var2 = &independent ,var2 = &independent , variables = &class_vars &continuous_vars )variables = &class_vars &continuous_vars )
%%procmeansprocmeans(data = analysis_set,(data = analysis_set, var1 = &response ,var1 = &response ,
var2 = &independent )var2 = &independent )
%%procglmprocglm (test = Crude, (test = Crude, data = analysis_set,data = analysis_set, response = &response,response = &response, independent = &independent )independent = &independent )
%%procglmprocglm (test = Adjusted, (test = Adjusted, data = analysis_set,data = analysis_set, response = &response,response = &response, independent = &independent ,independent = &independent , class_vars = &class_vars,class_vars = &class_vars, continuous_vars = &continuous_vars )continuous_vars = &continuous_vars )
%%summarysetsummaryset(merge_var = key_var,(merge_var = key_var, base = GLM_summary,base = GLM_summary, setlist = SUMMARY_, setlist = SUMMARY_, delsets = analysis_set,delsets = analysis_set, class_vars = &class_vars ,class_vars = &class_vars , continuous_vars = &continuous_vars)continuous_vars = &continuous_vars) %IF %UPCASE(&report) = YES %THEN %%IF %UPCASE(&report) = YES %THEN %PrintReportPrintReport(data=&outfile);(data=&outfile);
%MEND supervisor;%MEND supervisor;
SUPERVISOR( )SUPERVISOR( )
![Page 236: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/236.jpg)
SUPERVISOR( )SUPERVISOR( )
%MACRO MACRO supervisor;;(dataset = , response = , independent = , covariates = , outfile = , report = );
%MACRO MACRO supervisor;;(dataset = , response = , independent = , covariates = , outfile = , report = );
![Page 237: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/237.jpg)
SUPERVISOR( )SUPERVISOR( )
%MACRO MACRO supervisor(dataset = , response = , independent = , covariates = , outfile = , report = );
%MACRO MACRO supervisor(dataset = , response = , independent = , covariates = , outfile = , report = );
![Page 238: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/238.jpg)
SUPERVISOR( )SUPERVISOR( )
%MACROMACRO supervisor(dataset = , response = , independent = , covariates = , outfile = , report = );
%LOCALLOCAL echeck;
%MACROMACRO supervisor(dataset = , response = , independent = , covariates = , outfile = , report = );
%LOCALLOCAL echeck;
![Page 239: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/239.jpg)
SUPERVISOR( )SUPERVISOR( )
%MACROMACRO supervisor(dataset = , response = , independent = , covariates = , outfile = , report = );
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
%MACROMACRO supervisor(dataset = , response = , independent = , covariates = , outfile = , report = );
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
![Page 240: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/240.jpg)
SUPERVISOR( )SUPERVISOR( )
response = , independent = , covariates = , outfile = , report = );
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
response = , independent = , covariates = , outfile = , report = );
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
![Page 241: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/241.jpg)
SUPERVISOR( )SUPERVISOR( )
independent = , covariates = , outfile = , report = );
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
independent = , covariates = , outfile = , report = );
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
![Page 242: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/242.jpg)
SUPERVISOR( )SUPERVISOR( )
covariates = , outfile = , report = );
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
covariates = , outfile = , report = );
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
![Page 243: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/243.jpg)
SUPERVISOR( )SUPERVISOR( )
outfile = , report = );
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
outfile = , report = );
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
![Page 244: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/244.jpg)
SUPERVISOR( )SUPERVISOR( )
report = );
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
report = );
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
![Page 245: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/245.jpg)
SUPERVISOR( )SUPERVISOR( )
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
![Page 246: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/246.jpg)
SUPERVISOR( )SUPERVISOR( )
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
![Page 247: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/247.jpg)
SUPERVISOR( )SUPERVISOR( )
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
%validate(dset = &dataset, var1 = &response, var2 = &independent , basevs = &covariates, out = &outfile )
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
%validate(dset = &dataset, var1 = &response, var2 = &independent , basevs = &covariates, out = &outfile )
![Page 248: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/248.jpg)
SUPERVISOR( )SUPERVISOR( )
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
%validate(dset = &dataset&dataset, var1 = &response&response, var2 = &independent&independent , basevs = &covariates&covariates, out = &outfile&outfile )
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
%validate(dset = &dataset&dataset, var1 = &response&response, var2 = &independent&independent , basevs = &covariates&covariates, out = &outfile&outfile )
![Page 249: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/249.jpg)
SUPERVISOR( )SUPERVISOR( )
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
%validate(dset = &dataset, var1 = &response, var2 = &independent , basevs = &covariates, out = &outfile ) %IFIF &echeck = 1 %THENTHEN %RETURNRETURN;
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
%validate(dset = &dataset, var1 = &response, var2 = &independent , basevs = &covariates, out = &outfile ) %IFIF &echeck = 1 %THENTHEN %RETURNRETURN;
![Page 250: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/250.jpg)
SUPERVISOR( )SUPERVISOR( )
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
%validate(dset = &dataset, var1 = &response, var2 = &independent , basevs = &covariates, out = &outfile ) %IFIF &echeck = 1 %THENTHEN %RETURNRETURN;
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
%validate(dset = &dataset, var1 = &response, var2 = &independent , basevs = &covariates, out = &outfile ) %IFIF &echeck = 1 %THENTHEN %RETURNRETURN;
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
![Page 251: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/251.jpg)
SUPERVISOR( )SUPERVISOR( )
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
%validate(dset = &dataset, var1 = &response, var2 = &independent , basevs = &covariates, out = &outfile ) %IFIF &echeck = 1 %THENTHEN %RETURNRETURN;
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
%validate(dset = &dataset, var1 = &response, var2 = &independent , basevs = &covariates, out = &outfile ) %IFIF &echeck = 1 %THENTHEN %RETURNRETURN;
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
![Page 252: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/252.jpg)
SUPERVISOR( )SUPERVISOR( )
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
%validate(dset = &dataset, var1 = &response, var2 = &independent , basevs = &covariates, out = &outfile ) %IFIF &echeck = 1 %THENTHEN %RETURNRETURN;
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
%validate(dset = &dataset, var1 = &response, var2 = &independent , basevs = &covariates, out = &outfile ) %IFIF &echeck = 1 %THENTHEN %RETURNRETURN;
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
![Page 253: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/253.jpg)
SUPERVISOR( )SUPERVISOR( )
%LETLET independent = %UPCASEUPCASE(&independent);
%validate(dset = &dataset, var1 = &response, var2 = &independent , basevs = &covariates, out = &outfile ) %IFIF &echeck = 1 %THENTHEN %RETURNRETURN;
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
%LETLET independent = %UPCASEUPCASE(&independent);
%validate(dset = &dataset, var1 = &response, var2 = &independent , basevs = &covariates, out = &outfile ) %IFIF &echeck = 1 %THENTHEN %RETURNRETURN;
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
![Page 254: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/254.jpg)
SUPERVISOR( )SUPERVISOR( )
%validate(dset = &dataset, var1 = &response, var2 = &independent , basevs = &covariates, out = &outfile ) %IFIF &echeck = 1 %THENTHEN %RETURNRETURN;
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
%validate(dset = &dataset, var1 = &response, var2 = &independent , basevs = &covariates, out = &outfile ) %IFIF &echeck = 1 %THENTHEN %RETURNRETURN;
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
![Page 255: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/255.jpg)
SUPERVISOR( )SUPERVISOR( )
%validate(dset = &dataset, var1 = &response, var2 = &independent , basevs = &covariates, out = &outfile ) %IFIF &echeck = 1 %THENTHEN %RETURNRETURN;
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
%validate(dset = &dataset, var1 = &response, var2 = &independent , basevs = &covariates, out = &outfile ) %IFIF &echeck = 1 %THENTHEN %RETURNRETURN;
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
![Page 256: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/256.jpg)
SUPERVISOR( )SUPERVISOR( )
var1 = &response, var2 = &independent , basevs = &covariates, out = &outfile ) %IFIF &echeck = 1 %THENTHEN %RETURNRETURN;
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
var1 = &response, var2 = &independent , basevs = &covariates, out = &outfile ) %IFIF &echeck = 1 %THENTHEN %RETURNRETURN;
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
![Page 257: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/257.jpg)
SUPERVISOR( )SUPERVISOR( )
var2 = &independent , basevs = &covariates, out = &outfile ) %IFIF &echeck = 1 %THENTHEN %RETURNRETURN;
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
var2 = &independent , basevs = &covariates, out = &outfile ) %IFIF &echeck = 1 %THENTHEN %RETURNRETURN;
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
![Page 258: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/258.jpg)
SUPERVISOR( )SUPERVISOR( )
basevs = &covariates, out = &outfile ) %IFIF &echeck = 1 %THENTHEN %RETURNRETURN;
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
basevs = &covariates, out = &outfile ) %IFIF &echeck = 1 %THENTHEN %RETURNRETURN;
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
![Page 259: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/259.jpg)
SUPERVISOR( )SUPERVISOR( )
out = &outfile ) %IFIF &echeck = 1 %THENTHEN %RETURNRETURN;
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
out = &outfile ) %IFIF &echeck = 1 %THENTHEN %RETURNRETURN;
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
![Page 260: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/260.jpg)
SUPERVISOR( )SUPERVISOR( )
%IFIF &echeck = 1 %THENTHEN %RETURNRETURN;
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
%IFIF &echeck = 1 %THENTHEN %RETURNRETURN;
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
![Page 261: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/261.jpg)
SUPERVISOR( )SUPERVISOR( )
%IFIF &echeck = 1 %THENTHEN %RETURNRETURN;
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
%IFIF &echeck = 1 %THENTHEN %RETURNRETURN;
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
![Page 262: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/262.jpg)
SUPERVISOR( )SUPERVISOR( )
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
![Page 263: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/263.jpg)
SUPERVISOR( )SUPERVISOR( )
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
%LET class_vars =%split(vars=&covariates,control=); %LET continuous_vars=%split(vars=&covariates,control=@);
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
%LET class_vars =%split(vars=&covariates,control=); %LET continuous_vars=%split(vars=&covariates,control=@);
![Page 264: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/264.jpg)
SUPERVISOR( )SUPERVISOR( )
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
%LETLET class_vars =%split(vars=&covariates,control=); %LET continuous_vars=%split(vars=&covariates,control=@);
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
%LETLET class_vars =%split(vars=&covariates,control=); %LET continuous_vars=%split(vars=&covariates,control=@);
![Page 265: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/265.jpg)
SUPERVISOR( )SUPERVISOR( )
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
%LETLET class_vars =%split(vars=&covariates,control=); %LETLET continuous_vars=%split(vars=&covariates,control=@);
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
%LETLET class_vars =%split(vars=&covariates,control=); %LETLET continuous_vars=%split(vars=&covariates,control=@);
![Page 266: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/266.jpg)
SUPERVISOR( )SUPERVISOR( )
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
%LETLET class_vars =%split(vars=&covariates,control=); %LETLET continuous_vars=%split(vars=&covariates,control=@);
%analysisset(data = &dataset , var1 = &response , var2 = &independent , variables = &class_vars &continuous_vars )
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
%LETLET class_vars =%split(vars=&covariates,control=); %LETLET continuous_vars=%split(vars=&covariates,control=@);
%analysisset(data = &dataset , var1 = &response , var2 = &independent , variables = &class_vars &continuous_vars )
![Page 267: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/267.jpg)
SUPERVISOR( )SUPERVISOR( )
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
%LETLET class_vars =%split(vars=&covariates,control=); %LETLET continuous_vars=%split(vars=&covariates,control=@);
%analysisset(data = &dataset , var1 = &response , var2 = &independent , variables = &class_vars &continuous_vars )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
%LETLET class_vars =%split(vars=&covariates,control=); %LETLET continuous_vars=%split(vars=&covariates,control=@);
%analysisset(data = &dataset , var1 = &response , var2 = &independent , variables = &class_vars &continuous_vars )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
![Page 268: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/268.jpg)
SUPERVISOR( )SUPERVISOR( )
%initbase(base=&outfile);
%LETLET class_vars =%split(vars=&covariates,control=); %LETLET continuous_vars=%split(vars=&covariates,control=@);
%analysisset(data = &dataset , var1 = &response , var2 = &independent , variables = &class_vars &continuous_vars )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
%initbase(base=&outfile);
%LETLET class_vars =%split(vars=&covariates,control=); %LETLET continuous_vars=%split(vars=&covariates,control=@);
%analysisset(data = &dataset , var1 = &response , var2 = &independent , variables = &class_vars &continuous_vars )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
![Page 269: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/269.jpg)
SUPERVISOR( )SUPERVISOR( )
%LETLET class_vars =%split(vars=&covariates,control=); %LETLET continuous_vars=%split(vars=&covariates,control=@);
%analysisset(data = &dataset , var1 = &response , var2 = &independent , variables = &class_vars &continuous_vars )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
%LETLET class_vars =%split(vars=&covariates,control=); %LETLET continuous_vars=%split(vars=&covariates,control=@);
%analysisset(data = &dataset , var1 = &response , var2 = &independent , variables = &class_vars &continuous_vars )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
![Page 270: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/270.jpg)
SUPERVISOR( )SUPERVISOR( )
%LETLET class_vars =%split(vars=&covariates,control=); %LETLET continuous_vars=%split(vars=&covariates,control=@);
%analysisset(data = &dataset , var1 = &response , var2 = &independent , variables = &class_vars &continuous_vars )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
%LETLET class_vars =%split(vars=&covariates,control=); %LETLET continuous_vars=%split(vars=&covariates,control=@);
%analysisset(data = &dataset , var1 = &response , var2 = &independent , variables = &class_vars &continuous_vars )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
![Page 271: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/271.jpg)
SUPERVISOR( )SUPERVISOR( )
%LETLET continuous_vars=%split(vars=&covariates,control=@);
%analysisset(data = &dataset , var1 = &response , var2 = &independent , variables = &class_vars &continuous_vars )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
%LETLET continuous_vars=%split(vars=&covariates,control=@);
%analysisset(data = &dataset , var1 = &response , var2 = &independent , variables = &class_vars &continuous_vars )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
![Page 272: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/272.jpg)
SUPERVISOR( )SUPERVISOR( )
%analysisset(data = &dataset , var1 = &response , var2 = &independent , variables = &class_vars &continuous_vars )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
%analysisset(data = &dataset , var1 = &response , var2 = &independent , variables = &class_vars &continuous_vars )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
![Page 273: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/273.jpg)
SUPERVISOR( )SUPERVISOR( )
%analysisset(data = &dataset , var1 = &response , var2 = &independent , variables = &class_vars &continuous_vars )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
%analysisset(data = &dataset , var1 = &response , var2 = &independent , variables = &class_vars &continuous_vars )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
![Page 274: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/274.jpg)
SUPERVISOR( )SUPERVISOR( )
var1 = &response , var2 = &independent , variables = &class_vars &continuous_vars )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
var1 = &response , var2 = &independent , variables = &class_vars &continuous_vars )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
![Page 275: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/275.jpg)
SUPERVISOR( )SUPERVISOR( )
var2 = &independent , variables = &class_vars &continuous_vars )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
var2 = &independent , variables = &class_vars &continuous_vars )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
![Page 276: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/276.jpg)
SUPERVISOR( )SUPERVISOR( )
variables = &class_vars &continuous_vars )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
variables = &class_vars &continuous_vars )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
![Page 277: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/277.jpg)
SUPERVISOR( )SUPERVISOR( )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
![Page 278: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/278.jpg)
SUPERVISOR( )SUPERVISOR( )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
![Page 279: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/279.jpg)
SUPERVISOR( )SUPERVISOR( )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
%procglm (test = CrudeCrude, data = analysis_set, response = &response, independent = &independent )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
%procglm (test = CrudeCrude, data = analysis_set, response = &response, independent = &independent )
![Page 280: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/280.jpg)
SUPERVISOR( )SUPERVISOR( )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
%procglm (test = CrudeCrude, data = analysis_set, response = &response, independent = &independent )
%procglm (test = AdjustedAdjusted, data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
%procglm (test = CrudeCrude, data = analysis_set, response = &response, independent = &independent )
%procglm (test = AdjustedAdjusted, data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
![Page 281: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/281.jpg)
Crude_ Crude_ key_var Estimate StdErr years_on_farm 0.0299 0.0011
Adjusted_ Adjusted_ key_var Estimate StdErr
years_on_farm 0.0139 0.0019
SUMMARY_MEANSSUMMARY_MEANS
SUMMARY_CRUDE_GLMSUMMARY_CRUDE_GLM
SUMMARY_ADJUSTED_GLM SUMMARY_ADJUSTED_GLM key_var response_var mean n stderr stddev years_on_farm bmi 36.213 53482 0.079 18.259
![Page 282: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/282.jpg)
SUPERVISOR( )SUPERVISOR( )
var1 = &response , var2 = &independent )
%procglm (test = CrudeCrude, data = analysis_set, response = &response, independent = &independent )
%procglm (test = AdjustedAdjusted, data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
var1 = &response , var2 = &independent )
%procglm (test = CrudeCrude, data = analysis_set, response = &response, independent = &independent )
%procglm (test = AdjustedAdjusted, data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
![Page 283: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/283.jpg)
SUPERVISOR( )SUPERVISOR( )
var2 = &independent )
%procglm (test = CrudeCrude, data = analysis_set, response = &response, independent = &independent )
%procglm (test = AdjustedAdjusted, data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
var2 = &independent )
%procglm (test = CrudeCrude, data = analysis_set, response = &response, independent = &independent )
%procglm (test = AdjustedAdjusted, data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
![Page 284: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/284.jpg)
SUPERVISOR( )SUPERVISOR( )
%procglm (test = CrudeCrude, data = analysis_set, response = &response, independent = &independent )
%procglm (test = AdjustedAdjusted, data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
%procglm (test = CrudeCrude, data = analysis_set, response = &response, independent = &independent )
%procglm (test = AdjustedAdjusted, data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
![Page 285: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/285.jpg)
SUPERVISOR( )SUPERVISOR( )
%procglm (test = CrudeCrude, data = analysis_set, response = &response, independent = &independent )
%procglm (test = AdjustedAdjusted, data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
%procglm (test = CrudeCrude, data = analysis_set, response = &response, independent = &independent )
%procglm (test = AdjustedAdjusted, data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
![Page 286: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/286.jpg)
SUPERVISOR( )SUPERVISOR( )
data = analysis_set, response = &response, independent = &independent )
%procglm (test = AdjustedAdjusted, data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
data = analysis_set, response = &response, independent = &independent )
%procglm (test = AdjustedAdjusted, data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
![Page 287: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/287.jpg)
SUPERVISOR( )SUPERVISOR( )
response = &response, independent = &independent )
%procglm (test = AdjustedAdjusted, data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
response = &response, independent = &independent )
%procglm (test = AdjustedAdjusted, data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
![Page 288: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/288.jpg)
SUPERVISOR( )SUPERVISOR( )
independent = &independent )
%procglm (test = AdjustedAdjusted, data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
independent = &independent )
%procglm (test = AdjustedAdjusted, data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
![Page 289: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/289.jpg)
SUPERVISOR( )SUPERVISOR( )
%procglm (test = AdjustedAdjusted, data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
%procglm (test = AdjustedAdjusted, data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
![Page 290: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/290.jpg)
SUPERVISOR( )SUPERVISOR( )
%procglm (test = AdjustedAdjusted, data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
%procglm (test = AdjustedAdjusted, data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
![Page 291: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/291.jpg)
SUPERVISOR( )SUPERVISOR( )
data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
![Page 292: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/292.jpg)
SUPERVISOR( )SUPERVISOR( )
data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
%summaryset(merge_var = key_var, base = GLM_summary, setlist = SUMMARY_, delsets = analysis_set, class_vars = &class_vars , continuous_vars = &continuous_vars)
data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
%summaryset(merge_var = key_var, base = GLM_summary, setlist = SUMMARY_, delsets = analysis_set, class_vars = &class_vars , continuous_vars = &continuous_vars)
![Page 293: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/293.jpg)
The CONTENTS Procedure (abbreviated)
Data Set Name WORK.GLM_SUMMARY Observations 1
# Variable Type Len Format Label
1 key_var Char 32 Name of Independent Variable 2 response_var Char 32 Name of Response Variable 3 key_label Char 40 Label of Independent Variable 4 response_label Char 40 Label of Response Variable 5 class_vars Char 200 Adjusted PROC GLM: Class covariates 6 continuous_vars Char 200 Adjusted PROC GLM: Continuous covariates 7 mean Num 8 PROC MEANS: Mean of Independent Variable 8 stddev Num 8 PROC MEANS: Standard Deviation of Independent Variable 9 stderror Num 8 PROC MEANS: Standard Error of Independent Variable10 n Num 8 PROC MEANS: N of Independent Variable11 crude_estimate Num 8 PVALUE6.4 Crude PROC GLM: Parameter Estimate12 adjusted_estimate Num 8 PVALUE6.4 Adjusted PROC GLM: Parameter Estimate13 crude_stderr Num 8 ODDSR8.3 Crude PROC GLM: Standard Error of Estimate14 adjusted_stderr Num 8 ODDSR8.3 Adjusted PROC GLM: Standard Error of Estimate
Creates the GLM_SUMMARY Data SetCreates the GLM_SUMMARY Data Set
![Page 294: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/294.jpg)
SUPERVISOR( )SUPERVISOR( )
data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
%summaryset(merge_var = key_var, base = GLM_summary, setlist = SUMMARY_, delsets = analysis_set, class_vars = &class_vars , continuous_vars = &continuous_vars)
%IFIF %UPCASEUPCASE(&report) = YES %THENTHEN %PrintReport(data=&outfile);
data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
%summaryset(merge_var = key_var, base = GLM_summary, setlist = SUMMARY_, delsets = analysis_set, class_vars = &class_vars , continuous_vars = &continuous_vars)
%IFIF %UPCASEUPCASE(&report) = YES %THENTHEN %PrintReport(data=&outfile);
![Page 295: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/295.jpg)
SUPERVISOR( )SUPERVISOR( )
data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
%summaryset(merge_var = key_var, base = GLM_summary, setlist = SUMMARY_, delsets = analysis_set, class_vars = &class_vars , continuous_vars = &continuous_vars)
%IFIF %UPCASEUPCASE(&report) = YES %THENTHEN %PrintReport(data=&outfile);
%MENDMEND supervisor;
data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
%summaryset(merge_var = key_var, base = GLM_summary, setlist = SUMMARY_, delsets = analysis_set, class_vars = &class_vars , continuous_vars = &continuous_vars)
%IFIF %UPCASEUPCASE(&report) = YES %THENTHEN %PrintReport(data=&outfile);
%MENDMEND supervisor;
![Page 296: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/296.jpg)
Two Invocatoins of the MacroTwo Invocatoins of the Macro
%supervisor(dataset = mydata, response = bmi, independent = years_on_farm, covariates = @age race gender @height, outfile = glm_summary, report = NO) %supervisor(dataset = mydata, response = bmi, independent = acres, covariates = @age race gender @height, outfile = glm_summary, report = YESYES)
%supervisor(dataset = mydata, response = bmi, independent = years_on_farm, covariates = @age race gender @height, outfile = glm_summary, report = NO) %supervisor(dataset = mydata, response = bmi, independent = acres, covariates = @age race gender @height, outfile = glm_summary, report = YESYES)
![Page 297: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/297.jpg)
Produce the Following ReportProduce the Following Report
Response Variable = Body Mass Index Class Covariates = race gender Continuous Covariates = age height Independent Mean Std Model Parameter Estimates Variable Error N Crude SE Adjusted SE (a) (a) (a) (b) (b) (c) (c) ------------------------------------------------------------------------
Years lived on farm 36.21 0.08 28166 0.030 0.001 0.021 0.002 Acres planted crops 47.03 0.04 28209 0.022 0.001 0.024 0.002
![Page 298: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/298.jpg)
Produce the Following ReportProduce the Following Report
Response Variable = Body Mass Index Class Covariates = race gender Continuous Covariates = age height Independent Mean Std Model Parameter Estimates Variable Error N Crude SE Adjusted SE (a) (a) (a) (b) (b) (c) (c) ------------------------------------------------------------------------
Years lived on farm 36.21 0.08 2816636.21 0.08 28166 0.030 0.001 0.021 0.002 Acres planted crops 47.03 0.04 2820947.03 0.04 28209 0.022 0.001 0.024 0.002
(a) (a) PROC MEANS PROC MEANS
![Page 299: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/299.jpg)
Produce the Following ReportProduce the Following Report
Response Variable = Body Mass Index Class Covariates = race gender Continuous Covariates = age height Independent Mean Std Model Parameter Estimates Variable Error N Crude SE Adjusted SE (a) (a) (a) (b) (b) (c) (c) ------------------------------------------------------------------------
Years lived on farm 36.21 0.08 2816636.21 0.08 28166 0.030 0.0010.030 0.001 0.021 0.002 Acres planted crops 47.03 0.04 2820947.03 0.04 28209 0.022 0.0010.022 0.001 0.024 0.002
(a)(a) PROC MEANS PROC MEANS
(b)(b) Crude PROC GLMCrude PROC GLM
![Page 300: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/300.jpg)
Produce the Following ReportProduce the Following Report
Response Variable = Body Mass Index Class Covariates = race gender Continuous Covariates = age height Independent Mean Std Model Parameter Estimates Variable Error N Crude SE Adjusted SE (a) (a) (a) (b) (b) (c) (c) ------------------------------------------------------------------------
Years lived on farm 36.21 0.08 2816636.21 0.08 28166 0.030 0.0010.030 0.001 0.021 0.0020.021 0.002 Acres planted crops 47.03 0.04 2820947.03 0.04 28209 0.022 0.0010.022 0.001 0.024 0.0020.024 0.002
(a)(a) PROC MEANS PROC MEANS
(b)(b) Crude PROC GLMCrude PROC GLM
(c)(c) Adjusted PROC GLMAdjusted PROC GLM
![Page 301: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/301.jpg)
Flexibility of the DesignFlexibility of the Design
![Page 302: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/302.jpg)
Flexibility of the DesignFlexibility of the Design
Change from a Linear to a Logistic Regression AnalysisChange from a Linear to a Logistic Regression Analysis
![Page 303: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/303.jpg)
Flexibility of the DesignFlexibility of the Design
Change from a Linear to a Logistic Regression AnalysisChange from a Linear to a Logistic Regression Analysis
In this Example we are Switching from a Continuous to a In this Example we are Switching from a Continuous to a Categorical Independent VariableCategorical Independent Variable
![Page 304: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/304.jpg)
Five Main ChangesFive Main Changes
Change from Analysis of Variance to Logistic Regression
Alter the Continuous Independent Variable to Categorical
![Page 305: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/305.jpg)
Five Main ChangesFive Main Changes
1.1. Adjust BASE data set to handle the new analysisAdjust BASE data set to handle the new analysis
![Page 306: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/306.jpg)
Five Main ChangesFive Main Changes
1.1. Adjust BASE data set to handle the new analysisAdjust BASE data set to handle the new analysis
2.2. Replace the PROCMEANS module with a Replace the PROCMEANS module with a PROCFREQ modulePROCFREQ module
![Page 307: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/307.jpg)
Five Main ChangesFive Main Changes
1. Adjust BASE data set to handle the new analysis
2. Replace the PROCMEANS module with a PROCFREQ module
3. Replace the PROCGLM module with a PROCLOGISTIC module
![Page 308: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/308.jpg)
Five Main ChangesFive Main Changes
1. Adjust BASE data set to handle the new analysis
2. Replace the PROCMEANS module with a PROCFREQ module
3. Replace the PROCGLM module with a PROCLOGISTIC module
4. Add a parameter passed to the SUPERVISOR( ) macro to identify the referent level of the independent variable
![Page 309: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/309.jpg)
Five Main ChangesFive Main Changes
1. Adjust BASE data set to handle the new analysis
2. Replace the PROCMEANS module with a PROCFREQ module
3. Replace the PROCGLM module with a PROCLOGISTIC module
4. Add a parameter passed to the SUPERVISOR( ) macro to identify the referent level of the independent variable
5. The key variable will change from the name of the independent variable (key_var) to its value (key_value)
![Page 310: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/310.jpg)
INITBASE( )INITBASE( )
![Page 311: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/311.jpg)
PROCFREQ( ) Macro ModulePROCFREQ( ) Macro Module
![Page 312: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/312.jpg)
PROCFREQ( ) Macro ModulePROCFREQ( ) Macro Module
Produce a dataset of counts & percentagesProduce a dataset of counts & percentages
![Page 313: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/313.jpg)
PROCFREQ( ) Macro ModulePROCFREQ( ) Macro Module
Produce a dataset of counts & percentagesProduce a dataset of counts & percentagesPROC FREQPROC FREQ
![Page 314: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/314.jpg)
The FREQ Procedure Table of DaysMix by asthma
DaysMix(Average days per year mixed pesticides) asthma (Ever Diagnosed with asthma) Frequency‚ Percent ‚ Row Pct ‚ Col Pct ‚No ‚Yes ‚ Total ƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆ None ‚ 6658 ‚ 346 ‚ 7004 ‚ 38.15 ‚ 1.98 ‚ 40.14 ‚ 95.06 ‚ 4.94 ‚ ‚ 39.84 ‚ 46.95 ‚ ƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆ 1-90 Days‚ 6358 ‚ 278 ‚ 6636 ‚ 36.44 ‚ 1.59 ‚ 38.03 ‚ 95.81 ‚ 4.19 ‚ ‚ 38.04 ‚ 37.72 ‚ ƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆ > 90 Days‚ 3697 ‚ 113 ‚ 3810 ‚ 21.19 ‚ 0.65 ‚ 21.83 ‚ 97.03 ‚ 2.97 ‚ ‚ 22.12 ‚ 15.33 ‚ ƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆ Total 16713 737 17450 95.78 4.22 100.00
Frequency Missing = 4945
![Page 315: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/315.jpg)
The FREQ Procedure Table of DaysMix by asthma
DaysMix(Average days per year mixed pesticides) asthma (Ever Diagnosed with asthma) Frequency‚ Percent ‚ Row Pct ‚ Col Pct ‚No ‚Yes ‚ Total ƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆ None ‚ 66586658 ‚ 346 346 ‚ 7004 ‚ 38.15 ‚ 1.98 ‚ 40.14 ‚ 95.06 ‚ 4.94 ‚ ‚ 39.8439.84 ‚ 46.9546.95 ‚ ƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆ 1-90 Days‚ 63586358 ‚ 278278 ‚ 6636 ‚ 36.44 ‚ 1.59 ‚ 38.03 ‚ 95.81 ‚ 4.19 ‚ ‚ 38.0438.04 ‚ 37.7237.72 ‚ ƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆ > 90 Days‚ 3697 3697 ‚ 113 113 ‚ 3810 ‚ 21.19 ‚ 0.65 ‚ 21.83 ‚ 97.03 ‚ 2.97 ‚ ‚ 22.1222.12 ‚ 15.3315.33 ‚ ƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒˆ Total 16713 737 17450 95.78 4.22 100.00
Frequency Missing = 4945
![Page 316: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/316.jpg)
%MACRO ctab(__dset = , __col_var = , __row_var = );
ODS LISTING CLOSE; ODS OUTPUT CrossTabFreqs = __ctab (KEEP = &__col_var &__row_var _TYPE_ FREQUENCY COLPERCENT);
PROC FREQ DATAPROC FREQ DATA=&data; TABLESTABLES &row_var * &col_var; RUNRUN;
ODS OUTPUT CLOSE; ODS LISTING;
%MACRO ctab(__dset = , __col_var = , __row_var = );
ODS LISTING CLOSE; ODS OUTPUT CrossTabFreqs = __ctab (KEEP = &__col_var &__row_var _TYPE_ FREQUENCY COLPERCENT);
PROC FREQ DATAPROC FREQ DATA=&data; TABLESTABLES &row_var * &col_var; RUNRUN;
ODS OUTPUT CLOSE; ODS LISTING;
PROCFREQ( )PROCFREQ( )
![Page 317: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/317.jpg)
%MACRO ctab(__dset = , __col_var = , __row_var = );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT CrossTabFreqs = summary_freq (KEEPKEEP = &col_var &row_var _TYPE_ FREQUENCY COLPERCENT);
PROC FREQ DATAPROC FREQ DATA=&data; TABLESTABLES &row_var * &col_var; RUNRUN;
ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTING;
%MACRO ctab(__dset = , __col_var = , __row_var = );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT CrossTabFreqs = summary_freq (KEEPKEEP = &col_var &row_var _TYPE_ FREQUENCY COLPERCENT);
PROC FREQ DATAPROC FREQ DATA=&data; TABLESTABLES &row_var * &col_var; RUNRUN;
ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTING;
PROCFREQ( )PROCFREQ( )
![Page 318: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/318.jpg)
%MACRO ctab(__dset = , __col_var = , __row_var = );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT CrossTabFreqs = summary_freq (KEEPKEEP = &col_var &row_var _TYPE_ FREQUENCY COLPERCENT); WHEREWHERE = (_type_="11")); PROC FREQ DATAPROC FREQ DATA=&data; TABLESTABLES &row_var * &col_var; RUNRUN;
ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTING;
%MACRO ctab(__dset = , __col_var = , __row_var = );
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT CrossTabFreqs = summary_freq (KEEPKEEP = &col_var &row_var _TYPE_ FREQUENCY COLPERCENT); WHEREWHERE = (_type_="11")); PROC FREQ DATAPROC FREQ DATA=&data; TABLESTABLES &row_var * &col_var; RUNRUN;
ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTING;
PROCFREQ( )PROCFREQ( )
![Page 319: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/319.jpg)
%MACRO ctab(__dset = , __col_var = , __row_var = );
ODS LISTING CLOSEODS LISTING CLOSE; ODS OUTPUTODS OUTPUT CrossTabFreqs = summary_freq (KEEPKEEP = &col_var &row_var _TYPE_ FREQUENCY COLPERCENT); WHEREWHERE = (_type_="11")); PROC FREQ DATAPROC FREQ DATA=&data; TABLESTABLES &row_var * &col_var; RUNRUN;
ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTINGODS LISTING;
%MACRO ctab(__dset = , __col_var = , __row_var = );
ODS LISTING CLOSEODS LISTING CLOSE; ODS OUTPUTODS OUTPUT CrossTabFreqs = summary_freq (KEEPKEEP = &col_var &row_var _TYPE_ FREQUENCY COLPERCENT); WHEREWHERE = (_type_="11")); PROC FREQ DATAPROC FREQ DATA=&data; TABLESTABLES &row_var * &col_var; RUNRUN;
ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTINGODS LISTING;
PROCFREQ( )PROCFREQ( )
![Page 320: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/320.jpg)
%MACROMACRO ctab(data = , col_var = , row_var = );
ODS LISTING CLOSEODS LISTING CLOSE; ODS OUTPUTODS OUTPUT CrossTabFreqs = summary_freq (KEEPKEEP = &col_var &row_var _TYPE_ FREQUENCY COLPERCENT) WHEREWHERE = (_type_="11")); PROC FREQ DATAPROC FREQ DATA=&data; TABLESTABLES &row_var * &col_var; RUNRUN;
ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTINGODS LISTING;
%MACROMACRO ctab(data = , col_var = , row_var = );
ODS LISTING CLOSEODS LISTING CLOSE; ODS OUTPUTODS OUTPUT CrossTabFreqs = summary_freq (KEEPKEEP = &col_var &row_var _TYPE_ FREQUENCY COLPERCENT) WHEREWHERE = (_type_="11")); PROC FREQ DATAPROC FREQ DATA=&data; TABLESTABLES &row_var * &col_var; RUNRUN;
ODS OUTPUT CLOSEODS OUTPUT CLOSE; ODS LISTINGODS LISTING;
PROCFREQ( )PROCFREQ( )
![Page 321: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/321.jpg)
Row Col Obs DaysMix asthma _type_ Frequency Percent Percent Percent Missing
1 None No 1111 6658 6658 38.155 95.0600 39.837339.8373 . 2 None Yes 11 11 346 346 1.983 4.9400 46.947146.9471 . 3 None . 10 7004 40.138 . . . 4 1-90 Days No 11 11 6358 6358 36.436 95.8107 38.042238.0422 . 5 1-90 Days Yes 11 11 278 278 1.593 4.1893 37.720537.7205 . 6 1-90 Days . 10 6636 38.029 . . . 7 > 90 Days No 1111 3697 3697 21.186 97.0341 22.120522.1205 . 8 > 90 Days Yes 11 11 113 113 0.648 2.9659 15.3324 15.3324 . 9 > 90 Days . 10 3810 21.834 . . . 10 . No 01 16713 95.777 . . . 11 . Yes 01 737 4.223 . . . 12 . . 00 17450 100.000 . . 4945
PROCFREQ( )PROCFREQ( )
![Page 322: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/322.jpg)
Row Col Obs DaysMix asthma _type_ Frequency Percent Percent Percent Missing
1 None No 1111 6658 6658 38.155 95.0600 39.837339.8373 . 2 None Yes 11 11 346 346 1.983 4.9400 46.947146.9471 . 3 None . 10 7004 40.138 . . . 4 1-90 Days No 11 11 6358 6358 36.436 95.8107 38.042238.0422 . 5 1-90 Days Yes 11 11 278 278 1.593 4.1893 37.720537.7205 . 6 1-90 Days . 10 6636 38.029 . . . 7 > 90 Days No 1111 3697 3697 21.186 97.0341 22.120522.1205 . 8 > 90 Days Yes 11 11 113 113 0.648 2.9659 15.3324 15.3324 . 9 > 90 Days . 10 3810 21.834 . . . 10 . No 01 16713 95.777 . . . 11 . Yes 01 737 4.223 . . . 12 . . 00 17450 100.000 . . 4945
PROCFREQ( )PROCFREQ( )
![Page 323: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/323.jpg)
PROCFREQ( )PROCFREQ( )
Row Col Obs DaysMix asthma _type_ Frequency Percent Percent Percent Missing
1 None No 1111 66586658 38.155 95.0600 39.837339.8373 . 2 None Yes 11 11 346 346 1.983 4.9400 46.947146.9471 . 3 None . 10 7004 40.138 . . . 4 1-90 Days No 1111 63586358 36.436 95.8107 38.042238.0422 . 5 1-90 Days Yes 11 11 278278 1.593 4.1893 37.720537.7205 . 6 1-90 Days . 10 6636 38.029 . . . 7 > 90 Days No 1111 36973697 21.186 97.0341 22.120522.1205 . 8 > 90 Days Yes 1111 113 113 0.648 2.9659 15.332415.3324 . 9 > 90 Days . 10 3810 21.834 . . . 10 . No 01 16713 95.777 . . . 11 . Yes 01 737 4.223 . . . 12 . . 00 17450 100.000 . . 4945
![Page 324: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/324.jpg)
PROCFREQ( )PROCFREQ( )
Row Col Obs DaysMix asthma _type_ Frequency Percent Percent Percent Missing
1 None No 1111 6658 6658 38.155 95.0600 39.837339.8373 . 2 None Yes 1111 346 346 1.983 4.9400 46.947146.9471 . 3 None . 10 7004 40.138 . . . 4 1-90 Days No 1111 6358 6358 36.436 95.8107 38.042238.0422 . 5 1-90 Days Yes 1111 278 278 1.593 4.1893 37.720537.7205 . 6 1-90 Days . 10 6636 38.029 . . . 7 > 90 Days No 1111 3697 3697 21.186 97.0341 22.120522.1205 . 8 > 90 Days Yes 11 11 113 113 0.648 2.9659 15.3324 15.3324 . 9 > 90 Days . 10 3810 21.834 . . . 10 . No 01 16713 95.777 . . . 11 . Yes 01 737 4.223 . . . 12 . . 00 17450 100.000 . . 4945
![Page 325: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/325.jpg)
DATADATA summary_freq ( KEEPKEEP = key_value n_col1 p_col1 n_col2 p_col2 ) ; SETSET summary_freq ; BYBY &row_var &col_var; RETAINRETAIN n_col1 p_col1; IF FIRST.IF FIRST.&row_var THEN DO; n_col1 = frequency; p_col1 = colpercent; ENDEND; ELSEELSE IF LAST.IF LAST.&row_var THEN DOTHEN DO; n_col2 = frequency; p_col2 = colpercent; key_value = &row_var ; OUTPUTOUTPUT summary_freq; ENDEND; RUNRUN;
%MENDMEND ctab;
DATADATA summary_freq ( KEEPKEEP = key_value n_col1 p_col1 n_col2 p_col2 ) ; SETSET summary_freq ; BYBY &row_var &col_var; RETAINRETAIN n_col1 p_col1; IF FIRST.IF FIRST.&row_var THEN DO; n_col1 = frequency; p_col1 = colpercent; ENDEND; ELSEELSE IF LAST.IF LAST.&row_var THEN DOTHEN DO; n_col2 = frequency; p_col2 = colpercent; key_value = &row_var ; OUTPUTOUTPUT summary_freq; ENDEND; RUNRUN;
%MENDMEND ctab;
PROCFREQ( )PROCFREQ( )
![Page 326: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/326.jpg)
PROCFREQ( )PROCFREQ( )
DATADATA summary_freq ( KEEPKEEP = key_value n_col1 p_col1 n_col2 p_col2 ) ; SETSET summary_freq; (WHERE = (_type_="11")); BYBY &row_var &col_var; RETAIN n_col1 p_col1;RETAIN n_col1 p_col1; IF FIRST.IF FIRST.&row_var THEN DO; n_col1 = frequency; p_col1 = colpercent; ENDEND; ELSEELSE IF LAST.IF LAST.&row_var THEN DOTHEN DO; n_col2 = frequency; p_col2 = colpercent; key_value = &row_var ; OUTPUTOUTPUT summary_freq; ENDEND; RUNRUN;
%MENDMEND ctab;
DATADATA summary_freq ( KEEPKEEP = key_value n_col1 p_col1 n_col2 p_col2 ) ; SETSET summary_freq; (WHERE = (_type_="11")); BYBY &row_var &col_var; RETAIN n_col1 p_col1;RETAIN n_col1 p_col1; IF FIRST.IF FIRST.&row_var THEN DO; n_col1 = frequency; p_col1 = colpercent; ENDEND; ELSEELSE IF LAST.IF LAST.&row_var THEN DOTHEN DO; n_col2 = frequency; p_col2 = colpercent; key_value = &row_var ; OUTPUTOUTPUT summary_freq; ENDEND; RUNRUN;
%MENDMEND ctab;
![Page 327: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/327.jpg)
PROCFREQ( )PROCFREQ( )
DATADATA summary_freq ( KEEPKEEP = key_value n_col1 p_col1 n_col2 p_col2 ) ; SETSET summary_freq; (WHERE = (_type_="11")); BYBY &row_var &col_var; RETAINRETAIN n_col1 p_col1; IF FIRST.IF FIRST.&row_var THEN DO; n_col1 = frequency; p_col1 = colpercent; ENDEND; ELSEELSE IF LAST.&row_var THEN DO;IF LAST.&row_var THEN DO; n_col2 = frequency; p_col2 = colpercent; key_value = &row_var ; OUTPUT summary_freq;OUTPUT summary_freq; ENDEND; RUNRUN;
%MENDMEND ctab;
DATADATA summary_freq ( KEEPKEEP = key_value n_col1 p_col1 n_col2 p_col2 ) ; SETSET summary_freq; (WHERE = (_type_="11")); BYBY &row_var &col_var; RETAINRETAIN n_col1 p_col1; IF FIRST.IF FIRST.&row_var THEN DO; n_col1 = frequency; p_col1 = colpercent; ENDEND; ELSEELSE IF LAST.&row_var THEN DO;IF LAST.&row_var THEN DO; n_col2 = frequency; p_col2 = colpercent; key_value = &row_var ; OUTPUT summary_freq;OUTPUT summary_freq; ENDEND; RUNRUN;
%MENDMEND ctab;
![Page 328: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/328.jpg)
PROCFREQ( )PROCFREQ( )
Row Col Obs DaysMix asthma _type_ Frequency Percent Percent Percent Missing
1 None None No 1111 6658 6658 38.155 95.0600 39.837339.8373 . 2 None None Yes 11 11 346 346 1.983 4.9400 46.947146.9471 . 3 None . 10 7004 40.138 . . . 4 1-90 Days1-90 Days No 11 11 6358 6358 36.436 95.8107 38.042238.0422 . 5 1-90 Days1-90 Days Yes 11 11 278 278 1.593 4.1893 37.720537.7205 . 6 1-90 Days . 10 6636 38.029 . . . 7 > 90 Days> 90 Days No 1111 3697 3697 21.186 97.0341 22.120522.1205 . 8 > 90 Days> 90 Days Yes 1111 113 113 0.648 2.9659 15.3324 15.3324 . 9 > 90 Days . 10 3810 21.834 . . . 10 . No 01 16713 95.777 . . . 11 . Yes 01 737 4.223 . . . 12 . . 00 17450 100.000 . . 4945
![Page 329: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/329.jpg)
PROCFREQ( )PROCFREQ( )
Row Col Obs Key_Value asthm a _type_ Frequency Percent Percent Percent Missing
1 00 No 1111 6658 6658 38.155 95.0600 39.837339.8373 . 2 0 0 Yes 11 11 346 346 1.983 4.9400 46.947146.9471 . 3 None . 10 7004 40.138 . . . 4 11 N o 11 11 6358 6358 36.436 95.8107 38.042238.0422 . 5 11 Yes 11 11 278 278 1.593 4.1893 37.720537.7205 . 6 1-90 Days . 10 6636 38.029 . . . 7 2 2 No 1111 3697 3697 21.186 97.0341 22.120522.1205 . 8 2 2 Yes 1111 113 113 0.648 2.9659 15.3324 15.3324 . 9 > 90 Days . 10 3810 21.834 . . . 10 . No 01 16713 95.777 . . . 11 . Yes 01 737 4.223 . . . 12 . . 00 17450 100.000 . . 4945
![Page 330: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/330.jpg)
Obs Key_Value asthma _type_ N_Col1 N_Col2 P_Col1 P_Col2
1 0 No 11 6658 3466658 346 39.8373 39.8373 46.947146.9471 2 0 Yes 11 346 1.983 4.9400 46.9471 3 None . 10 7004 40.138 . . . 4 1 No 11 6358 2786358 278 38.042238.0422 37.720537.7205 5 1 Yes 11 278 1.593 4.1893 37.7205 6 1-90 Days . 10 6636 38.029 . . . 7 2 No 11 3697 1133697 113 22.120522.1205 15.332415.3324 8 2 Yes 11 113 0.648 2.9659 15.3324 9 > 90 Days . 10 3810 21.834 . . . 10 . No 01 16713 95.777 . . . 11 . Yes 01 737 4.223 . . . 12 . . 00 17450 100.000 . . 4945
PROCFREQ( )PROCFREQ( )
![Page 331: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/331.jpg)
The CONTENTS Procedure
Data Set Name WORK.SUMMARY_FREQ Observations 3Member Type DATA Variables 14
# Variable Type Len Format Label --------------------------------------------------------------------------------- 1 response_label Char 40 Label of Response Variable 2 response_value1 Char 40 Value for Level 1 of Response variable 3 response_fmt1 CHAR 40 Format value for Level 1 of Response var 4 response_value2 Char 40 Value for Level 2 of Response variable 5 response_fmt2 CHAR 40 Format value for Level 2 of Response var 6 response_name Char 32 Name of Response Variable 7 Key_label Char 40 Label of Independent Variable 10 Key_var Char 32 Name of Independent Variable 11 Key_value Num 8 Numeric Value of Independent Variable 12 Key_format Char 40 Encoded text value of Independent Variable 13 n_col1 Num 8 PROC FREQ Frequency of Column 1 14 p_col1 Num 8 PROC FREQ Percent of Column 1 13 n_col2 Num 8 PROC FREQ Frequency of Column 2 14 p_col2 Num 8 PROC FREQ Percent of Column 2
PROCFREQ( )PROCFREQ( )
![Page 332: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/332.jpg)
PROCLOGISTIC( )PROCLOGISTIC( )
![Page 333: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/333.jpg)
%%MACROMACRO proclogistic(test = , proclogistic(test = , data = ,data = , response = ,response = , independent = ,independent = , ref = ,ref = , class_vars = ,class_vars = , continuous_vars = );continuous_vars = );
PROC LOGISTIC DATA = &__dset DESCENDING;
%%MACROMACRO proclogistic(test = , proclogistic(test = , data = ,data = , response = ,response = , independent = ,independent = , ref = ,ref = , class_vars = ,class_vars = , continuous_vars = );continuous_vars = );
PROC LOGISTIC DATA = &__dset DESCENDING;
PROCLOGISTIC( )PROCLOGISTIC( )
![Page 334: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/334.jpg)
ODS LISTING CLOSE; ODS OUTPUT ParameterEstimates = __pe (KEEP = variable classval0 probchisq estimate StdErr RENAME = (ProbChiSq = &__test._p_value) ) OddsRatios = __or (KEEP = EFFECT OddsRatioEst LowerCL UpperCL RENAME = (OddsRatioEst =&__test._OddsRatio LowerCL =&__test._LowerCL UpperCL = &__test._UpperCL ) );
PROC LOGISTIC DATAPROC LOGISTIC DATA=&data =&data DESCENDINGDESCENDING ORDERORDER==INTERNALINTERNAL NAMELENNAMELEN==3232;; CLASSCLASS &independent (PARAMPARAM=REFREF REFREF="&ref"); MODELMODEL &response = &independent ; &response = &independent ; &__class_vars &__continuous_vars FORMAT &__independent; RUNRUN; ; ODS OUTPUT CLOSE; ODS LISTING;
ODS LISTING CLOSE; ODS OUTPUT ParameterEstimates = __pe (KEEP = variable classval0 probchisq estimate StdErr RENAME = (ProbChiSq = &__test._p_value) ) OddsRatios = __or (KEEP = EFFECT OddsRatioEst LowerCL UpperCL RENAME = (OddsRatioEst =&__test._OddsRatio LowerCL =&__test._LowerCL UpperCL = &__test._UpperCL ) );
PROC LOGISTIC DATAPROC LOGISTIC DATA=&data =&data DESCENDINGDESCENDING ORDERORDER==INTERNALINTERNAL NAMELENNAMELEN==3232;; CLASSCLASS &independent (PARAMPARAM=REFREF REFREF="&ref"); MODELMODEL &response = &independent ; &response = &independent ; &__class_vars &__continuous_vars FORMAT &__independent; RUNRUN; ; ODS OUTPUT CLOSE; ODS LISTING;
PROCLOGISTIC( )PROCLOGISTIC( )
![Page 335: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/335.jpg)
ODS LISTING CLOSE; ODS OUTPUT ParameterEstimates = __pe (KEEP = variable classval0 probchisq estimate StdErr RENAME = (ProbChiSq = &__test._p_value) ) OddsRatios = __or (KEEP = EFFECT OddsRatioEst LowerCL UpperCL RENAME = (OddsRatioEst =&__test._OddsRatio LowerCL =&__test._LowerCL UpperCL = &__test._UpperCL ) );
PROC LOGISTIC DATAPROC LOGISTIC DATA=&data =&data DESCENDINGDESCENDING ORDERORDER==INTERNALINTERNAL NAMELENNAMELEN==3232;; CLASSCLASS &independent (PARAMPARAM=REFREF REFREF="&ref"); MODELMODEL &response = &independent ; &response = &independent ; &__class_vars &__continuous_vars FORMAT &independent;FORMAT &independent; RUNRUN; ;
ODS OUTPUT CLOSE;
ODS LISTING CLOSE; ODS OUTPUT ParameterEstimates = __pe (KEEP = variable classval0 probchisq estimate StdErr RENAME = (ProbChiSq = &__test._p_value) ) OddsRatios = __or (KEEP = EFFECT OddsRatioEst LowerCL UpperCL RENAME = (OddsRatioEst =&__test._OddsRatio LowerCL =&__test._LowerCL UpperCL = &__test._UpperCL ) );
PROC LOGISTIC DATAPROC LOGISTIC DATA=&data =&data DESCENDINGDESCENDING ORDERORDER==INTERNALINTERNAL NAMELENNAMELEN==3232;; CLASSCLASS &independent (PARAMPARAM=REFREF REFREF="&ref"); MODELMODEL &response = &independent ; &response = &independent ; &__class_vars &__continuous_vars FORMAT &independent;FORMAT &independent; RUNRUN; ;
ODS OUTPUT CLOSE;
PROCLOGISTIC( )PROCLOGISTIC( )
![Page 336: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/336.jpg)
ODS LISTING CLOSE; ODS OUTPUT ParameterEstimates = ParameterEstimates (KEEP = variable classval0 probchisq estimate StdErr RENAME = (ProbChiSq = &__test._p_value) )
OddsRatios = OddsRatios; (KEEP = EFFECT OddsRatioEst LowerCL UpperCL RENAME = (OddsRatioEst =&__test._OddsRatio LowerCL =&__test._LowerCL UpperCL = &__test._UpperCL ) ); PROC LOGISTIC DATAPROC LOGISTIC DATA=&data =&data DESCENDINGDESCENDING ORDERORDER==INTERNALINTERNAL NAMELENNAMELEN==3232;; CLASSCLASS &class_vars &class_vars &independent (PARAMPARAM=REFREF REFREF="&ref"); MODELMODEL &response = &independent &response = &independent &class_vars &continuous_vars &class_vars &continuous_vars ;; FORMATFORMAT &independent; &independent; RUNRUN; ; ODS OUTPUT CLOSE; ODS LISTING;
ODS LISTING CLOSE; ODS OUTPUT ParameterEstimates = ParameterEstimates (KEEP = variable classval0 probchisq estimate StdErr RENAME = (ProbChiSq = &__test._p_value) )
OddsRatios = OddsRatios; (KEEP = EFFECT OddsRatioEst LowerCL UpperCL RENAME = (OddsRatioEst =&__test._OddsRatio LowerCL =&__test._LowerCL UpperCL = &__test._UpperCL ) ); PROC LOGISTIC DATAPROC LOGISTIC DATA=&data =&data DESCENDINGDESCENDING ORDERORDER==INTERNALINTERNAL NAMELENNAMELEN==3232;; CLASSCLASS &class_vars &class_vars &independent (PARAMPARAM=REFREF REFREF="&ref"); MODELMODEL &response = &independent &response = &independent &class_vars &continuous_vars &class_vars &continuous_vars ;; FORMATFORMAT &independent; &independent; RUNRUN; ; ODS OUTPUT CLOSE; ODS LISTING;
PROCLOGISTIC( )PROCLOGISTIC( )
![Page 337: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/337.jpg)
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT ParameterEstimates = ParameterEstimatesParameterEstimates (KEEP = variable classval0 probchisq estimate StdErr RENAME = (ProbChiSq = &__test._p_value) )
OddsRatios = OddsRatiosOddsRatios; (KEEP = EFFECT OddsRatioEst LowerCL UpperCL RENAME = (OddsRatioEst =&__test._OddsRatio LowerCL =&__test._LowerCL UpperCL = &__test._UpperCL ) ); PROC LOGISTIC DATAPROC LOGISTIC DATA=&data =&data DESCENDINGDESCENDING ORDERORDER==INTERNALINTERNAL NAMELENNAMELEN==3232;; CLASSCLASS &class_vars &class_vars &independent (PARAMPARAM=REFREF REFREF="&ref"); MODELMODEL &response = &independent &response = &independent &class_vars &continuous_vars&class_vars &continuous_vars ;; FORMATFORMAT &independent; &independent; RUNRUN; ; ODS OUTPUT CLOSEODS OUTPUT CLOSE;; ODS LISTING;
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT ParameterEstimates = ParameterEstimatesParameterEstimates (KEEP = variable classval0 probchisq estimate StdErr RENAME = (ProbChiSq = &__test._p_value) )
OddsRatios = OddsRatiosOddsRatios; (KEEP = EFFECT OddsRatioEst LowerCL UpperCL RENAME = (OddsRatioEst =&__test._OddsRatio LowerCL =&__test._LowerCL UpperCL = &__test._UpperCL ) ); PROC LOGISTIC DATAPROC LOGISTIC DATA=&data =&data DESCENDINGDESCENDING ORDERORDER==INTERNALINTERNAL NAMELENNAMELEN==3232;; CLASSCLASS &class_vars &class_vars &independent (PARAMPARAM=REFREF REFREF="&ref"); MODELMODEL &response = &independent &response = &independent &class_vars &continuous_vars&class_vars &continuous_vars ;; FORMATFORMAT &independent; &independent; RUNRUN; ; ODS OUTPUT CLOSEODS OUTPUT CLOSE;; ODS LISTING;
PROCLOGISTIC( )PROCLOGISTIC( )
![Page 338: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/338.jpg)
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT ParameterEstimates = ParameterEstimatesParameterEstimates (KEEP = variable classval0 probchisq(KEEP = variable classval0 probchisq estimate StdErrestimate StdErr RENAME = (ProbChiSq = &test._p_value) )RENAME = (ProbChiSq = &test._p_value) ) WHERE = (UPCASE(variable)="&independent"))WHERE = (UPCASE(variable)="&independent")) OddsRatios = OddsRatiosOddsRatios; (KEEP = EFFECT OddsRatioEst LowerCL UpperCL (KEEP = EFFECT OddsRatioEst LowerCL UpperCL RENAME = (OddsRatioEst = &test._OddsRatioRENAME = (OddsRatioEst = &test._OddsRatio LowerCL = &test._LowerCLLowerCL = &test._LowerCL UpperCL = &test._UpperCL ) );UpperCL = &test._UpperCL ) ); WHEREWHERE == (UPCASE(SCAN(EFFECT,1))="&independent"))(UPCASE(SCAN(EFFECT,1))="&independent"));; PROC LOGISTIC DATAPROC LOGISTIC DATA=&data =&data DESCENDINGDESCENDING ORDERORDER==INTERNALINTERNAL NAMELENNAMELEN==3232;; CLASSCLASS &class_vars &class_vars &independent (PARAMPARAM=REFREF REFREF="&ref"); MODELMODEL &response = &independent &response = &independent &class_vars &continuous_vars&class_vars &continuous_vars ;; FORMATFORMAT &independent; &independent; RUNRUN; ; ODS OUTPUT CLOSEODS OUTPUT CLOSE;; ODS LISTING;
ODS LISTING CLOSE; ODS OUTPUTODS OUTPUT ParameterEstimates = ParameterEstimatesParameterEstimates (KEEP = variable classval0 probchisq(KEEP = variable classval0 probchisq estimate StdErrestimate StdErr RENAME = (ProbChiSq = &test._p_value) )RENAME = (ProbChiSq = &test._p_value) ) WHERE = (UPCASE(variable)="&independent"))WHERE = (UPCASE(variable)="&independent")) OddsRatios = OddsRatiosOddsRatios; (KEEP = EFFECT OddsRatioEst LowerCL UpperCL (KEEP = EFFECT OddsRatioEst LowerCL UpperCL RENAME = (OddsRatioEst = &test._OddsRatioRENAME = (OddsRatioEst = &test._OddsRatio LowerCL = &test._LowerCLLowerCL = &test._LowerCL UpperCL = &test._UpperCL ) );UpperCL = &test._UpperCL ) ); WHEREWHERE == (UPCASE(SCAN(EFFECT,1))="&independent"))(UPCASE(SCAN(EFFECT,1))="&independent"));; PROC LOGISTIC DATAPROC LOGISTIC DATA=&data =&data DESCENDINGDESCENDING ORDERORDER==INTERNALINTERNAL NAMELENNAMELEN==3232;; CLASSCLASS &class_vars &class_vars &independent (PARAMPARAM=REFREF REFREF="&ref"); MODELMODEL &response = &independent &response = &independent &class_vars &continuous_vars&class_vars &continuous_vars ;; FORMATFORMAT &independent; &independent; RUNRUN; ; ODS OUTPUT CLOSEODS OUTPUT CLOSE;; ODS LISTING;
PROCLOGISTIC( )PROCLOGISTIC( )
![Page 339: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/339.jpg)
ODS LISTING CLOSEODS LISTING CLOSE;; ODS OUTPUTODS OUTPUT ParameterEstimates = ParameterEstimatesParameterEstimates (KEEPKEEP = variable classval0 probchisq estimate StdErr RENAMERENAME = (ProbChiSq = &test._p_value) ) WHERE WHERE = (UPCASEUPCASE(variable)="&independent")) OddsRatios = OddsRatiosOddsRatios; (KEEPKEEP = EFFECT OddsRatioEst LowerCL UpperCL RENAMERENAME = (OddsRatioEst = &test._OddsRatio LowerCL = &test._LowerCL UpperCL = &test._UpperCL ) ); WHEREWHERE == ((UPCASEUPCASE((SCANSCAN(EFFECT,1))="&independent"));(EFFECT,1))="&independent")); PROC LOGISTIC DATAPROC LOGISTIC DATA=&data =&data DESCENDINGDESCENDING ORDERORDER==INTERNALINTERNAL NAMELENNAMELEN==3232;; CLASSCLASS &class_vars &class_vars &independent (PARAMPARAM=REFREF REFREF="&ref"); MODELMODEL &response = &independent &response = &independent &class_vars &continuous_vars&class_vars &continuous_vars ;; FORMATFORMAT &independent; &independent; RUNRUN; ; ODS OUTPUT CLOSEODS OUTPUT CLOSE;; ODS LISTINGODS LISTING;
ODS LISTING CLOSEODS LISTING CLOSE;; ODS OUTPUTODS OUTPUT ParameterEstimates = ParameterEstimatesParameterEstimates (KEEPKEEP = variable classval0 probchisq estimate StdErr RENAMERENAME = (ProbChiSq = &test._p_value) ) WHERE WHERE = (UPCASEUPCASE(variable)="&independent")) OddsRatios = OddsRatiosOddsRatios; (KEEPKEEP = EFFECT OddsRatioEst LowerCL UpperCL RENAMERENAME = (OddsRatioEst = &test._OddsRatio LowerCL = &test._LowerCL UpperCL = &test._UpperCL ) ); WHEREWHERE == ((UPCASEUPCASE((SCANSCAN(EFFECT,1))="&independent"));(EFFECT,1))="&independent")); PROC LOGISTIC DATAPROC LOGISTIC DATA=&data =&data DESCENDINGDESCENDING ORDERORDER==INTERNALINTERNAL NAMELENNAMELEN==3232;; CLASSCLASS &class_vars &class_vars &independent (PARAMPARAM=REFREF REFREF="&ref"); MODELMODEL &response = &independent &response = &independent &class_vars &continuous_vars&class_vars &continuous_vars ;; FORMATFORMAT &independent; &independent; RUNRUN; ; ODS OUTPUT CLOSEODS OUTPUT CLOSE;; ODS LISTINGODS LISTING;
PROCLOGISTIC( )PROCLOGISTIC( )
![Page 340: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/340.jpg)
DATADATA ParameterEstimates ( ParameterEstimates ( KEEPKEEP = key_value &test._p_value ); = key_value &test._p_value ); SETSET ParameterEstimates ; ParameterEstimates ; Key_Value = Key_Value = INPUTINPUT(classval0,8.); (classval0,8.); RUNRUN;;
DATADATA OddsRatios ( OddsRatios ( KEEPKEEP = key_value &test._OddsRatio = key_value &test._OddsRatio &test._LowerCL &test._UpperCL ); &test._LowerCL &test._UpperCL ); SETSET OddsRatios ; OddsRatios ; Key_Value = Key_Value = INPUTINPUT((((SCANSCAN(EFFECT,(EFFECT,22)),)),2.2.); ); RUNRUN;;
DATADATA ParameterEstimates ( ParameterEstimates ( KEEPKEEP = key_value &test._p_value ); = key_value &test._p_value ); SETSET ParameterEstimates ; ParameterEstimates ; Key_Value = Key_Value = INPUTINPUT(classval0,8.); (classval0,8.); RUNRUN;;
DATADATA OddsRatios ( OddsRatios ( KEEPKEEP = key_value &test._OddsRatio = key_value &test._OddsRatio &test._LowerCL &test._UpperCL ); &test._LowerCL &test._UpperCL ); SETSET OddsRatios ; OddsRatios ; Key_Value = Key_Value = INPUTINPUT((((SCANSCAN(EFFECT,(EFFECT,22)),)),2.2.); ); RUNRUN;;
PROCLOGISTIC( )PROCLOGISTIC( )
![Page 341: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/341.jpg)
DATADATA ParameterEstimates ( ParameterEstimates ( KEEPKEEP = key_value &test._p_value ); = key_value &test._p_value ); SETSET ParameterEstimates ; ParameterEstimates ; Key_ValueKey_Value = INPUT(classval0,8.);= INPUT(classval0,8.); RUNRUN;;
DATADATA OddsRatios ( OddsRatios ( KEEPKEEP = key_value &test._OddsRatio = key_value &test._OddsRatio &test._LowerCL &test._UpperCL ); &test._LowerCL &test._UpperCL ); SETSET OddsRatios ; OddsRatios ; Key_Value = Key_Value = INPUTINPUT((((SCANSCAN(EFFECT,(EFFECT,22)),)),2.2.); ); RUNRUN;;
DATADATA ParameterEstimates ( ParameterEstimates ( KEEPKEEP = key_value &test._p_value ); = key_value &test._p_value ); SETSET ParameterEstimates ; ParameterEstimates ; Key_ValueKey_Value = INPUT(classval0,8.);= INPUT(classval0,8.); RUNRUN;;
DATADATA OddsRatios ( OddsRatios ( KEEPKEEP = key_value &test._OddsRatio = key_value &test._OddsRatio &test._LowerCL &test._UpperCL ); &test._LowerCL &test._UpperCL ); SETSET OddsRatios ; OddsRatios ; Key_Value = Key_Value = INPUTINPUT((((SCANSCAN(EFFECT,(EFFECT,22)),)),2.2.); ); RUNRUN;;
PROCLOGISTIC( )PROCLOGISTIC( )
![Page 342: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/342.jpg)
DATADATA ParameterEstimates ( ParameterEstimates ( KEEPKEEP = key_value &test._p_value ); = key_value &test._p_value ); SETSET ParameterEstimates ; ParameterEstimates ; Key_Value = Key_Value = INPUTINPUT(classval0,8.); (classval0,8.); RUNRUN;;
DATADATA OddsRatios ( OddsRatios ( KEEPKEEP = key_value &test._OddsRatio = key_value &test._OddsRatio &test._LowerCL &test._UpperCL ); &test._LowerCL &test._UpperCL ); SETSET OddsRatios ; OddsRatios ; Key_Value = INPUT((SCAN(EFFECT,Key_Value = INPUT((SCAN(EFFECT,22)),)),2.2.);); RUNRUN;;
DATADATA ParameterEstimates ( ParameterEstimates ( KEEPKEEP = key_value &test._p_value ); = key_value &test._p_value ); SETSET ParameterEstimates ; ParameterEstimates ; Key_Value = Key_Value = INPUTINPUT(classval0,8.); (classval0,8.); RUNRUN;;
DATADATA OddsRatios ( OddsRatios ( KEEPKEEP = key_value &test._OddsRatio = key_value &test._OddsRatio &test._LowerCL &test._UpperCL ); &test._LowerCL &test._UpperCL ); SETSET OddsRatios ; OddsRatios ; Key_Value = INPUT((SCAN(EFFECT,Key_Value = INPUT((SCAN(EFFECT,22)),)),2.2.);); RUNRUN;;
PROCLOGISTIC( )PROCLOGISTIC( )
![Page 343: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/343.jpg)
PROC SORTPROC SORT DATADATA=ParameterEstimates;=ParameterEstimates; BYBY key_value; key_value; RUNRUN;;
PROC SORTPROC SORT DATADATA=OddsRatios;=OddsRatios; BYBY key_value; key_value; RUNRUN;;
DATADATA summary_&test._logistic ; summary_&test._logistic ; MERGEMERGE ParameterEstimates OddsRatios ; ParameterEstimates OddsRatios ; BYBY key_value; key_value; RUNRUN;;
PROC SORTPROC SORT DATADATA=ParameterEstimates;=ParameterEstimates; BYBY key_value; key_value; RUNRUN;;
PROC SORTPROC SORT DATADATA=OddsRatios;=OddsRatios; BYBY key_value; key_value; RUNRUN;;
DATADATA summary_&test._logistic ; summary_&test._logistic ; MERGEMERGE ParameterEstimates OddsRatios ; ParameterEstimates OddsRatios ; BYBY key_value; key_value; RUNRUN;;
PROCLOGISTIC( )PROCLOGISTIC( )
![Page 344: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/344.jpg)
PROC SORTPROC SORT DATADATA=ParameterEstimates;=ParameterEstimates; BYBY key_value key_value; ; RUNRUN;;
PROC SORTPROC SORT DATADATA=OddsRatios;=OddsRatios; BYBY key_valuekey_value; ; RUNRUN;;
DATADATA summary_&test._logistic ; summary_&test._logistic ; MERGEMERGE ParameterEstimates OddsRatios ; ParameterEstimates OddsRatios ; BYBY key_valuekey_value;; RUNRUN;;
PROC SORTPROC SORT DATADATA=ParameterEstimates;=ParameterEstimates; BYBY key_value key_value; ; RUNRUN;;
PROC SORTPROC SORT DATADATA=OddsRatios;=OddsRatios; BYBY key_valuekey_value; ; RUNRUN;;
DATADATA summary_&test._logistic ; summary_&test._logistic ; MERGEMERGE ParameterEstimates OddsRatios ; ParameterEstimates OddsRatios ; BYBY key_valuekey_value;; RUNRUN;;
PROCLOGISTIC( )PROCLOGISTIC( )
![Page 345: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/345.jpg)
PROC SORTPROC SORT DATADATA=ParameterEstimates;=ParameterEstimates; BYBY key_value; key_value; RUNRUN;;
PROC SORTPROC SORT DATADATA=OddsRatios;=OddsRatios; BYBY key_value; key_value; RUNRUN;;
DATADATA summary_&test._logistic ; summary_&test._logistic ; MERGEMERGE ParameterEstimates OddsRatios ; ParameterEstimates OddsRatios ; BYBY key_value; key_value; RUNRUN;;
PROC DATASETSPROC DATASETS;; DELETEDELETE ParameterEstimates OddsRatiosParameterEstimates OddsRatios;; QUITQUIT;; RUNRUN;;
%MEND proclogistic;
PROC SORTPROC SORT DATADATA=ParameterEstimates;=ParameterEstimates; BYBY key_value; key_value; RUNRUN;;
PROC SORTPROC SORT DATADATA=OddsRatios;=OddsRatios; BYBY key_value; key_value; RUNRUN;;
DATADATA summary_&test._logistic ; summary_&test._logistic ; MERGEMERGE ParameterEstimates OddsRatios ; ParameterEstimates OddsRatios ; BYBY key_value; key_value; RUNRUN;;
PROC DATASETSPROC DATASETS;; DELETEDELETE ParameterEstimates OddsRatiosParameterEstimates OddsRatios;; QUITQUIT;; RUNRUN;;
%MEND proclogistic;
PROCLOGISTIC( )PROCLOGISTIC( )
![Page 346: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/346.jpg)
PROC SORTPROC SORT DATADATA=ParameterEstimates;=ParameterEstimates; BYBY key_value; key_value; RUNRUN;;
PROC SORTPROC SORT DATADATA=OddsRatios;=OddsRatios; BYBY key_value; key_value; RUNRUN;;
DATADATA summary_&test._logistic ; summary_&test._logistic ; MERGEMERGE ParameterEstimates OddsRatios ; ParameterEstimates OddsRatios ; BYBY key_value; key_value; RUNRUN;;
PROC DATASETSPROC DATASETS;; DELETEDELETE ParameterEstimates OddsRatios; ParameterEstimates OddsRatios; QUITQUIT;; RUNRUN;;
%MENDMEND proclogistic;
PROC SORTPROC SORT DATADATA=ParameterEstimates;=ParameterEstimates; BYBY key_value; key_value; RUNRUN;;
PROC SORTPROC SORT DATADATA=OddsRatios;=OddsRatios; BYBY key_value; key_value; RUNRUN;;
DATADATA summary_&test._logistic ; summary_&test._logistic ; MERGEMERGE ParameterEstimates OddsRatios ; ParameterEstimates OddsRatios ; BYBY key_value; key_value; RUNRUN;;
PROC DATASETSPROC DATASETS;; DELETEDELETE ParameterEstimates OddsRatios; ParameterEstimates OddsRatios; QUITQUIT;; RUNRUN;;
%MENDMEND proclogistic;
PROCLOGISTIC( )PROCLOGISTIC( )
![Page 347: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/347.jpg)
The CONTENTS Procedure
Data Set Name WORK.SUMMARY_CRUDECRUDE_LOGISTIC Observations 2Member Type DATA Variables 5
Alphabetic List of Variables and Attributes
# Variable Type Len Format Label
4 CrudeCrude_LowerCL Num 8 ODDSR8.3 Crude PROC LOGISTIC Lower 95% CI3 CrudeCrude_OddsRatio Num 8 ODDSR8.3 Crude PROC LOGISTIC Odds Ratio 5 CrudeCrude_UpperCL Num 8 ODDSR8.3 Crude PROC LOGISTIC Upper 95% CI1 CrudeCrude_p_value Num 8 PVALUE6.4 Crude PROC LOGISTIC Chi-Square prob2 key_value Num 8
PROCLOGISTIC( )PROCLOGISTIC( )
![Page 348: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/348.jpg)
The CONTENTS Procedure
Data Set Name WORK.SUMMARY_ADJUSTED_LOGISTIC Observations 2Member Type DATA Variables 5
Alphabetic List of Variables and Attributes
# Variable Type Len Format Label
4 AdjustedAdjusted_LowerCL Num 8 ODDSR8.3 Adjusted PROC LOGISTIC Lower 95% CI3 AdjustedAdjusted_OddsRatio Num 8 ODDSR8.3 Adjusted PROC LOGISTIC Odds Ratio 5 AdjustedAdjusted_UpperCL Num 8 ODDSR8.3 Adjusted PROC LOGISTIC Upper 95% CI1 AdjustedAdjusted_p_value Num 8 PVALUE6.4 Adjusted PROC LOGISTIC Chi-Square prob2 var2_value Num 8
PROCLOGISTIC( )PROCLOGISTIC( )
![Page 349: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/349.jpg)
%MACRO summary(__dset = , %MACRO summary(__dset = , __var1 = , __var1 = , __var2 = , __var2 = , __ref = , __ref = , __basevs = , __basevs = , __out = ); __out = );
%LET __var1 = %UPCASE(&__var1);%LET __var1 = %UPCASE(&__var1); %LET __var2 = %UPCASE(&__var2);%LET __var2 = %UPCASE(&__var2); %IF %validate(__dset = &__dset ,%IF %validate(__dset = &__dset , __var1 = &__var1 ,__var1 = &__var1 , __var2 = &__var2 ,__var2 = &__var2 , __ref = &__ref ,__ref = &__ref , __vars = &__basevs,__vars = &__basevs, __out = &__out ) = 1 /*error found*/__out = &__out ) = 1 /*error found*/ %THEN %RETURN;%THEN %RETURN; %%splitsplit(__vars=&__basevs)(__vars=&__basevs)
%%makesetmakeset(__dset = &__dset ,(__dset = &__dset , __var1 = &__var1 ,__var1 = &__var1 , __var2 = &__var2 ,__var2 = &__var2 , __class_vars = &__class_vars,__class_vars = &__class_vars, __continuous_vars = &__continuous_vars ) __continuous_vars = &__continuous_vars )
%%ctabctab(__dset = __analysis_set, (__dset = __analysis_set, __col_var = &__var1 ,__col_var = &__var1 , __row_var = &__var2 )__row_var = &__var2 )
%%logitlogit(__test = Crude, (__test = Crude, __dset = __analysis_set,__dset = __analysis_set, __response = &__var1,__response = &__var1, __independent = &__var2,__independent = &__var2, __ref = &__ref )__ref = &__ref )
%%logitlogit(__test = Adjusted, (__test = Adjusted, __dset = __analysis_set,__dset = __analysis_set, __response = &__var1,__response = &__var1, __independent = &__var2,__independent = &__var2, __ref = &__ref,__ref = &__ref, __class_vars = &__class_vars,__class_vars = &__class_vars, __continuous_vars = &__continuous_vars )__continuous_vars = &__continuous_vars )
%%summarysetsummaryset(__base = &__out)(__base = &__out) %nodata: %nodata:
%MEND summary;%MEND summary;
%MACRO summary(__dset = , %MACRO summary(__dset = , __var1 = , __var1 = , __var2 = , __var2 = , __ref = , __ref = , __basevs = , __basevs = , __out = ); __out = );
%LET __var1 = %UPCASE(&__var1);%LET __var1 = %UPCASE(&__var1); %LET __var2 = %UPCASE(&__var2);%LET __var2 = %UPCASE(&__var2); %IF %validate(__dset = &__dset ,%IF %validate(__dset = &__dset , __var1 = &__var1 ,__var1 = &__var1 , __var2 = &__var2 ,__var2 = &__var2 , __ref = &__ref ,__ref = &__ref , __vars = &__basevs,__vars = &__basevs, __out = &__out ) = 1 /*error found*/__out = &__out ) = 1 /*error found*/ %THEN %RETURN;%THEN %RETURN; %%splitsplit(__vars=&__basevs)(__vars=&__basevs)
%%makesetmakeset(__dset = &__dset ,(__dset = &__dset , __var1 = &__var1 ,__var1 = &__var1 , __var2 = &__var2 ,__var2 = &__var2 , __class_vars = &__class_vars,__class_vars = &__class_vars, __continuous_vars = &__continuous_vars ) __continuous_vars = &__continuous_vars )
%%ctabctab(__dset = __analysis_set, (__dset = __analysis_set, __col_var = &__var1 ,__col_var = &__var1 , __row_var = &__var2 )__row_var = &__var2 )
%%logitlogit(__test = Crude, (__test = Crude, __dset = __analysis_set,__dset = __analysis_set, __response = &__var1,__response = &__var1, __independent = &__var2,__independent = &__var2, __ref = &__ref )__ref = &__ref )
%%logitlogit(__test = Adjusted, (__test = Adjusted, __dset = __analysis_set,__dset = __analysis_set, __response = &__var1,__response = &__var1, __independent = &__var2,__independent = &__var2, __ref = &__ref,__ref = &__ref, __class_vars = &__class_vars,__class_vars = &__class_vars, __continuous_vars = &__continuous_vars )__continuous_vars = &__continuous_vars )
%%summarysetsummaryset(__base = &__out)(__base = &__out) %nodata: %nodata:
%MEND summary;%MEND summary;
![Page 350: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/350.jpg)
SUPERVISOR( )SUPERVISOR( )
%MACRO MACRO supervisor;;(dataset = , response = , independent = , covariates = , outfile = , report = );
%MACRO MACRO supervisor;;(dataset = , response = , independent = , covariates = , outfile = , report = );
![Page 351: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/351.jpg)
SUPERVISOR( )SUPERVISOR( )
%MACRO MACRO supervisor(dataset = , response = , independent = , covariates = , outfile = , report = );
%MACRO MACRO supervisor(dataset = , response = , independent = , covariates = , outfile = , report = );
![Page 352: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/352.jpg)
Add a Paramater for the Referent LevelAdd a Paramater for the Referent Level
%MACRO MACRO supervisor(dataset = , response = , independent = , referent = ,referent = , covariates = , outfile = , report = );
%MACRO MACRO supervisor(dataset = , response = , independent = , referent = ,referent = , covariates = , outfile = , report = );
![Page 353: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/353.jpg)
SUPERVISOR( )SUPERVISOR( )
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
%validate(dset = &dataset, var1 = &response, var2 = &independent , basevs = &covariates, out = &outfile ) %IFIF &echeck = 1 %THENTHEN %RETURNRETURN;
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
%validate(dset = &dataset, var1 = &response, var2 = &independent , basevs = &covariates, out = &outfile ) %IFIF &echeck = 1 %THENTHEN %RETURNRETURN;
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
![Page 354: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/354.jpg)
PassPass ReferentReferent ParameterParameter toto VALIDATE(VALIDATE( ))
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
%validate(dset = &dataset, var1 = &response, var2 = &independent , ref = &referent ,ref = &referent , basevs = &covariates, out = &outfile ) %IFIF &echeck = 1 %THENTHEN %RETURNRETURN;
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
%validate(dset = &dataset, var1 = &response, var2 = &independent , ref = &referent ,ref = &referent , basevs = &covariates, out = &outfile ) %IFIF &echeck = 1 %THENTHEN %RETURNRETURN;
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
![Page 355: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/355.jpg)
Adjust INITBASE(Adjust INITBASE( ))
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
%validate(dset = &dataset, var1 = &response, var2 = &independent , ref = &referent ,ref = &referent , basevs = &covariates, out = &outfile ) %IFIF &echeck = 1 %THENTHEN %RETURNRETURN;
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase%initbase(base=&outfile);
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
%validate(dset = &dataset, var1 = &response, var2 = &independent , ref = &referent ,ref = &referent , basevs = &covariates, out = &outfile ) %IFIF &echeck = 1 %THENTHEN %RETURNRETURN;
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase%initbase(base=&outfile);
![Page 356: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/356.jpg)
SUPERVISOR( )SUPERVISOR( )
%LETLET class_vars =%split(vars=&covariates,control=); %LETLET continuous_vars=%split(vars=&covariates,control=@);
%analysisset(data = &dataset , var1 = &response , var2 = &independent , variables = &class_vars &continuous_vars )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
%LETLET class_vars =%split(vars=&covariates,control=); %LETLET continuous_vars=%split(vars=&covariates,control=@);
%analysisset(data = &dataset , var1 = &response , var2 = &independent , variables = &class_vars &continuous_vars )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
![Page 357: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/357.jpg)
SUPERVISOR( )SUPERVISOR( )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
%procglm (test = CrudeCrude, data = analysis_set, response = &response, independent = &independent )
%procglm (test = AdjustedAdjusted, data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
%procglm (test = CrudeCrude, data = analysis_set, response = &response, independent = &independent )
%procglm (test = AdjustedAdjusted, data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
![Page 358: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/358.jpg)
Replace PROCMEANS( )Replace PROCMEANS( )
%procfreq%procfreq (data = analysis_set, var1 = &response , var2 = &independent )
%procglm (test = CrudeCrude, data = analysis_set, response = &response, independent = &independent )
%procglm (test = AdjustedAdjusted, data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
%procfreq%procfreq (data = analysis_set, var1 = &response , var2 = &independent )
%procglm (test = CrudeCrude, data = analysis_set, response = &response, independent = &independent )
%procglm (test = AdjustedAdjusted, data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
![Page 359: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/359.jpg)
Replace PROCGLM( )Replace PROCGLM( )
%procfreq%procfreq (data = analysis_set, var1 = &response , var2 = &independent )
%proclogistic%proclogistic (test = CrudeCrude, data = analysis_set, response = &response, independent = &independent )
%proclogistic%proclogistic (test = AdjustedAdjusted, data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
%procfreq%procfreq (data = analysis_set, var1 = &response , var2 = &independent )
%proclogistic%proclogistic (test = CrudeCrude, data = analysis_set, response = &response, independent = &independent )
%proclogistic%proclogistic (test = AdjustedAdjusted, data = analysis_set, response = &response, independent = &independent , class_vars = &class_vars, continuous_vars = &continuous_vars )
![Page 360: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/360.jpg)
Pass Referent to PROCLOGISTIC( )Pass Referent to PROCLOGISTIC( )
%procfreq%procfreq (data = analysis_set, var1 = &response , var2 = &independent )
%proclogistic%proclogistic (test = CrudeCrude, data = analysis_set, response = &response, independent = &independent, ref = &referent ref = &referent )
%proclogistic%proclogistic (test = AdjustedAdjusted, data = analysis_set, response = &response, independent = &independent , ref = &referent ,ref = &referent , class_vars = &class_vars, continuous_vars = &continuous_vars )
%procfreq%procfreq (data = analysis_set, var1 = &response , var2 = &independent )
%proclogistic%proclogistic (test = CrudeCrude, data = analysis_set, response = &response, independent = &independent, ref = &referent ref = &referent )
%proclogistic%proclogistic (test = AdjustedAdjusted, data = analysis_set, response = &response, independent = &independent , ref = &referent ,ref = &referent , class_vars = &class_vars, continuous_vars = &continuous_vars )
![Page 361: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/361.jpg)
SUPERVISOR( )SUPERVISOR( )
%summaryset(merge_var = key_var, base = GLM_summary, setlist = SUMMARY_, delsets = analysis_set, class_vars = &class_vars , continuous_vars = &continuous_vars)
%IFIF %UPCASEUPCASE(&report) = YES %THENTHEN %PrintReport(data=&outfile);
%MENDMEND supervisor;
%summaryset(merge_var = key_var, base = GLM_summary, setlist = SUMMARY_, delsets = analysis_set, class_vars = &class_vars , continuous_vars = &continuous_vars)
%IFIF %UPCASEUPCASE(&report) = YES %THENTHEN %PrintReport(data=&outfile);
%MENDMEND supervisor;
![Page 362: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/362.jpg)
Change merge_var to key_valueChange merge_var to key_value
%summaryset(merge_var = key_value,key_value, base = GLM_summary, setlist = SUMMARY_, delsets = analysis_set, class_vars = &class_vars , continuous_vars = &continuous_vars)
%IFIF %UPCASEUPCASE(&report) = YES %THENTHEN %PrintReport(data=&outfile);
%MENDMEND supervisor;
%summaryset(merge_var = key_value,key_value, base = GLM_summary, setlist = SUMMARY_, delsets = analysis_set, class_vars = &class_vars , continuous_vars = &continuous_vars)
%IFIF %UPCASEUPCASE(&report) = YES %THENTHEN %PrintReport(data=&outfile);
%MENDMEND supervisor;
![Page 363: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/363.jpg)
Adjust PRINTREPORT( )Adjust PRINTREPORT( )
%summaryset(merge_var = key_value,key_value, base = GLM_summary, setlist = SUMMARY_, delsets = analysis_set, class_vars = &class_vars , continuous_vars = &continuous_vars)
%IFIF %UPCASEUPCASE(&report) = YES %THENTHEN %PrintReport%PrintReport(data=&outfile);
%MENDMEND supervisor;
%summaryset(merge_var = key_value,key_value, base = GLM_summary, setlist = SUMMARY_, delsets = analysis_set, class_vars = &class_vars , continuous_vars = &continuous_vars)
%IFIF %UPCASEUPCASE(&report) = YES %THENTHEN %PrintReport%PrintReport(data=&outfile);
%MENDMEND supervisor;
![Page 364: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/364.jpg)
ThisThis InvocationInvocation ofof SUPERVISOR(SUPERVISOR( ))
%supervisor(dataset = mydata ,%supervisor(dataset = mydata , response = asthma ,response = asthma , independent = farmsize ,independent = farmsize , referent = 1 ,referent = 1 , covariates = @age state race ,covariates = @age state race , outfile = logistic_summary ,outfile = logistic_summary , report = YES )report = YES )
%IF %UPCASE(&report) = YES %THEN %PrintReport(data=&outfile);
%supervisor(dataset = mydata ,%supervisor(dataset = mydata , response = asthma ,response = asthma , independent = farmsize ,independent = farmsize , referent = 1 ,referent = 1 , covariates = @age state race ,covariates = @age state race , outfile = logistic_summary ,outfile = logistic_summary , report = YES )report = YES )
%IF %UPCASE(&report) = YES %THEN %PrintReport(data=&outfile);
![Page 365: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/365.jpg)
Produces the Following ReportProduces the Following Report
Class Covariates = state race Continuous Covariates = age Ever Diagnosed with asthma Variable Yes No P-Value OR 95% CILabel/Format N % N % Crude Adjusted AdjustedƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒAverage days mixed pesticides None 346 46.9 6658 39.8 . . 1-90 days 278 37.7 6358 38.0 0.0361 0.7049 0.949 0.722 1.246 > 90 days 113 15.3 3697 22.1 <.0001 0.5378 1.143 0.747 1.747
![Page 366: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/366.jpg)
Create an Iteration MacroCreate an Iteration Macro
![Page 367: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/367.jpg)
%supervisor(dataset = mydata ,%supervisor(dataset = mydata , response = asthma ,response = asthma , independent = farmsize ,independent = farmsize , referent = 1 ,referent = 1 , covariates = @age state race ,covariates = @age state race , outfile = logistic_summary ,outfile = logistic_summary , report = YES )report = YES )
%supervisor(dataset = mydata ,%supervisor(dataset = mydata , response = asthma ,response = asthma , independent = farmsize ,independent = farmsize , referent = 1 ,referent = 1 , covariates = @age state race ,covariates = @age state race , outfile = logistic_summary ,outfile = logistic_summary , report = YES )report = YES )
![Page 368: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/368.jpg)
%MACRO callexecute(arrayvars = ); DATA _NULL_; LENGTH independent $ 32 print_report $3; IF 0 THEN SET mydata; ARRAY i_var (*) &array_vars; DO i = 1 TO DIM ( i_var ); independent = VNAME ( i_var[i] ); IF i = DIM(i_var) THEN print_report="Yes "; ELSE print_report="No "; CALL EXECUTECALL EXECUTE ( (CATSCATS('%('%NRSTRNRSTR('(' ,'%supervisor(dataset = mydata','%supervisor(dataset = mydata' ,",response = asthma",",response = asthma" ,",independent = ", independent,",independent = ", independent ,",referent = 1",",referent = 1" ,",covariates = @age state race,",covariates = @age state race "" ,",outfile = logistic_summary ",",outfile = logistic_summary " ,",report = ", print_report,",report = ", print_report ,")" , ")" ) );,")" , ")" ) ); END; RUN;%MEND callexecute;
%MACRO callexecute(arrayvars = ); DATA _NULL_; LENGTH independent $ 32 print_report $3; IF 0 THEN SET mydata; ARRAY i_var (*) &array_vars; DO i = 1 TO DIM ( i_var ); independent = VNAME ( i_var[i] ); IF i = DIM(i_var) THEN print_report="Yes "; ELSE print_report="No "; CALL EXECUTECALL EXECUTE ( (CATSCATS('%('%NRSTRNRSTR('(' ,'%supervisor(dataset = mydata','%supervisor(dataset = mydata' ,",response = asthma",",response = asthma" ,",independent = ", independent,",independent = ", independent ,",referent = 1",",referent = 1" ,",covariates = @age state race,",covariates = @age state race "" ,",outfile = logistic_summary ",",outfile = logistic_summary " ,",report = ", print_report,",report = ", print_report ,")" , ")" ) );,")" , ")" ) ); END; RUN;%MEND callexecute;
![Page 369: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/369.jpg)
%MACRO callexecute(arrayvars = ); DATADATA _NULL__NULL_; LENGTH independent $ 32 print_report $3; IF 0 THEN SET mydata; ARRAY i_var (*) &array_vars; DO i = 1 TO DIM ( i_var ); independent = VNAME ( i_var[i] ); IF i = DIM(i_var) THEN print_report="Yes "; ELSE print_report="No "; CALL EXECUTECALL EXECUTE ( (CATSCATS('%('%NRSTRNRSTR('(' ,'%supervisor(dataset = mydata','%supervisor(dataset = mydata' ,",response = asthma",",response = asthma" ,",independent = ", independent,",independent = ", independent ,",referent = 1",",referent = 1" ,",covariates = @age state race,",covariates = @age state race "" ,",outfile = logistic_summary ",",outfile = logistic_summary " ,",report = ", print_report,",report = ", print_report ,")" , ")" ) );,")" , ")" ) ); END; RUNRUN;%MEND callexecute;
%MACRO callexecute(arrayvars = ); DATADATA _NULL__NULL_; LENGTH independent $ 32 print_report $3; IF 0 THEN SET mydata; ARRAY i_var (*) &array_vars; DO i = 1 TO DIM ( i_var ); independent = VNAME ( i_var[i] ); IF i = DIM(i_var) THEN print_report="Yes "; ELSE print_report="No "; CALL EXECUTECALL EXECUTE ( (CATSCATS('%('%NRSTRNRSTR('(' ,'%supervisor(dataset = mydata','%supervisor(dataset = mydata' ,",response = asthma",",response = asthma" ,",independent = ", independent,",independent = ", independent ,",referent = 1",",referent = 1" ,",covariates = @age state race,",covariates = @age state race "" ,",outfile = logistic_summary ",",outfile = logistic_summary " ,",report = ", print_report,",report = ", print_report ,")" , ")" ) );,")" , ")" ) ); END; RUNRUN;%MEND callexecute;
![Page 370: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/370.jpg)
%MACRO callexecute(arrayvars = ); DATADATA _NULL__NULL_; LENGTH independent $ 32 print_report $3; IF 0 THEN SET mydata; ARRAYARRAY i_var (*) &array_vars; DODO i = 1 TO DIMTO DIM ( i_var ); independent = VNAMEVNAME ( i_var[i] ); IF i = DIM(i_var) THEN print_report="Yes "; ELSE print_report="No "; CALL EXECUTECALL EXECUTE ( (CATSCATS('%('%NRSTRNRSTR('(' ,'%supervisor(dataset = mydata','%supervisor(dataset = mydata' ,",response = asthma",",response = asthma" ,",independent = ", independent,",independent = ", independent ,",referent = 1",",referent = 1" ,",covariates = @age state race,",covariates = @age state race "" ,",outfile = logistic_summary ",",outfile = logistic_summary " ,",report = ", print_report,",report = ", print_report ,")" , ")" ) );,")" , ")" ) ); ENDEND; RUNRUN;%MEND callexecute;
%MACRO callexecute(arrayvars = ); DATADATA _NULL__NULL_; LENGTH independent $ 32 print_report $3; IF 0 THEN SET mydata; ARRAYARRAY i_var (*) &array_vars; DODO i = 1 TO DIMTO DIM ( i_var ); independent = VNAMEVNAME ( i_var[i] ); IF i = DIM(i_var) THEN print_report="Yes "; ELSE print_report="No "; CALL EXECUTECALL EXECUTE ( (CATSCATS('%('%NRSTRNRSTR('(' ,'%supervisor(dataset = mydata','%supervisor(dataset = mydata' ,",response = asthma",",response = asthma" ,",independent = ", independent,",independent = ", independent ,",referent = 1",",referent = 1" ,",covariates = @age state race,",covariates = @age state race "" ,",outfile = logistic_summary ",",outfile = logistic_summary " ,",report = ", print_report,",report = ", print_report ,")" , ")" ) );,")" , ")" ) ); ENDEND; RUNRUN;%MEND callexecute;
![Page 371: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/371.jpg)
%MACRO callexecute(arrayvars = ); DATADATA _NULL__NULL_; LENGTH independent $ 32 print_report $3; IFIF 0 THEN SETTHEN SET mydata; ARRAYARRAY i_var (*) &array_vars; DODO i = 1 TO DIMTO DIM ( i_var ); independent = VNAMEVNAME ( i_var[i] ); IF i = DIM(i_var) THEN print_report="Yes "; ELSE print_report="No "; CALL EXECUTECALL EXECUTE ( (CATSCATS('%('%NRSTRNRSTR('(' ,'%supervisor(dataset = mydata','%supervisor(dataset = mydata' ,",response = asthma",",response = asthma" ,",independent = ", independent,",independent = ", independent ,",referent = 1",",referent = 1" ,",covariates = @age state race,",covariates = @age state race "" ,",outfile = logistic_summary ",",outfile = logistic_summary " ,",report = ", print_report,",report = ", print_report ,")" , ")" ) );,")" , ")" ) ); ENDEND; RUNRUN;%MEND callexecute;
%MACRO callexecute(arrayvars = ); DATADATA _NULL__NULL_; LENGTH independent $ 32 print_report $3; IFIF 0 THEN SETTHEN SET mydata; ARRAYARRAY i_var (*) &array_vars; DODO i = 1 TO DIMTO DIM ( i_var ); independent = VNAMEVNAME ( i_var[i] ); IF i = DIM(i_var) THEN print_report="Yes "; ELSE print_report="No "; CALL EXECUTECALL EXECUTE ( (CATSCATS('%('%NRSTRNRSTR('(' ,'%supervisor(dataset = mydata','%supervisor(dataset = mydata' ,",response = asthma",",response = asthma" ,",independent = ", independent,",independent = ", independent ,",referent = 1",",referent = 1" ,",covariates = @age state race,",covariates = @age state race "" ,",outfile = logistic_summary ",",outfile = logistic_summary " ,",report = ", print_report,",report = ", print_report ,")" , ")" ) );,")" , ")" ) ); ENDEND; RUNRUN;%MEND callexecute;
![Page 372: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/372.jpg)
%MACRO callexecute(arrayvars = ); DATADATA _NULL__NULL_; LENGTHLENGTH independent $ 32 print_report $3; IFIF 0 THEN SETTHEN SET mydata; ARRAYARRAY i_var (*) &array_vars; DODO i = 1 TO DIMTO DIM ( i_var ); independent = VNAMEVNAME ( i_var[i] ); IF i = DIM(i_var) THEN print_report="Yes "; ELSE print_report="No "; CALL EXECUTECALL EXECUTE ( (CATSCATS('%('%NRSTRNRSTR('(' ,'%supervisor(dataset = mydata','%supervisor(dataset = mydata' ,",response = asthma",",response = asthma" ,",independent = ", independent,",independent = ", independent ,",referent = 1",",referent = 1" ,",covariates = @age state race,",covariates = @age state race "" ,",outfile = logistic_summary ",",outfile = logistic_summary " ,",report = ", print_report,",report = ", print_report ,")" , ")" ) );,")" , ")" ) ); ENDEND; RUNRUN;%MEND callexecute;
%MACRO callexecute(arrayvars = ); DATADATA _NULL__NULL_; LENGTHLENGTH independent $ 32 print_report $3; IFIF 0 THEN SETTHEN SET mydata; ARRAYARRAY i_var (*) &array_vars; DODO i = 1 TO DIMTO DIM ( i_var ); independent = VNAMEVNAME ( i_var[i] ); IF i = DIM(i_var) THEN print_report="Yes "; ELSE print_report="No "; CALL EXECUTECALL EXECUTE ( (CATSCATS('%('%NRSTRNRSTR('(' ,'%supervisor(dataset = mydata','%supervisor(dataset = mydata' ,",response = asthma",",response = asthma" ,",independent = ", independent,",independent = ", independent ,",referent = 1",",referent = 1" ,",covariates = @age state race,",covariates = @age state race "" ,",outfile = logistic_summary ",",outfile = logistic_summary " ,",report = ", print_report,",report = ", print_report ,")" , ")" ) );,")" , ")" ) ); ENDEND; RUNRUN;%MEND callexecute;
![Page 373: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/373.jpg)
%MACRO callexecute(arrayvars = ); DATADATA _NULL__NULL_; LENGTHLENGTH independent $ 32 print_report $3; IFIF 0 THEN SETTHEN SET mydata; ARRAYARRAY i_var (*) &array_vars; DODO i = 1 TO DIMTO DIM ( i_var ); independent = VNAMEVNAME ( i_var[i] ); IFIF i = DIMDIM(i_var) THENTHEN print_report="Yes "; ELSEELSE print_report="No "; CALL EXECUTECALL EXECUTE ( (CATSCATS('%('%NRSTRNRSTR('(' ,'%supervisor(dataset = mydata','%supervisor(dataset = mydata' ,",response = asthma",",response = asthma" ,",independent = ", independent,",independent = ", independent ,",referent = 1",",referent = 1" ,",covariates = @age state race,",covariates = @age state race "" ,",outfile = logistic_summary ",",outfile = logistic_summary " ,",report = ", print_report,",report = ", print_report ,")" , ")" ) );,")" , ")" ) ); ENDEND; RUNRUN;%MEND callexecute;
%MACRO callexecute(arrayvars = ); DATADATA _NULL__NULL_; LENGTHLENGTH independent $ 32 print_report $3; IFIF 0 THEN SETTHEN SET mydata; ARRAYARRAY i_var (*) &array_vars; DODO i = 1 TO DIMTO DIM ( i_var ); independent = VNAMEVNAME ( i_var[i] ); IFIF i = DIMDIM(i_var) THENTHEN print_report="Yes "; ELSEELSE print_report="No "; CALL EXECUTECALL EXECUTE ( (CATSCATS('%('%NRSTRNRSTR('(' ,'%supervisor(dataset = mydata','%supervisor(dataset = mydata' ,",response = asthma",",response = asthma" ,",independent = ", independent,",independent = ", independent ,",referent = 1",",referent = 1" ,",covariates = @age state race,",covariates = @age state race "" ,",outfile = logistic_summary ",",outfile = logistic_summary " ,",report = ", print_report,",report = ", print_report ,")" , ")" ) );,")" , ")" ) ); ENDEND; RUNRUN;%MEND callexecute;
![Page 374: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/374.jpg)
%MACROMACRO callexecute(arrayvars = ); DATADATA _NULL__NULL_; LENGTHLENGTH independent $ 32 print_report $3; IFIF 0 THEN SETTHEN SET mydata; ARRAYARRAY i_var (*) &array_vars; DODO i = 1 TO DIMTO DIM ( i_var ); independent = VNAMEVNAME ( i_var[i] ); IFIF i = DIMDIM(i_var) THENTHEN print_report="Yes "; ELSEELSE print_report="No "; CALL EXECUTECALL EXECUTE ( (CATSCATS('%('%NRSTRNRSTR('(' ,'%supervisor(dataset = mydata','%supervisor(dataset = mydata' ,",response = asthma",",response = asthma" ,",independent = ", independent,",independent = ", independent ,",referent = 1",",referent = 1" ,",covariates = @age state race,",covariates = @age state race "" ,",outfile = logistic_summary ",",outfile = logistic_summary " ,",report = ", print_report,",report = ", print_report ,")" , ")" ) );,")" , ")" ) ); ENDEND; RUNRUN;%MENDMEND callexecute;
%MACROMACRO callexecute(arrayvars = ); DATADATA _NULL__NULL_; LENGTHLENGTH independent $ 32 print_report $3; IFIF 0 THEN SETTHEN SET mydata; ARRAYARRAY i_var (*) &array_vars; DODO i = 1 TO DIMTO DIM ( i_var ); independent = VNAMEVNAME ( i_var[i] ); IFIF i = DIMDIM(i_var) THENTHEN print_report="Yes "; ELSEELSE print_report="No "; CALL EXECUTECALL EXECUTE ( (CATSCATS('%('%NRSTRNRSTR('(' ,'%supervisor(dataset = mydata','%supervisor(dataset = mydata' ,",response = asthma",",response = asthma" ,",independent = ", independent,",independent = ", independent ,",referent = 1",",referent = 1" ,",covariates = @age state race,",covariates = @age state race "" ,",outfile = logistic_summary ",",outfile = logistic_summary " ,",report = ", print_report,",report = ", print_report ,")" , ")" ) );,")" , ")" ) ); ENDEND; RUNRUN;%MENDMEND callexecute;
![Page 375: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/375.jpg)
%MACROMACRO callexecute(arrayvarsarrayvars = ); DATADATA _NULL__NULL_; LENGTHLENGTH independent $ 32 print_report $3; IFIF 0 THEN SETTHEN SET mydata; ARRAYARRAY i_var (*) &array_vars&array_vars; DODO i = 1 TO DIMTO DIM ( i_var ); independent = VNAMEVNAME ( i_var[i] ); IFIF i = DIMDIM(i_var) THENTHEN print_report="Yes "; ELSEELSE print_report="No "; CALL EXECUTECALL EXECUTE ( (CATSCATS('%('%NRSTRNRSTR('(' ,'%supervisor(dataset = mydata','%supervisor(dataset = mydata' ,",response = asthma",",response = asthma" ,",independent = ", ,",independent = ", independentindependent ,",referent = 1",",referent = 1" ,",covariates = @age state race,",covariates = @age state race "" ,",outfile = logistic_summary ",",outfile = logistic_summary " ,",report = ", print_report,",report = ", print_report ,")" , ")" ) );,")" , ")" ) ); ENDEND; RUNRUN;%MENDMEND callexecute;
%MACROMACRO callexecute(arrayvarsarrayvars = ); DATADATA _NULL__NULL_; LENGTHLENGTH independent $ 32 print_report $3; IFIF 0 THEN SETTHEN SET mydata; ARRAYARRAY i_var (*) &array_vars&array_vars; DODO i = 1 TO DIMTO DIM ( i_var ); independent = VNAMEVNAME ( i_var[i] ); IFIF i = DIMDIM(i_var) THENTHEN print_report="Yes "; ELSEELSE print_report="No "; CALL EXECUTECALL EXECUTE ( (CATSCATS('%('%NRSTRNRSTR('(' ,'%supervisor(dataset = mydata','%supervisor(dataset = mydata' ,",response = asthma",",response = asthma" ,",independent = ", ,",independent = ", independentindependent ,",referent = 1",",referent = 1" ,",covariates = @age state race,",covariates = @age state race "" ,",outfile = logistic_summary ",",outfile = logistic_summary " ,",report = ", print_report,",report = ", print_report ,")" , ")" ) );,")" , ")" ) ); ENDEND; RUNRUN;%MENDMEND callexecute;
![Page 376: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/376.jpg)
Farmsize,Farmsize, Milkcows,Milkcows, Tractor,Tractor, GrainyearsGrainyears
%procfreq (data = analysis_set, var1 = &response , var2 = &independent )
%proclogistic (test = Crude, data = analysis_set, %callexecute(arrayvars = farmsize -- grain_years) independent = &independent, ref = &referent )
%proclogistic (test = Adjusted, data = analysis_set, response = &response, independent = &independent , ref = &referent , class_vars = &class_vars, continuous_vars = &continuous_vars )
%procfreq (data = analysis_set, var1 = &response , var2 = &independent )
%proclogistic (test = Crude, data = analysis_set, %callexecute(arrayvars = farmsize -- grain_years) independent = &independent, ref = &referent )
%proclogistic (test = Adjusted, data = analysis_set, response = &response, independent = &independent , ref = &referent , class_vars = &class_vars, continuous_vars = &continuous_vars )
![Page 377: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/377.jpg)
Ever Diagnosed with asthma Variable Yes No P-Value OR 95% CILabel/Format N % N % Crude Adjusted AdjustedƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒSize of Farm
No Farm 346 46.9 6658 39.8 . .
< 500 acres 278 37.7 6358 38.0 0.0361 0.7049 0.949 0.726 1.248
500+ acres 113 15.3 3697 22.1 <.0001 0.5378 1.143 0.747 1.747
Frequency of Milking Cows
Never 215 6.8 1275 7.8 . . . . .
Monthly 225 7.1 1104 6.8 0.0679 0.0445 1.238 1.005 1.525
Weekly 1396 43.9 7195 44.0 0.0768 0.0007 1.325 1.125 1.560
Daily 1341 42.2 6773 41.4 0.0434 <.0001 1.426 1.205 1.689
Frequency of Tractor Use
Never 2250 71.1 12203 74.9 . . . . .
Monthly 744 23.5 3465 21.3 0.0010 0.0042 1.146 1.044 1.259
Weekly 138 4.4 528 3.2 0.0004 0.0040 1.341 1.098 1.637
Daily 33 1.0 95 0.6 0.0015 0.0186 1.642 1.086 2.481
Years Grown Grain
None 51 17.9 1262 21.7 . . . . .
< 5 years 47 16.5 917 15.7 0.2507 0.2305 1.287 0.852 1.943
5-9 years 90 31.6 1539 26.5 0.0393 0.0477 1.435 1.004 2.052
10-19 years 50 17.6 1005 17.3 0.3071 0.2669 1.258 0.839 1.887
20+ years 46 16.1 1083 18.6 0.8107 0.6627 1.096 0.725 1.657
Generates a Summary ReportGenerates a Summary Report
![Page 378: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/378.jpg)
CONCLUSIONCONCLUSION
ODS provides the programmer with a ODS provides the programmer with a
method tomethod to extract and summarize statistics
from SAS procedures.
![Page 379: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/379.jpg)
CONCLUSIONCONCLUSION
When combined with the SAS Macro facilityWhen combined with the SAS Macro facility
summarization of procedural statistics, usingsummarization of procedural statistics, using
ODS, can be automatedODS, can be automated
![Page 380: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/380.jpg)
CONCLUSIONCONCLUSION
………………………………......
![Page 381: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/381.jpg)
Long, S, Heaton, ELong, S, Heaton, E
Using the SAS® DATA Step and PROCUsing the SAS® DATA Step and PROC
SQL to Create SQL to Create Macro ArraysMacro Arrays
Macro ArraysMacro ArraysPaper: 030-2008Paper: 030-2008
![Page 382: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/382.jpg)
Long, S., Park, L. Long, S., Park, L.
Contrasting programming techniques forContrasting programming techniques for
summarizing voluminous SAS® output using thesummarizing voluminous SAS® output using the
SAS Output Delivery System (ODS) SAS Output Delivery System (ODS)
(PROC FREQ as an example)(PROC FREQ as an example)
Macro ArraysMacro ArraysPaper: 013-30 (SUGI 30)Paper: 013-30 (SUGI 30)
![Page 383: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/383.jpg)
![Page 384: Adventures in ODS: Producing Customized Reports Using Output from Multiple SAS® Procedures Stuart Long (long3@niehs.nih.gov) Westat, Durham, NClong3@niehs.nih.gov.](https://reader035.fdocuments.in/reader035/viewer/2022081514/56649ea45503460f94ba83e0/html5/thumbnails/384.jpg)
DISCLAIMER: The contents of this paper are the work of the
authors and do not necessarily represent the
opinions, recommendations, or practices of Westat and
Rho Inc.