382.How Do You Detect Hidden Fraud Inside EV Charging Networks Using SAS Analytics?
How Do You Detect Hidden Fraud Inside EV Charging Networks Using SAS Analytics?
HERE IN THIS PROJECT WE USED THESE SAS STATEMENTS —
DATA STEP | PROC SQL | PROC PRINT | PROC SGPLOT | MACROS | PROC CORR | PROC MEANS | PROC FREQ | PROC UNIVARIATE | APPEND | PROC SORT | PROC DATASETS DELETE
Introduction – Why EV Charging Data Matters
Electric vehicles (EVs) are transforming the global transportation industry. Governments, automobile manufacturers, and energy companies are investing billions of dollars to build large-scale EV charging networks across cities, highways, and commercial zones.
However, building charging stations is only the first step. The real challenge lies in operating them efficiently, reliably, and profitably.
EV network operators must continuously analyze:
· How many users are visiting each station
· How long drivers wait for charging
· Whether stations are overloaded or underused
· Which chargers are reliable
· Whether abnormal usage patterns indicate fraud, misuse, or revenue leakage
This is where data analytics using SAS becomes a powerful tool.
Dataset Overview – EV Charging Stations
The dataset created in this project represents EV charging stations installed across multiple Indian cities. Each row corresponds to a single charging station.
The dataset contains operational, technical, and reliability metrics such as:
Station ID
City
Type of charger (Fast, Normal, Ultra-fast)
Charging power in kilowatts
Average waiting time
Number of daily users
Reliability score
Installation date
1. BUSINESS CONTEXT
Electric Vehicle (EV) infrastructure is one of the fastest growing industries in the world.
Charging station companies continuously analyze:
- City-wise demand
- Charger utilization
- Waiting time
- Reliability
- Revenue leakage
- Abnormal station behaviour
2. EV CHARGING STATION RAW DATA CREATION
data ev_stations_raw;
length Station_ID $10 City $20 Charging_Type $15;
format Install_Date date9.;
input Station_ID $ City $ Charging_Type $ Power_kW Avg_Wait_Time Daily_Users
Reliability_Score Install_Date : date9.;
datalines;
EV001 Hyderabad Fast 120 18 340 92 01JAN2023
EV002 Bengaluru Fast 150 22 380 88 15JAN2023
EV003 Chennai Normal 60 35 220 80 10FEB2023
EV004 Delhi Fast 180 15 410 95 01MAR2023
EV005 Mumbai Ultra 250 10 520 97 15MAR2023
EV006 Pune Normal 80 40 200 78 10APR2023
EV007 Kochi Fast 140 25 310 85 01MAY2023
EV008 Trivandrum Normal 70 45 180 75 20MAY2023
EV009 Jaipur Fast 130 30 290 82 10JUN2023
EV010 Chandigarh Fast 160 20 350 90 01JUL2023
EV011 Ahmedabad Ultra 240 12 480 96 15JUL2023
EV012 Indore Normal 75 38 210 79 01AUG2023
EV013 Nagpur Fast 135 28 300 84 15AUG2023
EV014 Vizag Normal 65 42 190 77 01SEP2023
EV015 Coimbatore Fast 145 24 320 89 15SEP2023
;
run;
proc print data=ev_stations_raw;
run;
OUTPUT:
| Obs | Station_ID | City | Charging_Type | Install_Date | Power_kW | Avg_Wait_Time | Daily_Users | Reliability_Score |
|---|---|---|---|---|---|---|---|---|
| 1 | EV001 | Hyderabad | Fast | 01JAN2023 | 120 | 18 | 340 | 92 |
| 2 | EV002 | Bengaluru | Fast | 15JAN2023 | 150 | 22 | 380 | 88 |
| 3 | EV003 | Chennai | Normal | 10FEB2023 | 60 | 35 | 220 | 80 |
| 4 | EV004 | Delhi | Fast | 01MAR2023 | 180 | 15 | 410 | 95 |
| 5 | EV005 | Mumbai | Ultra | 15MAR2023 | 250 | 10 | 520 | 97 |
| 6 | EV006 | Pune | Normal | 10APR2023 | 80 | 40 | 200 | 78 |
| 7 | EV007 | Kochi | Fast | 01MAY2023 | 140 | 25 | 310 | 85 |
| 8 | EV008 | Trivandrum | Normal | 20MAY2023 | 70 | 45 | 180 | 75 |
| 9 | EV009 | Jaipur | Fast | 10JUN2023 | 130 | 30 | 290 | 82 |
| 10 | EV010 | Chandigarh | Fast | 01JUL2023 | 160 | 20 | 350 | 90 |
| 11 | EV011 | Ahmedabad | Ultra | 15JUL2023 | 240 | 12 | 480 | 96 |
| 12 | EV012 | Indore | Normal | 01AUG2023 | 75 | 38 | 210 | 79 |
| 13 | EV013 | Nagpur | Fast | 15AUG2023 | 135 | 28 | 300 | 84 |
| 14 | EV014 | Vizag | Normal | 01SEP2023 | 65 | 42 | 190 | 77 |
| 15 | EV015 | Coimbatore | Fast | 15SEP2023 | 145 | 24 | 320 | 89 |
Why this code is used
· Structured EV dataset
· Realistic business variables
· Date-driven system
What it does
· Creates EV stations table
· Stores performance metrics
· Adds installation date
Why required
· Base analytics
· Source of truth
· Simulation realism
Interview angle
· DATA step mastery
· Format usage
· Input control
3. DATE ENGINEERING (MDY, INTCK, INTNX)
data ev_dates;
set ev_stations_raw;
Review_Date = mdy(12,31,2024);
Operational_Days = intck('day', Install_Date, Review_Date);
Next_Service = intnx('month', Install_Date, 6);
format Review_Date Next_Service date9.;
run;
proc print data=ev_dates;
run;
OUTPUT:
| Obs | Station_ID | City | Charging_Type | Install_Date | Power_kW | Avg_Wait_Time | Daily_Users | Reliability_Score | Review_Date | Operational_Days | Next_Service |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | EV001 | Hyderabad | Fast | 01JAN2023 | 120 | 18 | 340 | 92 | 31DEC2024 | 730 | 01JUL2023 |
| 2 | EV002 | Bengaluru | Fast | 15JAN2023 | 150 | 22 | 380 | 88 | 31DEC2024 | 716 | 01JUL2023 |
| 3 | EV003 | Chennai | Normal | 10FEB2023 | 60 | 35 | 220 | 80 | 31DEC2024 | 690 | 01AUG2023 |
| 4 | EV004 | Delhi | Fast | 01MAR2023 | 180 | 15 | 410 | 95 | 31DEC2024 | 671 | 01SEP2023 |
| 5 | EV005 | Mumbai | Ultra | 15MAR2023 | 250 | 10 | 520 | 97 | 31DEC2024 | 657 | 01SEP2023 |
| 6 | EV006 | Pune | Normal | 10APR2023 | 80 | 40 | 200 | 78 | 31DEC2024 | 631 | 01OCT2023 |
| 7 | EV007 | Kochi | Fast | 01MAY2023 | 140 | 25 | 310 | 85 | 31DEC2024 | 610 | 01NOV2023 |
| 8 | EV008 | Trivandrum | Normal | 20MAY2023 | 70 | 45 | 180 | 75 | 31DEC2024 | 591 | 01NOV2023 |
| 9 | EV009 | Jaipur | Fast | 10JUN2023 | 130 | 30 | 290 | 82 | 31DEC2024 | 570 | 01DEC2023 |
| 10 | EV010 | Chandigarh | Fast | 01JUL2023 | 160 | 20 | 350 | 90 | 31DEC2024 | 549 | 01JAN2024 |
| 11 | EV011 | Ahmedabad | Ultra | 15JUL2023 | 240 | 12 | 480 | 96 | 31DEC2024 | 535 | 01JAN2024 |
| 12 | EV012 | Indore | Normal | 01AUG2023 | 75 | 38 | 210 | 79 | 31DEC2024 | 518 | 01FEB2024 |
| 13 | EV013 | Nagpur | Fast | 15AUG2023 | 135 | 28 | 300 | 84 | 31DEC2024 | 504 | 01FEB2024 |
| 14 | EV014 | Vizag | Normal | 01SEP2023 | 65 | 42 | 190 | 77 | 31DEC2024 | 487 | 01MAR2024 |
| 15 | EV015 | Coimbatore | Fast | 15SEP2023 | 145 | 24 | 320 | 89 | 31DEC2024 | 473 | 01MAR2024 |
Why this code is used
· Time-based analytics
· Lifecycle tracking
· Service scheduling
What it does
· Calculates operating days
· Predicts next service
· Fixes review date
Why required
· Asset lifecycle
· Maintenance planning
· KPI trends
Interview angle
· INTCK vs INTNX
· MDY usage
· Date arithmetic
4. CHARACTER & NUMERIC FUNCTIONS
data ev_clean;
set ev_dates;
City_Std = propcase(strip(City));
Charger_Type = upcase(trim(Charging_Type));
Station_Key = catx("-", Station_ID, City_Std);
Reliability_Filled = coalesce(Reliability_Score, 0);
run;
proc print data=ev_clean;
var Station_ID City City_Std Charger_Type Station_Key Reliability_Filled;
run;
OUTPUT:
| Obs | Station_ID | City | City_Std | Charger_Type | Station_Key | Reliability_Filled |
|---|---|---|---|---|---|---|
| 1 | EV001 | Hyderabad | Hyderabad | FAST | EV001-Hyderabad | 92 |
| 2 | EV002 | Bengaluru | Bengaluru | FAST | EV002-Bengaluru | 88 |
| 3 | EV003 | Chennai | Chennai | NORMAL | EV003-Chennai | 80 |
| 4 | EV004 | Delhi | Delhi | FAST | EV004-Delhi | 95 |
| 5 | EV005 | Mumbai | Mumbai | ULTRA | EV005-Mumbai | 97 |
| 6 | EV006 | Pune | Pune | NORMAL | EV006-Pune | 78 |
| 7 | EV007 | Kochi | Kochi | FAST | EV007-Kochi | 85 |
| 8 | EV008 | Trivandrum | Trivandrum | NORMAL | EV008-Trivandrum | 75 |
| 9 | EV009 | Jaipur | Jaipur | FAST | EV009-Jaipur | 82 |
| 10 | EV010 | Chandigarh | Chandigarh | FAST | EV010-Chandigarh | 90 |
| 11 | EV011 | Ahmedabad | Ahmedabad | ULTRA | EV011-Ahmedabad | 96 |
| 12 | EV012 | Indore | Indore | NORMAL | EV012-Indore | 79 |
| 13 | EV013 | Nagpur | Nagpur | FAST | EV013-Nagpur | 84 |
| 14 | EV014 | Vizag | Vizag | NORMAL | EV014-Vizag | 77 |
| 15 | EV015 | Coimbatore | Coimbatore | FAST | EV015-Coimbatore | 89 |
Why this code is used
· Standardization
· Key creation
· Missing handling
What it does
· Cleans city names
· Formats charger type
· Creates station key
Why required
· Data quality
· Joins
· Reporting
Interview angle
· CATX vs CAT
· STRIP vs TRIM
· COALESCE
5. PROC SQL – Business Layer
proc sql;
create table ev_sql as
select *,
(Daily_Users * Power_kW) as Energy_Load,
(Avg_Wait_Time / Power_kW) as Delay_Ratio
from ev_clean;
quit;
proc print data=ev_sql;
run;
OUTPUT:
| Obs | Station_ID | City | Charging_Type | Install_Date | Power_kW | Avg_Wait_Time | Daily_Users | Reliability_Score | Review_Date | Operational_Days | Next_Service | City_Std | Charger_Type | Station_Key | Reliability_Filled | Energy_Load | Delay_Ratio |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | EV001 | Hyderabad | Fast | 01JAN2023 | 120 | 18 | 340 | 92 | 31DEC2024 | 730 | 01JUL2023 | Hyderabad | FAST | EV001-Hyderabad | 92 | 40800 | 0.15000 |
| 2 | EV002 | Bengaluru | Fast | 15JAN2023 | 150 | 22 | 380 | 88 | 31DEC2024 | 716 | 01JUL2023 | Bengaluru | FAST | EV002-Bengaluru | 88 | 57000 | 0.14667 |
| 3 | EV003 | Chennai | Normal | 10FEB2023 | 60 | 35 | 220 | 80 | 31DEC2024 | 690 | 01AUG2023 | Chennai | NORMAL | EV003-Chennai | 80 | 13200 | 0.58333 |
| 4 | EV004 | Delhi | Fast | 01MAR2023 | 180 | 15 | 410 | 95 | 31DEC2024 | 671 | 01SEP2023 | Delhi | FAST | EV004-Delhi | 95 | 73800 | 0.08333 |
| 5 | EV005 | Mumbai | Ultra | 15MAR2023 | 250 | 10 | 520 | 97 | 31DEC2024 | 657 | 01SEP2023 | Mumbai | ULTRA | EV005-Mumbai | 97 | 130000 | 0.04000 |
| 6 | EV006 | Pune | Normal | 10APR2023 | 80 | 40 | 200 | 78 | 31DEC2024 | 631 | 01OCT2023 | Pune | NORMAL | EV006-Pune | 78 | 16000 | 0.50000 |
| 7 | EV007 | Kochi | Fast | 01MAY2023 | 140 | 25 | 310 | 85 | 31DEC2024 | 610 | 01NOV2023 | Kochi | FAST | EV007-Kochi | 85 | 43400 | 0.17857 |
| 8 | EV008 | Trivandrum | Normal | 20MAY2023 | 70 | 45 | 180 | 75 | 31DEC2024 | 591 | 01NOV2023 | Trivandrum | NORMAL | EV008-Trivandrum | 75 | 12600 | 0.64286 |
| 9 | EV009 | Jaipur | Fast | 10JUN2023 | 130 | 30 | 290 | 82 | 31DEC2024 | 570 | 01DEC2023 | Jaipur | FAST | EV009-Jaipur | 82 | 37700 | 0.23077 |
| 10 | EV010 | Chandigarh | Fast | 01JUL2023 | 160 | 20 | 350 | 90 | 31DEC2024 | 549 | 01JAN2024 | Chandigarh | FAST | EV010-Chandigarh | 90 | 56000 | 0.12500 |
| 11 | EV011 | Ahmedabad | Ultra | 15JUL2023 | 240 | 12 | 480 | 96 | 31DEC2024 | 535 | 01JAN2024 | Ahmedabad | ULTRA | EV011-Ahmedabad | 96 | 115200 | 0.05000 |
| 12 | EV012 | Indore | Normal | 01AUG2023 | 75 | 38 | 210 | 79 | 31DEC2024 | 518 | 01FEB2024 | Indore | NORMAL | EV012-Indore | 79 | 15750 | 0.50667 |
| 13 | EV013 | Nagpur | Fast | 15AUG2023 | 135 | 28 | 300 | 84 | 31DEC2024 | 504 | 01FEB2024 | Nagpur | FAST | EV013-Nagpur | 84 | 40500 | 0.20741 |
| 14 | EV014 | Vizag | Normal | 01SEP2023 | 65 | 42 | 190 | 77 | 31DEC2024 | 487 | 01MAR2024 | Vizag | NORMAL | EV014-Vizag | 77 | 12350 | 0.64615 |
| 15 | EV015 | Coimbatore | Fast | 15SEP2023 | 145 | 24 | 320 | 89 | 31DEC2024 | 473 | 01MAR2024 | Coimbatore | FAST | EV015-Coimbatore | 89 | 46400 | 0.16552 |
Why this code is used
· Business metrics
· SQL modeling
· Virtual columns
What it does
· Creates Energy Load
· Calculates delay ratio
· Enhances table
Why required
· KPI engineering
· Performance analytics
· Optimization
Interview angle
· SQL computed columns
· Alias usage
6. UTILIZATION CLASSIFICATION MACRO
%macro utilization;
data ev_util;
set ev_sql;
if Daily_Users > 400 then Utilization="Overloaded";
else if 250 <= Daily_Users <= 400 then Utilization = "Optimal";
else Utilization="Underused";
run;
proc print data=ev_util;
run;
%mend;
%utilization;
OUTPUT:
| Obs | Station_ID | City | Charging_Type | Install_Date | Power_kW | Avg_Wait_Time | Daily_Users | Reliability_Score | Review_Date | Operational_Days | Next_Service | City_Std | Charger_Type | Station_Key | Reliability_Filled | Energy_Load | Delay_Ratio | Utilization |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | EV001 | Hyderabad | Fast | 01JAN2023 | 120 | 18 | 340 | 92 | 31DEC2024 | 730 | 01JUL2023 | Hyderabad | FAST | EV001-Hyderabad | 92 | 40800 | 0.15000 | Optimal |
| 2 | EV002 | Bengaluru | Fast | 15JAN2023 | 150 | 22 | 380 | 88 | 31DEC2024 | 716 | 01JUL2023 | Bengaluru | FAST | EV002-Bengaluru | 88 | 57000 | 0.14667 | Optimal |
| 3 | EV003 | Chennai | Normal | 10FEB2023 | 60 | 35 | 220 | 80 | 31DEC2024 | 690 | 01AUG2023 | Chennai | NORMAL | EV003-Chennai | 80 | 13200 | 0.58333 | Underused |
| 4 | EV004 | Delhi | Fast | 01MAR2023 | 180 | 15 | 410 | 95 | 31DEC2024 | 671 | 01SEP2023 | Delhi | FAST | EV004-Delhi | 95 | 73800 | 0.08333 | Overloaded |
| 5 | EV005 | Mumbai | Ultra | 15MAR2023 | 250 | 10 | 520 | 97 | 31DEC2024 | 657 | 01SEP2023 | Mumbai | ULTRA | EV005-Mumbai | 97 | 130000 | 0.04000 | Overloaded |
| 6 | EV006 | Pune | Normal | 10APR2023 | 80 | 40 | 200 | 78 | 31DEC2024 | 631 | 01OCT2023 | Pune | NORMAL | EV006-Pune | 78 | 16000 | 0.50000 | Underused |
| 7 | EV007 | Kochi | Fast | 01MAY2023 | 140 | 25 | 310 | 85 | 31DEC2024 | 610 | 01NOV2023 | Kochi | FAST | EV007-Kochi | 85 | 43400 | 0.17857 | Optimal |
| 8 | EV008 | Trivandrum | Normal | 20MAY2023 | 70 | 45 | 180 | 75 | 31DEC2024 | 591 | 01NOV2023 | Trivandrum | NORMAL | EV008-Trivandrum | 75 | 12600 | 0.64286 | Underused |
| 9 | EV009 | Jaipur | Fast | 10JUN2023 | 130 | 30 | 290 | 82 | 31DEC2024 | 570 | 01DEC2023 | Jaipur | FAST | EV009-Jaipur | 82 | 37700 | 0.23077 | Optimal |
| 10 | EV010 | Chandigarh | Fast | 01JUL2023 | 160 | 20 | 350 | 90 | 31DEC2024 | 549 | 01JAN2024 | Chandigarh | FAST | EV010-Chandigarh | 90 | 56000 | 0.12500 | Optimal |
| 11 | EV011 | Ahmedabad | Ultra | 15JUL2023 | 240 | 12 | 480 | 96 | 31DEC2024 | 535 | 01JAN2024 | Ahmedabad | ULTRA | EV011-Ahmedabad | 96 | 115200 | 0.05000 | Overloaded |
| 12 | EV012 | Indore | Normal | 01AUG2023 | 75 | 38 | 210 | 79 | 31DEC2024 | 518 | 01FEB2024 | Indore | NORMAL | EV012-Indore | 79 | 15750 | 0.50667 | Underused |
| 13 | EV013 | Nagpur | Fast | 15AUG2023 | 135 | 28 | 300 | 84 | 31DEC2024 | 504 | 01FEB2024 | Nagpur | FAST | EV013-Nagpur | 84 | 40500 | 0.20741 | Optimal |
| 14 | EV014 | Vizag | Normal | 01SEP2023 | 65 | 42 | 190 | 77 | 31DEC2024 | 487 | 01MAR2024 | Vizag | NORMAL | EV014-Vizag | 77 | 12350 | 0.64615 | Underused |
| 15 | EV015 | Coimbatore | Fast | 15SEP2023 | 145 | 24 | 320 | 89 | 31DEC2024 | 473 | 01MAR2024 | Coimbatore | FAST | EV015-Coimbatore | 89 | 46400 | 0.16552 | Optimal |
Why this code is used
· Automation
· Business rules
· Reusability
What it does
· Classifies stations
· Labels utilization
· Supports reporting
Why required
· Capacity planning
· Resource allocation
· Decision support
Interview angle
· Macro logic
· Conditional coding
· Automation
7. PROC MEANS
proc means data=ev_util;
var Power_kW Avg_Wait_Time Daily_Users Reliability_Score Energy_Load;
run;
OUTPUT:
The MEANS Procedure
| Variable | N | Mean | Std Dev | Minimum | Maximum |
|---|---|---|---|---|---|
Power_kW Avg_Wait_Time Daily_Users Reliability_Score Energy_Load | 15 15 15 15 15 | 133.3333333 26.9333333 313.3333333 85.8000000 47380.00 | 59.0600985 11.1449327 104.3118037 7.2624278 35938.24 | 60.0000000 10.0000000 180.0000000 75.0000000 12350.00 | 250.0000000 45.0000000 520.0000000 97.0000000 130000.00 |
Why this code is used
· Descriptive statistics
· Data profiling
· Baseline metrics
What it does
· Mean
· Min
· Max
· Standard deviation
Why required
· Performance summary
· Data understanding
· Management reporting
Interview angle
· Descriptive analytics
· KPI validation
· Distribution check
8. PROC UNIVARIATE
proc univariate data=ev_util;
var Daily_Users Avg_Wait_Time;
run;
OUTPUT:
The UNIVARIATE Procedure
Variable: Daily_Users
| Moments | |||
|---|---|---|---|
| N | 15 | Sum Weights | 15 |
| Mean | 313.333333 | Sum Observations | 4700 |
| Std Deviation | 104.311804 | Variance | 10880.9524 |
| Skewness | 0.51491293 | Kurtosis | -0.4205403 |
| Uncorrected SS | 1625000 | Corrected SS | 152333.333 |
| Coeff Variation | 33.2910012 | Std Error Mean | 26.9331919 |
| Basic Statistical Measures | |||
|---|---|---|---|
| Location | Variability | ||
| Mean | 313.3333 | Std Deviation | 104.31180 |
| Median | 310.0000 | Variance | 10881 |
| Mode | . | Range | 340.00000 |
| Interquartile Range | 170.00000 | ||
| Tests for Location: Mu0=0 | ||||
|---|---|---|---|---|
| Test | Statistic | p Value | ||
| Student's t | t | 11.63372 | Pr > |t| | <.0001 |
| Sign | M | 7.5 | Pr >= |M| | <.0001 |
| Signed Rank | S | 60 | Pr >= |S| | <.0001 |
| Quantiles (Definition 5) | |
|---|---|
| Level | Quantile |
| 100% Max | 520 |
| 99% | 520 |
| 95% | 520 |
| 90% | 480 |
| 75% Q3 | 380 |
| 50% Median | 310 |
| 25% Q1 | 210 |
| 10% | 190 |
| 5% | 180 |
| 1% | 180 |
| 0% Min | 180 |
| Extreme Observations | |||
|---|---|---|---|
| Lowest | Highest | ||
| Value | Obs | Value | Obs |
| 180 | 8 | 350 | 10 |
| 190 | 14 | 380 | 2 |
| 200 | 6 | 410 | 4 |
| 210 | 12 | 480 | 11 |
| 220 | 3 | 520 | 5 |
The UNIVARIATE Procedure
Variable: Avg_Wait_Time
| Moments | |||
|---|---|---|---|
| N | 15 | Sum Weights | 15 |
| Mean | 26.9333333 | Sum Observations | 404 |
| Std Deviation | 11.1449327 | Variance | 124.209524 |
| Skewness | 0.14138813 | Kurtosis | -1.1470983 |
| Uncorrected SS | 12620 | Corrected SS | 1738.93333 |
| Coeff Variation | 41.3797004 | Std Error Mean | 2.87760924 |
| Basic Statistical Measures | |||
|---|---|---|---|
| Location | Variability | ||
| Mean | 26.93333 | Std Deviation | 11.14493 |
| Median | 25.00000 | Variance | 124.20952 |
| Mode | . | Range | 35.00000 |
| Interquartile Range | 20.00000 | ||
| Tests for Location: Mu0=0 | ||||
|---|---|---|---|---|
| Test | Statistic | p Value | ||
| Student's t | t | 9.359622 | Pr > |t| | <.0001 |
| Sign | M | 7.5 | Pr >= |M| | <.0001 |
| Signed Rank | S | 60 | Pr >= |S| | <.0001 |
| Quantiles (Definition 5) | |
|---|---|
| Level | Quantile |
| 100% Max | 45 |
| 99% | 45 |
| 95% | 45 |
| 90% | 42 |
| 75% Q3 | 38 |
| 50% Median | 25 |
| 25% Q1 | 18 |
| 10% | 12 |
| 5% | 10 |
| 1% | 10 |
| 0% Min | 10 |
| Extreme Observations | |||
|---|---|---|---|
| Lowest | Highest | ||
| Value | Obs | Value | Obs |
| 10 | 5 | 35 | 3 |
| 12 | 11 | 38 | 12 |
| 15 | 4 | 40 | 6 |
| 18 | 1 | 42 | 14 |
| 20 | 10 | 45 | 8 |
Why this code is used
· Distribution analysis
· Outlier detection
· Skewness
What it does
· Histogram stats
· Percentiles
· Extremes
Why required
· Risk detection
· Abnormal stations
· Modeling readiness
Interview angle
· Outlier handling
· Statistical profiling
9. PROC CORR
proc corr data=ev_util;
var Power_kW Daily_Users Avg_Wait_Time Reliability_Score;
run;
OUTPUT:
The CORR Procedure
| 4 Variables: | Power_kW Daily_Users Avg_Wait_Time Reliability_Score |
|---|
| Simple Statistics | ||||||
|---|---|---|---|---|---|---|
| Variable | N | Mean | Std Dev | Sum | Minimum | Maximum |
| Power_kW | 15 | 133.33333 | 59.06010 | 2000 | 60.00000 | 250.00000 |
| Daily_Users | 15 | 313.33333 | 104.31180 | 4700 | 180.00000 | 520.00000 |
| Avg_Wait_Time | 15 | 26.93333 | 11.14493 | 404.00000 | 10.00000 | 45.00000 |
| Reliability_Score | 15 | 85.80000 | 7.26243 | 1287 | 75.00000 | 97.00000 |
| Pearson Correlation Coefficients, N = 15 Prob > |r| under H0: Rho=0 | ||||
|---|---|---|---|---|
| Power_kW | Daily_Users | Avg_Wait_Time | Reliability_Score | |
| Power_kW | 1.00000 | 0.97431 <.0001 | -0.91553 <.0001 | 0.90843 <.0001 |
| Daily_Users | 0.97431 <.0001 | 1.00000 | -0.96504 <.0001 | 0.95797 <.0001 |
| Avg_Wait_Time | -0.91553 <.0001 | -0.96504 <.0001 | 1.00000 | -0.98857 <.0001 |
| Reliability_Score | 0.90843 <.0001 | 0.95797 <.0001 | -0.98857 <.0001 | 1.00000 |
Why this code is used
· Relationship analysis
· Dependency
· Trend insight
What it does
· Correlation matrix
· Strength measurement
Why required
· Optimization
· Predictive analytics
· Capacity planning
Interview angle
· Pearson correlation
· Multicollinearity
10. PROC SGPLOT
proc sgplot data=ev_util;
vbar City / response=Daily_Users;
run;
OUTPUT:
Why this code is used
· Visualization
· City performance
· Trend spotting
What it does
· Bar chart
· User comparison
Why required
· Management dashboard
· Insights
· Reporting
Interview angle
· PROC SGPLOT
· Visualization basics
11. FRAUD RISK MACRO
%macro fraud;
data ev_fraud;
set ev_util;
if Daily_Users > 500 and Avg_Wait_Time > 30 then Fraud_Flag="Yes";
else Fraud_Flag="No";
run;
proc print data=ev_fraud;
var Station_ID City Daily_Users Avg_Wait_Time Fraud_Flag;
run;
%mend;
%fraud;
OUTPUT:
| Obs | Station_ID | City | Daily_Users | Avg_Wait_Time | Fraud_Flag |
|---|---|---|---|---|---|
| 1 | EV001 | Hyderabad | 340 | 18 | No |
| 2 | EV002 | Bengaluru | 380 | 22 | No |
| 3 | EV003 | Chennai | 220 | 35 | No |
| 4 | EV004 | Delhi | 410 | 15 | No |
| 5 | EV005 | Mumbai | 520 | 10 | No |
| 6 | EV006 | Pune | 200 | 40 | No |
| 7 | EV007 | Kochi | 310 | 25 | No |
| 8 | EV008 | Trivandrum | 180 | 45 | No |
| 9 | EV009 | Jaipur | 290 | 30 | No |
| 10 | EV010 | Chandigarh | 350 | 20 | No |
| 11 | EV011 | Ahmedabad | 480 | 12 | No |
| 12 | EV012 | Indore | 210 | 38 | No |
| 13 | EV013 | Nagpur | 300 | 28 | No |
| 14 | EV014 | Vizag | 190 | 42 | No |
| 15 | EV015 | Coimbatore | 320 | 24 | No |
Why this code is used
· Fraud detection
· Rule engine
· Automation
What it does
· Flags suspicious stations
· Combines conditions
Why required
· Revenue protection
· Abuse prevention
· Auditing
Interview angle
· Rule-based modeling
12. PROC FREQ
proc freq data=ev_fraud;
tables Utilization Fraud_Flag;
run;
OUTPUT:
The FREQ Procedure
| Utilization | Frequency | Percent | Cumulative Frequency | Cumulative Percent |
|---|---|---|---|---|
| Optimal | 7 | 46.67 | 7 | 46.67 |
| Overloaded | 3 | 20.00 | 10 | 66.67 |
| Underused | 5 | 33.33 | 15 | 100.00 |
| Fraud_Flag | Frequency | Percent | Cumulative Frequency | Cumulative Percent |
|---|---|---|---|---|
| No | 15 | 100.00 | 15 | 100.00 |
Why this code is used
· Frequency analysis
· Pattern detection
What it does
· Counts categories
· Distribution
Why required
· Risk reporting
· Utilization mix
Interview angle
· Categorical analytics
13. PROC TRANSPOSE
proc sort data=ev_fraud;
by Station_ID;
run;
proc print data=ev_fraud;
run;
OUTPUT:
| Obs | Station_ID | City | Charging_Type | Install_Date | Power_kW | Avg_Wait_Time | Daily_Users | Reliability_Score | Review_Date | Operational_Days | Next_Service | City_Std | Charger_Type | Station_Key | Reliability_Filled | Energy_Load | Delay_Ratio | Utilization | Fraud_Flag |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | EV001 | Hyderabad | Fast | 01JAN2023 | 120 | 18 | 340 | 92 | 31DEC2024 | 730 | 01JUL2023 | Hyderabad | FAST | EV001-Hyderabad | 92 | 40800 | 0.15000 | Optimal | No |
| 2 | EV002 | Bengaluru | Fast | 15JAN2023 | 150 | 22 | 380 | 88 | 31DEC2024 | 716 | 01JUL2023 | Bengaluru | FAST | EV002-Bengaluru | 88 | 57000 | 0.14667 | Optimal | No |
| 3 | EV003 | Chennai | Normal | 10FEB2023 | 60 | 35 | 220 | 80 | 31DEC2024 | 690 | 01AUG2023 | Chennai | NORMAL | EV003-Chennai | 80 | 13200 | 0.58333 | Underused | No |
| 4 | EV004 | Delhi | Fast | 01MAR2023 | 180 | 15 | 410 | 95 | 31DEC2024 | 671 | 01SEP2023 | Delhi | FAST | EV004-Delhi | 95 | 73800 | 0.08333 | Overloaded | No |
| 5 | EV005 | Mumbai | Ultra | 15MAR2023 | 250 | 10 | 520 | 97 | 31DEC2024 | 657 | 01SEP2023 | Mumbai | ULTRA | EV005-Mumbai | 97 | 130000 | 0.04000 | Overloaded | No |
| 6 | EV006 | Pune | Normal | 10APR2023 | 80 | 40 | 200 | 78 | 31DEC2024 | 631 | 01OCT2023 | Pune | NORMAL | EV006-Pune | 78 | 16000 | 0.50000 | Underused | No |
| 7 | EV007 | Kochi | Fast | 01MAY2023 | 140 | 25 | 310 | 85 | 31DEC2024 | 610 | 01NOV2023 | Kochi | FAST | EV007-Kochi | 85 | 43400 | 0.17857 | Optimal | No |
| 8 | EV008 | Trivandrum | Normal | 20MAY2023 | 70 | 45 | 180 | 75 | 31DEC2024 | 591 | 01NOV2023 | Trivandrum | NORMAL | EV008-Trivandrum | 75 | 12600 | 0.64286 | Underused | No |
| 9 | EV009 | Jaipur | Fast | 10JUN2023 | 130 | 30 | 290 | 82 | 31DEC2024 | 570 | 01DEC2023 | Jaipur | FAST | EV009-Jaipur | 82 | 37700 | 0.23077 | Optimal | No |
| 10 | EV010 | Chandigarh | Fast | 01JUL2023 | 160 | 20 | 350 | 90 | 31DEC2024 | 549 | 01JAN2024 | Chandigarh | FAST | EV010-Chandigarh | 90 | 56000 | 0.12500 | Optimal | No |
| 11 | EV011 | Ahmedabad | Ultra | 15JUL2023 | 240 | 12 | 480 | 96 | 31DEC2024 | 535 | 01JAN2024 | Ahmedabad | ULTRA | EV011-Ahmedabad | 96 | 115200 | 0.05000 | Overloaded | No |
| 12 | EV012 | Indore | Normal | 01AUG2023 | 75 | 38 | 210 | 79 | 31DEC2024 | 518 | 01FEB2024 | Indore | NORMAL | EV012-Indore | 79 | 15750 | 0.50667 | Underused | No |
| 13 | EV013 | Nagpur | Fast | 15AUG2023 | 135 | 28 | 300 | 84 | 31DEC2024 | 504 | 01FEB2024 | Nagpur | FAST | EV013-Nagpur | 84 | 40500 | 0.20741 | Optimal | No |
| 14 | EV014 | Vizag | Normal | 01SEP2023 | 65 | 42 | 190 | 77 | 31DEC2024 | 487 | 01MAR2024 | Vizag | NORMAL | EV014-Vizag | 77 | 12350 | 0.64615 | Underused | No |
| 15 | EV015 | Coimbatore | Fast | 15SEP2023 | 145 | 24 | 320 | 89 | 31DEC2024 | 473 | 01MAR2024 | Coimbatore | FAST | EV015-Coimbatore | 89 | 46400 | 0.16552 | Optimal | No |
proc transpose data=ev_fraud out=ev_wide;
by Utilization NotSorted;
id Utilization;
var Daily_Users;
run;
proc print data=ev_wide;
run;
OUTPUT:
| Obs | Station_ID | _NAME_ | Optimal | Underused | Overloaded |
|---|---|---|---|---|---|
| 1 | EV001 | Daily_Users | 340 | . | . |
| 2 | EV002 | Daily_Users | 380 | . | . |
| 3 | EV003 | Daily_Users | . | 220 | . |
| 4 | EV004 | Daily_Users | . | . | 410 |
| 5 | EV005 | Daily_Users | . | . | 520 |
| 6 | EV006 | Daily_Users | . | 200 | . |
| 7 | EV007 | Daily_Users | 310 | . | . |
| 8 | EV008 | Daily_Users | . | 180 | . |
| 9 | EV009 | Daily_Users | 290 | . | . |
| 10 | EV010 | Daily_Users | 350 | . | . |
| 11 | EV011 | Daily_Users | . | . | 480 |
| 12 | EV012 | Daily_Users | . | 210 | . |
| 13 | EV013 | Daily_Users | 300 | . | . |
| 14 | EV014 | Daily_Users | . | 190 | . |
| 15 | EV015 | Daily_Users | 320 | . | . |
Why this code is used
· Restructuring
· Reporting format
What it does
· Converts long to wide
Why required
· Dashboarding
· Excel exports
Interview angle
· Transpose logic
14. PROC APPEND
proc append base=ev_util
data=ev_fraud force;
run;
proc print data=ev_util;
run;
OUTPUT:
| Obs | Station_ID | City | Charging_Type | Install_Date | Power_kW | Avg_Wait_Time | Daily_Users | Reliability_Score | Review_Date | Operational_Days | Next_Service | City_Std | Charger_Type | Station_Key | Reliability_Filled | Energy_Load | Delay_Ratio | Utilization |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | EV001 | Hyderabad | Fast | 01JAN2023 | 120 | 18 | 340 | 92 | 31DEC2024 | 730 | 01JUL2023 | Hyderabad | FAST | EV001-Hyderabad | 92 | 40800 | 0.15000 | Optimal |
| 2 | EV002 | Bengaluru | Fast | 15JAN2023 | 150 | 22 | 380 | 88 | 31DEC2024 | 716 | 01JUL2023 | Bengaluru | FAST | EV002-Bengaluru | 88 | 57000 | 0.14667 | Optimal |
| 3 | EV003 | Chennai | Normal | 10FEB2023 | 60 | 35 | 220 | 80 | 31DEC2024 | 690 | 01AUG2023 | Chennai | NORMAL | EV003-Chennai | 80 | 13200 | 0.58333 | Underused |
| 4 | EV004 | Delhi | Fast | 01MAR2023 | 180 | 15 | 410 | 95 | 31DEC2024 | 671 | 01SEP2023 | Delhi | FAST | EV004-Delhi | 95 | 73800 | 0.08333 | Overloaded |
| 5 | EV005 | Mumbai | Ultra | 15MAR2023 | 250 | 10 | 520 | 97 | 31DEC2024 | 657 | 01SEP2023 | Mumbai | ULTRA | EV005-Mumbai | 97 | 130000 | 0.04000 | Overloaded |
| 6 | EV006 | Pune | Normal | 10APR2023 | 80 | 40 | 200 | 78 | 31DEC2024 | 631 | 01OCT2023 | Pune | NORMAL | EV006-Pune | 78 | 16000 | 0.50000 | Underused |
| 7 | EV007 | Kochi | Fast | 01MAY2023 | 140 | 25 | 310 | 85 | 31DEC2024 | 610 | 01NOV2023 | Kochi | FAST | EV007-Kochi | 85 | 43400 | 0.17857 | Optimal |
| 8 | EV008 | Trivandrum | Normal | 20MAY2023 | 70 | 45 | 180 | 75 | 31DEC2024 | 591 | 01NOV2023 | Trivandrum | NORMAL | EV008-Trivandrum | 75 | 12600 | 0.64286 | Underused |
| 9 | EV009 | Jaipur | Fast | 10JUN2023 | 130 | 30 | 290 | 82 | 31DEC2024 | 570 | 01DEC2023 | Jaipur | FAST | EV009-Jaipur | 82 | 37700 | 0.23077 | Optimal |
| 10 | EV010 | Chandigarh | Fast | 01JUL2023 | 160 | 20 | 350 | 90 | 31DEC2024 | 549 | 01JAN2024 | Chandigarh | FAST | EV010-Chandigarh | 90 | 56000 | 0.12500 | Optimal |
| 11 | EV011 | Ahmedabad | Ultra | 15JUL2023 | 240 | 12 | 480 | 96 | 31DEC2024 | 535 | 01JAN2024 | Ahmedabad | ULTRA | EV011-Ahmedabad | 96 | 115200 | 0.05000 | Overloaded |
| 12 | EV012 | Indore | Normal | 01AUG2023 | 75 | 38 | 210 | 79 | 31DEC2024 | 518 | 01FEB2024 | Indore | NORMAL | EV012-Indore | 79 | 15750 | 0.50667 | Underused |
| 13 | EV013 | Nagpur | Fast | 15AUG2023 | 135 | 28 | 300 | 84 | 31DEC2024 | 504 | 01FEB2024 | Nagpur | FAST | EV013-Nagpur | 84 | 40500 | 0.20741 | Optimal |
| 14 | EV014 | Vizag | Normal | 01SEP2023 | 65 | 42 | 190 | 77 | 31DEC2024 | 487 | 01MAR2024 | Vizag | NORMAL | EV014-Vizag | 77 | 12350 | 0.64615 | Underused |
| 15 | EV015 | Coimbatore | Fast | 15SEP2023 | 145 | 24 | 320 | 89 | 31DEC2024 | 473 | 01MAR2024 | Coimbatore | FAST | EV015-Coimbatore | 89 | 46400 | 0.16552 | Optimal |
| 16 | EV001 | Hyderabad | Fast | 01JAN2023 | 120 | 18 | 340 | 92 | 31DEC2024 | 730 | 01JUL2023 | Hyderabad | FAST | EV001-Hyderabad | 92 | 40800 | 0.15000 | Optimal |
| 17 | EV002 | Bengaluru | Fast | 15JAN2023 | 150 | 22 | 380 | 88 | 31DEC2024 | 716 | 01JUL2023 | Bengaluru | FAST | EV002-Bengaluru | 88 | 57000 | 0.14667 | Optimal |
| 18 | EV003 | Chennai | Normal | 10FEB2023 | 60 | 35 | 220 | 80 | 31DEC2024 | 690 | 01AUG2023 | Chennai | NORMAL | EV003-Chennai | 80 | 13200 | 0.58333 | Underused |
| 19 | EV004 | Delhi | Fast | 01MAR2023 | 180 | 15 | 410 | 95 | 31DEC2024 | 671 | 01SEP2023 | Delhi | FAST | EV004-Delhi | 95 | 73800 | 0.08333 | Overloaded |
| 20 | EV005 | Mumbai | Ultra | 15MAR2023 | 250 | 10 | 520 | 97 | 31DEC2024 | 657 | 01SEP2023 | Mumbai | ULTRA | EV005-Mumbai | 97 | 130000 | 0.04000 | Overloaded |
| 21 | EV006 | Pune | Normal | 10APR2023 | 80 | 40 | 200 | 78 | 31DEC2024 | 631 | 01OCT2023 | Pune | NORMAL | EV006-Pune | 78 | 16000 | 0.50000 | Underused |
| 22 | EV007 | Kochi | Fast | 01MAY2023 | 140 | 25 | 310 | 85 | 31DEC2024 | 610 | 01NOV2023 | Kochi | FAST | EV007-Kochi | 85 | 43400 | 0.17857 | Optimal |
| 23 | EV008 | Trivandrum | Normal | 20MAY2023 | 70 | 45 | 180 | 75 | 31DEC2024 | 591 | 01NOV2023 | Trivandrum | NORMAL | EV008-Trivandrum | 75 | 12600 | 0.64286 | Underused |
| 24 | EV009 | Jaipur | Fast | 10JUN2023 | 130 | 30 | 290 | 82 | 31DEC2024 | 570 | 01DEC2023 | Jaipur | FAST | EV009-Jaipur | 82 | 37700 | 0.23077 | Optimal |
| 25 | EV010 | Chandigarh | Fast | 01JUL2023 | 160 | 20 | 350 | 90 | 31DEC2024 | 549 | 01JAN2024 | Chandigarh | FAST | EV010-Chandigarh | 90 | 56000 | 0.12500 | Optimal |
| 26 | EV011 | Ahmedabad | Ultra | 15JUL2023 | 240 | 12 | 480 | 96 | 31DEC2024 | 535 | 01JAN2024 | Ahmedabad | ULTRA | EV011-Ahmedabad | 96 | 115200 | 0.05000 | Overloaded |
| 27 | EV012 | Indore | Normal | 01AUG2023 | 75 | 38 | 210 | 79 | 31DEC2024 | 518 | 01FEB2024 | Indore | NORMAL | EV012-Indore | 79 | 15750 | 0.50667 | Underused |
| 28 | EV013 | Nagpur | Fast | 15AUG2023 | 135 | 28 | 300 | 84 | 31DEC2024 | 504 | 01FEB2024 | Nagpur | FAST | EV013-Nagpur | 84 | 40500 | 0.20741 | Optimal |
| 29 | EV014 | Vizag | Normal | 01SEP2023 | 65 | 42 | 190 | 77 | 31DEC2024 | 487 | 01MAR2024 | Vizag | NORMAL | EV014-Vizag | 77 | 12350 | 0.64615 | Underused |
| 30 | EV015 | Coimbatore | Fast | 15SEP2023 | 145 | 24 | 320 | 89 | 31DEC2024 | 473 | 01MAR2024 | Coimbatore | FAST | EV015-Coimbatore | 89 | 46400 | 0.16552 | Optimal |
Why this code is used
· Dataset stacking
· History tracking
What it does
· Adds fraud rows
Why required
· Audit trail
· Reporting
Interview angle
· APPEND vs SET
15. PROC DATASETS DELETE
proc datasets library=work;
delete ev_stations_raw;
run;
LOG:
Why this code is used
· Cleanup
· Space management
What it does
· Deletes raw table
Why required
· Production hygiene
· Performance
Interview angle
· Library management
INTERVIEW QUESTIONS FOR YOU
1.What is a SAS library and why is it used?
2.What are temporary and permanent SAS datasets?
3.What is a SAS informat?
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 EV Charging Stations data.
Our Mission:
This blog provides industry-focused SAS programming tutorials and analytics projects covering finance, healthcare, and technology.
This project is suitable for:
· Students learning SAS
· Data analysts building portfolios
· Professionals preparing for SAS interviews
· Bloggers writing about analytics and smart cities
· EV and energy industry professionals
Comments
Post a Comment