View
217
Download
0
Category
Tags:
Preview:
Citation preview
Adventures in ODS: Adventures in ODS: Producing Customized ReportsProducing Customized Reports
Using Output from Multiple Using Output from Multiple SAS® ProceduresSAS® Procedures
Stuart Long (long3@niehs.nih.gov) Westat, Durham, NC
Jeff Abolafia, Rho Inc, Chapel Hill, NC
Lawrence Park, Chapel Hill, NC
SAS tools for automating the SAS tools for automating the generation of customized reports generation of customized reports
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 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
Customized ReportsCustomized Reports
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
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
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
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
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
ODSODSAdditional Descriptive Information
PROCMEANS
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-----------------------------------------------------
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-----------------------------------------------------
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
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
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
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
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
ODSODSAdditional Descriptive InformationPROCMEANS
CrudePROCGLM
AdjustedPROCGLM
Data set Data set Data set
ODSODSAdditional Descriptive InformationPROCMEANS
CrudePROCGLM
AdjustedPROCGLM
CompositeData set
SAS Macro FacilitySAS Macro FacilityAdditional Descriptive InformationPROCMEANS
CrudePROCGLM
AdjustedPROCGLM
CompositeData set
SAS Macro FacilitySAS Macro FacilityAdditional Descriptive InformationPROCMEANS
CrudePROCGLM
AdjustedPROCGLM
Data set Data set Data set
CompositeData set
SAS Macro FacilitySAS Macro FacilityAdditional Descriptive InformationPROCMEANS
CrudePROCGLM
AdjustedPROCGLM
CompositeData set
SAS Macro FacilitySAS Macro FacilityAdditional Descriptive InformationPROCMEANS
CrudePROCGLM
AdjustedPROCGLM
Data set Data set Data set
CompositeData set
SAS Macro FacilitySAS Macro FacilityAdditional Descriptive InformationPROCMEANS
CrudePROCGLM
AdjustedPROCGLM
CompositeData set
SAS Macro FacilitySAS Macro FacilityAdditional Descriptive InformationPROCMEANS
CrudePROCGLM
AdjustedPROCGLM
Data set Data set Data set
CompositeData set
SAS Macro FacilitySAS Macro FacilityAdditional Descriptive InformationPROCMEANS
CrudePROCGLM
AdjustedPROCGLM
CompositeData set
SAS Macro FacilitySAS Macro FacilityAdditional Descriptive InformationPROCMEANS
CrudePROCGLM
AdjustedPROCGLM
Data set Data set Data set
CompositeData set
SAS Macro FacilitySAS Macro FacilityAdditional Descriptive InformationPROCMEANS
CrudePROCGLM
AdjustedPROCGLM
CompositeData set
SAS Macro FacilitySAS Macro FacilityAdditional Descriptive InformationPROCMEANS
CrudePROCGLM
AdjustedPROCGLM
Data set Data set Data set
CompositeData set
SAS Macro FacilitySAS Macro FacilityAdditional Descriptive InformationPROCMEANS
CrudePROCGLM
AdjustedPROCGLM
CompositeData set
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
The programmer must identify the mainThe programmer must identify the main
tasks required to complete this analysistasks required to complete this analysis
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
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
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
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
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
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
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
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
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
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
Initialize the Base Data SetInitialize the Base Data Set
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.
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.
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.
Initialize the Base Data SetInitialize the Base Data Set
%%MACROMACRO initbase;%%MACROMACRO initbase;
%MACROMACRO initbase(base = ); DATA &base;
%MACROMACRO initbase(base = ); DATA &base;
Initialize the Base Data SetInitialize the Base Data Set
%MACROMACRO initbase(base = ); OPTIONS NONOTESOPTIONS NONOTES; DATA &base;
%MACROMACRO initbase(base = ); OPTIONS NONOTESOPTIONS NONOTES; DATA &base;
AssignAssign AttributesAttributes toto UnitializedUnitialized VariablesVariables
AssignAssign AttributesAttributes toto UnitializedUnitialized VariablesVariables
%MACROMACRO initbase(base = ); OPTIONS NONOTESOPTIONS NONOTES; DATADATA &base;
%MACROMACRO initbase(base = ); OPTIONS NONOTESOPTIONS NONOTES; DATADATA &base;
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.;
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"
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
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"
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
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"
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
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"
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
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"
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"
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";
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
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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);
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);
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
Design a Macro Module to Produce aDesign a Macro Module to Produce a
Data Set Containing a Mean StatisticData Set Containing a Mean Statistic
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
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
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
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
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
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
• 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
• 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
• 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
• 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
• 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
• 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
• 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
• 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
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;;
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;
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
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
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;
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
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
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
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;
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;
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;
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
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
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;
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;
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;
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;
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;
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
Create a Data Set with Crude ModelCreate a Data Set with Crude Model
Estimates And Standard ErrorsEstimates And Standard Errors
%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)
%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)
%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)
%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
%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
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
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
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
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
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
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
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
%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;
%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;
%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;
%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;
Create a Data Set with Adjusted ModelCreate a Data Set with Adjusted Model
Estimates And Standard ErrorsEstimates And Standard Errors
%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;
%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;
%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;
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
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
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
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
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
Two Versions of Two Versions of
SUMMARY_GLM SUMMARY_GLM
Obs key_var Estimate StdErr
6 years_on_farm 0.0139 0.0019
Adjusted_ Adjusted_ Obs key_var Estimate StdErr
6 years_on_farm 0.0139 0.0019
SUMMARY_CRUDE_GLM
SUMMARY_ADJUSTED_GLM SUMMARY_ADJUSTED_GLM
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
%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;
%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;
%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;
%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( )
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
%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;
%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;
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
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
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
SUMMARYSET( ) macro moduleSUMMARYSET( ) macro module
Merge these three datasets into a Merge these three datasets into a composite summary datasetcomposite summary dataset
%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
%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
%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
%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
%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
%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
%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
%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
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
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
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
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
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
%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
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
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
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
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
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
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
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
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
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
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
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
%%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
%%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
%%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
%%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
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
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
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
%%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
%%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
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
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
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
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
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
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
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.
Three secondary main tasks which Three secondary main tasks which support these primary tasks.support these primary tasks.
• 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.
• 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.
• 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.
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.
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.
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;
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;
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;;
SPLIT( ) Macro ModuleSPLIT( ) Macro Module
Co-variables to appear in the adjusted PROC LOGISTICCo-variables to appear in the adjusted PROC LOGISTIC
SPLIT( ) Macro ModuleSPLIT( ) Macro Module
No SAS code is generated.No SAS code is generated.
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.
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.
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
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
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
SPLIT( ) Macro FunctionSPLIT( ) Macro Function
&covariates = @height @age race gender&covariates = @height @age race gender
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 );
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;
%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;
%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;
%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;
ANALYSISSET( ) Macro ModuleANALYSISSET( ) Macro Module
Create an analysis dataset that can be
uniformly processed by all three procedures
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;
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;
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;
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;
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;
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
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;
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;
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;
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;
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;
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;
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;
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;
%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( )
SUPERVISOR( )SUPERVISOR( )
%MACRO MACRO supervisor;;(dataset = , response = , independent = , covariates = , outfile = , report = );
%MACRO MACRO supervisor;;(dataset = , response = , independent = , covariates = , outfile = , report = );
SUPERVISOR( )SUPERVISOR( )
%MACRO MACRO supervisor(dataset = , response = , independent = , covariates = , outfile = , report = );
%MACRO MACRO supervisor(dataset = , response = , independent = , covariates = , outfile = , report = );
SUPERVISOR( )SUPERVISOR( )
%MACROMACRO supervisor(dataset = , response = , independent = , covariates = , outfile = , report = );
%LOCALLOCAL echeck;
%MACROMACRO supervisor(dataset = , response = , independent = , covariates = , outfile = , report = );
%LOCALLOCAL echeck;
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);
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);
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);
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);
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);
SUPERVISOR( )SUPERVISOR( )
report = );
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
report = );
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
SUPERVISOR( )SUPERVISOR( )
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
SUPERVISOR( )SUPERVISOR( )
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
%LOCALLOCAL echeck;
%LETLET response = %UPCASEUPCASE(&response); %LETLET independent = %UPCASEUPCASE(&independent);
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 )
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 )
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;
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
SUPERVISOR( )SUPERVISOR( )
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
%IFIF %SYSFUNCSYSFUNC(EXISTEXIST(&outfile)) NENE 1 %THENTHEN %initbase(base=&outfile);
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=@);
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=@);
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=@);
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 )
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 )
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 )
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 )
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 )
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 )
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 )
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 )
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 )
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 )
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 )
SUPERVISOR( )SUPERVISOR( )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
SUPERVISOR( )SUPERVISOR( )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
%procmeans(data = analysis_set, var1 = &response , var2 = &independent )
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 )
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 )
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
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 )
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 )
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 )
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 )
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 )
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 )
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 )
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 )
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 )
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 )
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)
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
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);
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;
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)
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
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
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
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
Flexibility of the DesignFlexibility of the Design
Flexibility of the DesignFlexibility of the Design
Change from a Linear to a Logistic Regression AnalysisChange from a Linear to a Logistic Regression Analysis
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
Five Main ChangesFive Main Changes
Change from Analysis of Variance to Logistic Regression
Alter the Continuous Independent Variable to Categorical
Five Main ChangesFive Main Changes
1.1. Adjust BASE data set to handle the new analysisAdjust BASE data set to handle the new analysis
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
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
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
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)
INITBASE( )INITBASE( )
PROCFREQ( ) Macro ModulePROCFREQ( ) Macro Module
PROCFREQ( ) Macro ModulePROCFREQ( ) Macro Module
Produce a dataset of counts & percentagesProduce a dataset of counts & percentages
PROCFREQ( ) Macro ModulePROCFREQ( ) Macro Module
Produce a dataset of counts & percentagesProduce a dataset of counts & percentagesPROC FREQPROC FREQ
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
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
%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( )
%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( )
%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( )
%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( )
%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( )
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( )
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( )
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
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
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( )
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;
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;
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
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
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( )
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( )
PROCLOGISTIC( )PROCLOGISTIC( )
%%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( )
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( )
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( )
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( )
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( )
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( )
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( )
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( )
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( )
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( )
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( )
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( )
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( )
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( )
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( )
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( )
%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;
SUPERVISOR( )SUPERVISOR( )
%MACRO MACRO supervisor;;(dataset = , response = , independent = , covariates = , outfile = , report = );
%MACRO MACRO supervisor;;(dataset = , response = , independent = , covariates = , outfile = , report = );
SUPERVISOR( )SUPERVISOR( )
%MACRO MACRO supervisor(dataset = , response = , independent = , covariates = , outfile = , report = );
%MACRO MACRO supervisor(dataset = , response = , independent = , covariates = , outfile = , report = );
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 = );
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);
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);
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);
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 )
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 )
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 )
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 )
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 )
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;
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;
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;
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);
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
Create an Iteration MacroCreate an Iteration Macro
%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 )
%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;
%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;
%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;
%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;
%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;
%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;
%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;
%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;
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 )
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
CONCLUSIONCONCLUSION
ODS provides the programmer with a ODS provides the programmer with a
method tomethod to extract and summarize statistics
from SAS procedures.
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
CONCLUSIONCONCLUSION
………………………………......
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
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)
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.
Recommended