380.How Do High-Cost, Low-Turnover Warehouses Get Detected Using SAS Analytics?
How Do High-Cost, Low-Turnover Warehouses Get Detected Using SAS Analytics?
HERE IN THIS PROJECT WE USED THESE SAS STATEMENTS —
DATA STEP | PROC SQL | PROC REPORT | PROC PRINT | PROC SGPLOT | MACROS | PROC CORR | PROC MEANS | PROC FREQ | PROC UNIVARIATE | PROC DATASETS DELETE
Intro Section
This project demonstrates how SAS can be used to analyze warehouse operations, capacity utilization, and cost efficiency using real-world style data. By combining DATA step processing, PROC SQL, and advanced analytics procedures, this tutorial shows how logistics and supply-chain data can be converted into meaningful business intelligence.
Why This Analysis Matters
Modern warehouses handle millions of units of inventory and large operational budgets. Even small inefficiencies in utilization or staffing can result in major financial losses. This SAS-based warehouse analytics model helps identify underutilized facilities, cost anomalies, and potential fraud patterns.
1. DATA CREATION – RAW WAREHOUSE DATA
data warehouses_raw;
format Start_Date date9.;
length Warehouse_ID $6 Location $20;
input Warehouse_ID $ Location $ Storage_Capacity Inventory_Turnover
Staff_Count Operating_Cost Utilization_Rate Start_Date : date9.;
datalines;
WH001 Delhi 50000 4.5 120 1500000 78 01JAN2022
WH002 Mumbai 70000 6.2 150 2100000 85 05FEB2022
WH003 Chennai 45000 3.8 90 1200000 72 15MAR2022
WH004 Hyderabad 60000 5.1 130 1800000 82 01APR2022
WH005 Pune 48000 4.0 100 1400000 70 12MAY2022
WH006 Kolkata 55000 4.6 110 1600000 76 25JUN2022
WH007 Jaipur 40000 3.5 85 1100000 65 10JUL2022
WH008 Ahmedabad 52000 4.9 115 1550000 79 08AUG2022
WH009 Kochi 42000 3.7 80 1050000 68 02SEP2022
WH010 Bhopal 46000 4.1 95 1300000 73 01OCT2022
WH011 Indore 47000 4.3 98 1350000 75 15NOV2022
WH012 Surat 58000 5.2 125 1750000 83 01DEC2022
WH013 Nagpur 43000 3.9 90 1200000 71 10JAN2023
WH014 Noida 65000 5.8 140 2000000 88 01FEB2023
WH015 Faridabad 62000 5.4 135 1900000 86 15MAR2023
;
run;
proc print data=warehouses_raw;
run;
OUTPUT:
| Obs | Start_Date | Warehouse_ID | Location | Storage_Capacity | Inventory_Turnover | Staff_Count | Operating_Cost | Utilization_Rate |
|---|---|---|---|---|---|---|---|---|
| 1 | 01JAN2022 | WH001 | Delhi | 50000 | 4.5 | 120 | 1500000 | 78 |
| 2 | 05FEB2022 | WH002 | Mumbai | 70000 | 6.2 | 150 | 2100000 | 85 |
| 3 | 15MAR2022 | WH003 | Chennai | 45000 | 3.8 | 90 | 1200000 | 72 |
| 4 | 01APR2022 | WH004 | Hyderabad | 60000 | 5.1 | 130 | 1800000 | 82 |
| 5 | 12MAY2022 | WH005 | Pune | 48000 | 4.0 | 100 | 1400000 | 70 |
| 6 | 25JUN2022 | WH006 | Kolkata | 55000 | 4.6 | 110 | 1600000 | 76 |
| 7 | 10JUL2022 | WH007 | Jaipur | 40000 | 3.5 | 85 | 1100000 | 65 |
| 8 | 08AUG2022 | WH008 | Ahmedabad | 52000 | 4.9 | 115 | 1550000 | 79 |
| 9 | 02SEP2022 | WH009 | Kochi | 42000 | 3.7 | 80 | 1050000 | 68 |
| 10 | 01OCT2022 | WH010 | Bhopal | 46000 | 4.1 | 95 | 1300000 | 73 |
| 11 | 15NOV2022 | WH011 | Indore | 47000 | 4.3 | 98 | 1350000 | 75 |
| 12 | 01DEC2022 | WH012 | Surat | 58000 | 5.2 | 125 | 1750000 | 83 |
| 13 | 10JAN2023 | WH013 | Nagpur | 43000 | 3.9 | 90 | 1200000 | 71 |
| 14 | 01FEB2023 | WH014 | Noida | 65000 | 5.8 | 140 | 2000000 | 88 |
| 15 | 15MAR2023 | WH015 | Faridabad | 62000 | 5.4 | 135 | 1900000 | 86 |
· Creates structured operational data.
· Stores cost, staff, utilization metrics.
· Provides date foundation for time analysis.
· Supports business performance modeling.
· Acts as raw SDTM-like source.
2. DATE ENGINEERING – MDY, INTNX, INTCK
data warehouses_dates;
set warehouses_raw;
Review_Date = intnx('month', Start_Date, 6);
Operational_Months = intck('month', Start_Date, Review_Date);
run;
proc print data=warehouses_dates;
run;
OUTPUT:
| Obs | Start_Date | Warehouse_ID | Location | Storage_Capacity | Inventory_Turnover | Staff_Count | Operating_Cost | Utilization_Rate | Review_Date | Operational_Months |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 01JAN2022 | WH001 | Delhi | 50000 | 4.5 | 120 | 1500000 | 78 | 22827 | 6 |
| 2 | 05FEB2022 | WH002 | Mumbai | 70000 | 6.2 | 150 | 2100000 | 85 | 22858 | 6 |
| 3 | 15MAR2022 | WH003 | Chennai | 45000 | 3.8 | 90 | 1200000 | 72 | 22889 | 6 |
| 4 | 01APR2022 | WH004 | Hyderabad | 60000 | 5.1 | 130 | 1800000 | 82 | 22919 | 6 |
| 5 | 12MAY2022 | WH005 | Pune | 48000 | 4.0 | 100 | 1400000 | 70 | 22950 | 6 |
| 6 | 25JUN2022 | WH006 | Kolkata | 55000 | 4.6 | 110 | 1600000 | 76 | 22980 | 6 |
| 7 | 10JUL2022 | WH007 | Jaipur | 40000 | 3.5 | 85 | 1100000 | 65 | 23011 | 6 |
| 8 | 08AUG2022 | WH008 | Ahmedabad | 52000 | 4.9 | 115 | 1550000 | 79 | 23042 | 6 |
| 9 | 02SEP2022 | WH009 | Kochi | 42000 | 3.7 | 80 | 1050000 | 68 | 23070 | 6 |
| 10 | 01OCT2022 | WH010 | Bhopal | 46000 | 4.1 | 95 | 1300000 | 73 | 23101 | 6 |
| 11 | 15NOV2022 | WH011 | Indore | 47000 | 4.3 | 98 | 1350000 | 75 | 23131 | 6 |
| 12 | 01DEC2022 | WH012 | Surat | 58000 | 5.2 | 125 | 1750000 | 83 | 23162 | 6 |
| 13 | 10JAN2023 | WH013 | Nagpur | 43000 | 3.9 | 90 | 1200000 | 71 | 23192 | 6 |
| 14 | 01FEB2023 | WH014 | Noida | 65000 | 5.8 | 140 | 2000000 | 88 | 23223 | 6 |
| 15 | 15MAR2023 | WH015 | Faridabad | 62000 | 5.4 | 135 | 1900000 | 86 | 23254 | 6 |
· INTNX creates review cycle.
· INTCK calculates duration.
· Tracks warehouse aging.
· Supports efficiency trend.
· Used for cost scaling.
3. CHARACTER FUNCTION CLEANSING
data warehouses_clean;
set warehouses_dates;
Location_Clean = propcase(strip(Location));
Warehouse_Code = upcase(catx('-', 'WH', Warehouse_ID));
run;
proc print data=warehouses_clean;
run;
OUTPUT:
| Obs | Start_Date | Warehouse_ID | Location | Storage_Capacity | Inventory_Turnover | Staff_Count | Operating_Cost | Utilization_Rate | Review_Date | Operational_Months | Location_Clean | Warehouse_Code |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 01JAN2022 | WH001 | Delhi | 50000 | 4.5 | 120 | 1500000 | 78 | 22827 | 6 | Delhi | WH-WH001 |
| 2 | 05FEB2022 | WH002 | Mumbai | 70000 | 6.2 | 150 | 2100000 | 85 | 22858 | 6 | Mumbai | WH-WH002 |
| 3 | 15MAR2022 | WH003 | Chennai | 45000 | 3.8 | 90 | 1200000 | 72 | 22889 | 6 | Chennai | WH-WH003 |
| 4 | 01APR2022 | WH004 | Hyderabad | 60000 | 5.1 | 130 | 1800000 | 82 | 22919 | 6 | Hyderabad | WH-WH004 |
| 5 | 12MAY2022 | WH005 | Pune | 48000 | 4.0 | 100 | 1400000 | 70 | 22950 | 6 | Pune | WH-WH005 |
| 6 | 25JUN2022 | WH006 | Kolkata | 55000 | 4.6 | 110 | 1600000 | 76 | 22980 | 6 | Kolkata | WH-WH006 |
| 7 | 10JUL2022 | WH007 | Jaipur | 40000 | 3.5 | 85 | 1100000 | 65 | 23011 | 6 | Jaipur | WH-WH007 |
| 8 | 08AUG2022 | WH008 | Ahmedabad | 52000 | 4.9 | 115 | 1550000 | 79 | 23042 | 6 | Ahmedabad | WH-WH008 |
| 9 | 02SEP2022 | WH009 | Kochi | 42000 | 3.7 | 80 | 1050000 | 68 | 23070 | 6 | Kochi | WH-WH009 |
| 10 | 01OCT2022 | WH010 | Bhopal | 46000 | 4.1 | 95 | 1300000 | 73 | 23101 | 6 | Bhopal | WH-WH010 |
| 11 | 15NOV2022 | WH011 | Indore | 47000 | 4.3 | 98 | 1350000 | 75 | 23131 | 6 | Indore | WH-WH011 |
| 12 | 01DEC2022 | WH012 | Surat | 58000 | 5.2 | 125 | 1750000 | 83 | 23162 | 6 | Surat | WH-WH012 |
| 13 | 10JAN2023 | WH013 | Nagpur | 43000 | 3.9 | 90 | 1200000 | 71 | 23192 | 6 | Nagpur | WH-WH013 |
| 14 | 01FEB2023 | WH014 | Noida | 65000 | 5.8 | 140 | 2000000 | 88 | 23223 | 6 | Noida | WH-WH014 |
| 15 | 15MAR2023 | WH015 | Faridabad | 62000 | 5.4 | 135 | 1900000 | 86 | 23254 | 6 | Faridabad | WH-WH015 |
· STRIP removes blanks.
· PROPCSE standardizes text.
· CATX builds codes.
· UPCASE enforces IDs.
· Prevents merge errors.
4. UTILIZATION CLASSIFICATION MACRO
%macro utilization_classify(input=, output=);
data &output;
set &input;
length Utilization_Level $12;
if Utilization_Rate >= 85 then Utilization_Level = "High";
else if Utilization_Rate >= 70 then Utilization_Level = "Medium";
else Utilization_Level = "Low";
run;
proc print data=&output;
run;
%mend;
%utilization_classify(input=warehouses_clean, output=warehouses_util);
OUTPUT:
| Obs | Start_Date | Warehouse_ID | Location | Storage_Capacity | Inventory_Turnover | Staff_Count | Operating_Cost | Utilization_Rate | Review_Date | Operational_Months | Location_Clean | Warehouse_Code | Utilization_Level |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 01JAN2022 | WH001 | Delhi | 50000 | 4.5 | 120 | 1500000 | 78 | 22827 | 6 | Delhi | WH-WH001 | Medium |
| 2 | 05FEB2022 | WH002 | Mumbai | 70000 | 6.2 | 150 | 2100000 | 85 | 22858 | 6 | Mumbai | WH-WH002 | High |
| 3 | 15MAR2022 | WH003 | Chennai | 45000 | 3.8 | 90 | 1200000 | 72 | 22889 | 6 | Chennai | WH-WH003 | Medium |
| 4 | 01APR2022 | WH004 | Hyderabad | 60000 | 5.1 | 130 | 1800000 | 82 | 22919 | 6 | Hyderabad | WH-WH004 | Medium |
| 5 | 12MAY2022 | WH005 | Pune | 48000 | 4.0 | 100 | 1400000 | 70 | 22950 | 6 | Pune | WH-WH005 | Medium |
| 6 | 25JUN2022 | WH006 | Kolkata | 55000 | 4.6 | 110 | 1600000 | 76 | 22980 | 6 | Kolkata | WH-WH006 | Medium |
| 7 | 10JUL2022 | WH007 | Jaipur | 40000 | 3.5 | 85 | 1100000 | 65 | 23011 | 6 | Jaipur | WH-WH007 | Low |
| 8 | 08AUG2022 | WH008 | Ahmedabad | 52000 | 4.9 | 115 | 1550000 | 79 | 23042 | 6 | Ahmedabad | WH-WH008 | Medium |
| 9 | 02SEP2022 | WH009 | Kochi | 42000 | 3.7 | 80 | 1050000 | 68 | 23070 | 6 | Kochi | WH-WH009 | Low |
| 10 | 01OCT2022 | WH010 | Bhopal | 46000 | 4.1 | 95 | 1300000 | 73 | 23101 | 6 | Bhopal | WH-WH010 | Medium |
| 11 | 15NOV2022 | WH011 | Indore | 47000 | 4.3 | 98 | 1350000 | 75 | 23131 | 6 | Indore | WH-WH011 | Medium |
| 12 | 01DEC2022 | WH012 | Surat | 58000 | 5.2 | 125 | 1750000 | 83 | 23162 | 6 | Surat | WH-WH012 | Medium |
| 13 | 10JAN2023 | WH013 | Nagpur | 43000 | 3.9 | 90 | 1200000 | 71 | 23192 | 6 | Nagpur | WH-WH013 | Medium |
| 14 | 01FEB2023 | WH014 | Noida | 65000 | 5.8 | 140 | 2000000 | 88 | 23223 | 6 | Noida | WH-WH014 | High |
| 15 | 15MAR2023 | WH015 | Faridabad | 62000 | 5.4 | 135 | 1900000 | 86 | 23254 | 6 | Faridabad | WH-WH015 | High |
· Automates logic.
· Creates business flags.
· Reusable macro.
· Reduces coding errors.
· Enables dashboarding.
5. FRAUD RISK MACRO
%macro fraud_flag(input=, output=);
data &output;
set &input;
if Operating_Cost > 1900000 and Inventory_Turnover < 4 then Fraud_Risk="High";
else Fraud_Risk="Normal";
run;
proc print data=&output;
run;
%mend;
%fraud_flag(input=warehouses_util, output=warehouses_risk);
OUTPUT:
| Obs | Fraud_risk | Start_Date | Warehouse_ID | Location | Storage_Capacity | Inventory_Turnover | Staff_Count | Operating_Cost | Utilization_Rate | Review_Date | Operational_Months | Location_Clean | Warehouse_Code | Utilization_Level |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Normal | 01JAN2022 | WH001 | Delhi | 50000 | 4.5 | 120 | 1500000 | 78 | 22827 | 6 | Delhi | WH-WH001 | Medium |
| 2 | Normal | 05FEB2022 | WH002 | Mumbai | 70000 | 6.2 | 150 | 2100000 | 85 | 22858 | 6 | Mumbai | WH-WH002 | High |
| 3 | Normal | 15MAR2022 | WH003 | Chennai | 45000 | 3.8 | 90 | 1200000 | 72 | 22889 | 6 | Chennai | WH-WH003 | Medium |
| 4 | Normal | 01APR2022 | WH004 | Hyderabad | 60000 | 5.1 | 130 | 1800000 | 82 | 22919 | 6 | Hyderabad | WH-WH004 | Medium |
| 5 | Normal | 12MAY2022 | WH005 | Pune | 48000 | 4.0 | 100 | 1400000 | 70 | 22950 | 6 | Pune | WH-WH005 | Medium |
| 6 | Normal | 25JUN2022 | WH006 | Kolkata | 55000 | 4.6 | 110 | 1600000 | 76 | 22980 | 6 | Kolkata | WH-WH006 | Medium |
| 7 | Normal | 10JUL2022 | WH007 | Jaipur | 40000 | 3.5 | 85 | 1100000 | 65 | 23011 | 6 | Jaipur | WH-WH007 | Low |
| 8 | Normal | 08AUG2022 | WH008 | Ahmedabad | 52000 | 4.9 | 115 | 1550000 | 79 | 23042 | 6 | Ahmedabad | WH-WH008 | Medium |
| 9 | Normal | 02SEP2022 | WH009 | Kochi | 42000 | 3.7 | 80 | 1050000 | 68 | 23070 | 6 | Kochi | WH-WH009 | Low |
| 10 | Normal | 01OCT2022 | WH010 | Bhopal | 46000 | 4.1 | 95 | 1300000 | 73 | 23101 | 6 | Bhopal | WH-WH010 | Medium |
| 11 | Normal | 15NOV2022 | WH011 | Indore | 47000 | 4.3 | 98 | 1350000 | 75 | 23131 | 6 | Indore | WH-WH011 | Medium |
| 12 | Normal | 01DEC2022 | WH012 | Surat | 58000 | 5.2 | 125 | 1750000 | 83 | 23162 | 6 | Surat | WH-WH012 | Medium |
| 13 | Normal | 10JAN2023 | WH013 | Nagpur | 43000 | 3.9 | 90 | 1200000 | 71 | 23192 | 6 | Nagpur | WH-WH013 | Medium |
| 14 | Normal | 01FEB2023 | WH014 | Noida | 65000 | 5.8 | 140 | 2000000 | 88 | 23223 | 6 | Noida | WH-WH014 | High |
| 15 | Normal | 15MAR2023 | WH015 | Faridabad | 62000 | 5.4 | 135 | 1900000 | 86 | 23254 | 6 | Faridabad | WH-WH015 | High |
· Detects inefficiency.
· Flags audit cases.
· Uses numeric logic.
· Supports compliance.
· Prevents revenue loss.
6. PROC SQL – BUSINESS QUERIES
proc sql;
create table warehouse_summary as
select Location_Clean,
avg(Utilization_Rate) as Avg_Utilization,
sum(Operating_Cost) as Total_Cost
from warehouses_risk
group by Location_Clean;
quit;
proc print data=warehouse_summary;
run;
OUTPUT:
| Obs | Location_Clean | Avg_Utilization | Total_Cost |
|---|---|---|---|
| 1 | Ahmedabad | 79 | 1550000 |
| 2 | Bhopal | 73 | 1300000 |
| 3 | Chennai | 72 | 1200000 |
| 4 | Delhi | 78 | 1500000 |
| 5 | Faridabad | 86 | 1900000 |
| 6 | Hyderabad | 82 | 1800000 |
| 7 | Indore | 75 | 1350000 |
| 8 | Jaipur | 65 | 1100000 |
| 9 | Kochi | 68 | 1050000 |
| 10 | Kolkata | 76 | 1600000 |
| 11 | Mumbai | 85 | 2100000 |
| 12 | Nagpur | 71 | 1200000 |
| 13 | Noida | 88 | 2000000 |
| 14 | Pune | 70 | 1400000 |
| 15 | Surat | 83 | 1750000 |
· Aggregates KPIs.
· Groups by city.
· Produces management reports.
· SQL-based analytics.
· Faster querying.
7. PROC MEANS
proc means data=warehouses_risk mean min max;
var Storage_Capacity Operating_Cost Utilization_Rate;
run;
OUTPUT:
The MEANS Procedure
| Variable | Mean | Minimum | Maximum |
|---|---|---|---|
Storage_Capacity Operating_Cost Utilization_Rate | 52200.00 1520000.00 76.7333333 | 40000.00 1050000.00 65.0000000 | 70000.00 2100000.00 88.0000000 |
· Shows central tendency.
· Finds extreme values.
· Validates data.
· Supports planning.
· Baseline metrics.
8. PROC CORR
proc corr data=warehouses_risk;
var Storage_Capacity Utilization_Rate Operating_Cost;
run;
OUTPUT:
The CORR Procedure
| 3 Variables: | Storage_Capacity Utilization_Rate Operating_Cost |
|---|
| Simple Statistics | ||||||
|---|---|---|---|---|---|---|
| Variable | N | Mean | Std Dev | Sum | Minimum | Maximum |
| Storage_Capacity | 15 | 52200 | 9088 | 783000 | 40000 | 70000 |
| Utilization_Rate | 15 | 76.73333 | 7.00476 | 1151 | 65.00000 | 88.00000 |
| Operating_Cost | 15 | 1520000 | 332093 | 22800000 | 1050000 | 2100000 |
| Pearson Correlation Coefficients, N = 15 Prob > |r| under H0: Rho=0 | |||
|---|---|---|---|
| Storage_Capacity | Utilization_Rate | Operating_Cost | |
| Storage_Capacity | 1.00000 | 0.93551 <.0001 | 0.99136 <.0001 |
| Utilization_Rate | 0.93551 <.0001 | 1.00000 | 0.94973 <.0001 |
| Operating_Cost | 0.99136 <.0001 | 0.94973 <.0001 | 1.00000 |
· Checks dependencies.
· Cost vs usage link.
· Helps optimization.
· Identifies inefficiency.
· Supports forecasting.
9. PROC FREQ
proc freq data=warehouses_risk;
tables Utilization_Level Fraud_Risk;
run;
OUTPUT:
The FREQ Procedure
| Utilization_Level | Frequency | Percent | Cumulative Frequency | Cumulative Percent |
|---|---|---|---|---|
| High | 3 | 20.00 | 3 | 20.00 |
| Low | 2 | 13.33 | 5 | 33.33 |
| Medium | 10 | 66.67 | 15 | 100.00 |
| Fraud_risk | Frequency | Percent | Cumulative Frequency | Cumulative Percent |
|---|---|---|---|---|
| Normal | 15 | 100.00 | 15 | 100.00 |
· Counts categories.
· Identifies risky warehouses.
· Quality control.
· Compliance reports.
· Audit support.
10. PROC UNIVARIATE
proc univariate data=warehouses_risk;
var Operating_Cost Utilization_Rate;
run;
OUTPUT:
The UNIVARIATE Procedure
Variable: Operating_Cost
| Moments | |||
|---|---|---|---|
| N | 15 | Sum Weights | 15 |
| Mean | 1520000 | Sum Observations | 22800000 |
| Std Deviation | 332092.93 | Variance | 1.10286E11 |
| Skewness | 0.30264324 | Kurtosis | -1.0555485 |
| Uncorrected SS | 3.62E13 | Corrected SS | 1.544E12 |
| Coeff Variation | 21.8482191 | Std Error Mean | 85746.0259 |
| Basic Statistical Measures | |||
|---|---|---|---|
| Location | Variability | ||
| Mean | 1520000 | Std Deviation | 332093 |
| Median | 1500000 | Variance | 1.10286E11 |
| Mode | 1200000 | Range | 1050000 |
| Interquartile Range | 600000 | ||
| Tests for Location: Mu0=0 | ||||
|---|---|---|---|---|
| Test | Statistic | p Value | ||
| Student's t | t | 17.72677 | Pr > |t| | <.0001 |
| Sign | M | 7.5 | Pr >= |M| | <.0001 |
| Signed Rank | S | 60 | Pr >= |S| | <.0001 |
| Quantiles (Definition 5) | |
|---|---|
| Level | Quantile |
| 100% Max | 2100000 |
| 99% | 2100000 |
| 95% | 2100000 |
| 90% | 2000000 |
| 75% Q3 | 1800000 |
| 50% Median | 1500000 |
| 25% Q1 | 1200000 |
| 10% | 1100000 |
| 5% | 1050000 |
| 1% | 1050000 |
| 0% Min | 1050000 |
| Extreme Observations | |||
|---|---|---|---|
| Lowest | Highest | ||
| Value | Obs | Value | Obs |
| 1050000 | 9 | 1750000 | 12 |
| 1100000 | 7 | 1800000 | 4 |
| 1200000 | 13 | 1900000 | 15 |
| 1200000 | 3 | 2000000 | 14 |
| 1300000 | 10 | 2100000 | 2 |
The UNIVARIATE Procedure
Variable: Utilization_Rate
| Moments | |||
|---|---|---|---|
| N | 15 | Sum Weights | 15 |
| Mean | 76.7333333 | Sum Observations | 1151 |
| Std Deviation | 7.00476029 | Variance | 49.0666667 |
| Skewness | 0.0618266 | Kurtosis | -1.0712095 |
| Uncorrected SS | 89007 | Corrected SS | 686.933333 |
| Coeff Variation | 9.12870585 | Std Error Mean | 1.80862133 |
| Basic Statistical Measures | |||
|---|---|---|---|
| Location | Variability | ||
| Mean | 76.73333 | Std Deviation | 7.00476 |
| Median | 76.00000 | Variance | 49.06667 |
| Mode | . | Range | 23.00000 |
| Interquartile Range | 12.00000 | ||
| Tests for Location: Mu0=0 | ||||
|---|---|---|---|---|
| Test | Statistic | p Value | ||
| Student's t | t | 42.42642 | Pr > |t| | <.0001 |
| Sign | M | 7.5 | Pr >= |M| | <.0001 |
| Signed Rank | S | 60 | Pr >= |S| | <.0001 |
| Quantiles (Definition 5) | |
|---|---|
| Level | Quantile |
| 100% Max | 88 |
| 99% | 88 |
| 95% | 88 |
| 90% | 86 |
| 75% Q3 | 83 |
| 50% Median | 76 |
| 25% Q1 | 71 |
| 10% | 68 |
| 5% | 65 |
| 1% | 65 |
| 0% Min | 65 |
| Extreme Observations | |||
|---|---|---|---|
| Lowest | Highest | ||
| Value | Obs | Value | Obs |
| 65 | 7 | 82 | 4 |
| 68 | 9 | 83 | 12 |
| 70 | 5 | 85 | 2 |
| 71 | 13 | 86 | 15 |
| 72 | 3 | 88 | 14 |
· Finds abnormal costs.
· Measures skewness.
· Supports fraud analysis.
· Statistical profiling.
· Risk analytics.
11. PROC SGPLOT
proc sgplot data=warehouses_risk;
scatter x=Storage_Capacity y=Utilization_Rate;
run;
OUTPUT:
· Capacity vs usage.
· Pattern detection.
· Outlier spotting.
· Business storytelling.
· Dashboard support.
12. PROC TRANSPOSE
proc transpose data=warehouse_summary out=warehouse_wide;
by Location_Clean NotSorted;
id Location_Clean;
var Avg_Utilization;
run;
proc print data=warehouse_wide;
run;
OUTPUT:
| Obs | Location_Clean | _NAME_ | Ahmedabad | Bhopal | Chennai | Delhi | Faridabad | Hyderabad | Indore | Jaipur | Kochi | Kolkata | Mumbai | Nagpur | Noida | Pune | Surat |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Ahmedabad | Avg_Utilization | 79 | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
| 2 | Bhopal | Avg_Utilization | . | 73 | . | . | . | . | . | . | . | . | . | . | . | . | . |
| 3 | Chennai | Avg_Utilization | . | . | 72 | . | . | . | . | . | . | . | . | . | . | . | . |
| 4 | Delhi | Avg_Utilization | . | . | . | 78 | . | . | . | . | . | . | . | . | . | . | . |
| 5 | Faridabad | Avg_Utilization | . | . | . | . | 86 | . | . | . | . | . | . | . | . | . | . |
| 6 | Hyderabad | Avg_Utilization | . | . | . | . | . | 82 | . | . | . | . | . | . | . | . | . |
| 7 | Indore | Avg_Utilization | . | . | . | . | . | . | 75 | . | . | . | . | . | . | . | . |
| 8 | Jaipur | Avg_Utilization | . | . | . | . | . | . | . | 65 | . | . | . | . | . | . | . |
| 9 | Kochi | Avg_Utilization | . | . | . | . | . | . | . | . | 68 | . | . | . | . | . | . |
| 10 | Kolkata | Avg_Utilization | . | . | . | . | . | . | . | . | . | 76 | . | . | . | . | . |
| 11 | Mumbai | Avg_Utilization | . | . | . | . | . | . | . | . | . | . | 85 | . | . | . | . |
| 12 | Nagpur | Avg_Utilization | . | . | . | . | . | . | . | . | . | . | . | 71 | . | . | . |
| 13 | Noida | Avg_Utilization | . | . | . | . | . | . | . | . | . | . | . | . | 88 | . | . |
| 14 | Pune | Avg_Utilization | . | . | . | . | . | . | . | . | . | . | . | . | . | 70 | . |
| 15 | Surat | Avg_Utilization | . | . | . | . | . | . | . | . | . | . | . | . | . | . | 83 |
· Converts rows to columns.
· Dashboard layout.
· Excel-style view.
· Comparison easier.
· Presentation ready.
13. PROC DATASETS DELETE
proc datasets library=work;
delete warehouses_raw;
quit;
LOG:
· Removes junk data.
· Frees memory.
· Controls versions.
· Prevents confusion.
· Validation compliance.
What You Will Learn
In this tutorial, you will learn how to create structured warehouse datasets, apply date functions like INTCK and INTNX, clean text using character functions, and build automated macros for utilization classification and fraud risk detection.
CONCLUSION:
This warehouse analytics system demonstrates how SAS is used in logistics, supply chain, and financial audit teams to monitor utilization, detect cost fraud, and optimize operational efficiency using SQL, statistics, macros, and data engineering.
INTERVIEW QUESTIONS FOR YOU
About the Author:
SAS Learning Hub is a data analytics and SAS programming platform focused on clinical, financial, and real-world data analysis. The content is created by professionals with academic training in Pharmaceutics and hands-on experience in Base SAS, PROC SQL, Macros, SDTM, and ADaM, providing practical and industry-relevant SAS learning resources.
Disclaimer:
The datasets and analysis in this article are created for educational and demonstration purposes only. They do not represent Warehouse data.
Our Mission:
This blog provides industry-focused SAS programming tutorials and analytics projects covering finance, healthcare, and technology.
This project is suitable for:
SAS Programmer Interviews
SAS Programmer Job Seekers
SAS Analysts
Comments
Post a Comment