381.Can SAS Uncover Call Drops, Network Congestion, and Fraud from Telecom Call Records?
Can SAS Uncover Call Drops, Network Congestion, and Fraud from Telecom Call Records?
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 | PROC DATASETS DELETE
1. Introduction – Why Telecom Call Data
Analytics Matters
Every second, millions of phone calls, video
calls, roaming sessions, and data connections are created across telecom
networks worldwide. Each of these interactions generates a Call Detail Record (CDR) containing critical
information such as caller identity, call duration, network load, drop rate,
and billing amount.
Telecom companies like Airtel, Jio, Vodafone,
AT&T, and Verizon rely heavily on these records to monitor:
·
Network congestion and capacity
·
Call quality and drop rates
·
Revenue generation and leakage
·
Fraudulent calling behavior
·
Regional performance and infrastructure health
With growing 5G adoption and increasing
digital traffic, analyzing call records has become a mission-critical business function. Even a small
percentage of undetected call drops or fraud can lead to massive financial
losses and customer dissatisfaction.
This project simulates a real-world telecom analytics environment using SAS, where call records are processed, cleaned, analyzed, and converted into business-ready insights.
2. What This Telecom Analytics Project
Simulates
This SAS project replicates the complete data
pipeline used inside telecom companies. It is designed to behave like a real
operational system where:
·
Millions of daily calls are recorded
·
Network congestion is monitored
·
Revenue is calculated per region
·
Fraud is detected using business rules
·
Performance is summarized for management
The dataset includes realistic telecom
variables such as:
·
Caller ID
– Identifies each subscriber
·
Region
– Geographic location of the call
·
Call
Duration – Network usage in minutes
·
Call Type
– Voice, Data, Roaming, or International
·
Network
Load – Network congestion level
·
Drop Rate
– Quality of service indicator
·
Revenue
– Money earned from the call
·
Call Date
& Billing Month – Time-based analysis
Using these variables, the project
demonstrates how telecom operators make data-driven decisions to optimize
performance and protect revenue.
3. How This Project Reflects Real Industry Use
Cases
The logic implemented in this project closely
resembles what is used in:
·
Telecom billing systems
·
Fraud monitoring platforms
·
Network operations centers
·
Regulatory reporting systems
·
Customer experience analytics
4. Why SAS Is Used for Telecom Analytics
SAS is widely used in the telecom industry
because it provides:
·
High-performance data processing
·
Powerful SQL-based analytics
·
Advanced statistical procedures
·
Strong reporting and visualization
·
Reliable automation through macros
Telecom companies trust SAS for handling billions of call records with accuracy,
speed, and auditability. This project demonstrates how SAS can be used to build
a complete telecom analytics solution
from raw data to executive-ready insights.
5. Who Should Study This Project
This tutorial is ideal for:
·
SAS learners and programmers
·
Data analysts and data scientists
·
Telecom analytics professionals
·
Interview preparation candidates
·
Blog readers learning real-world analytics
6. BUSINESS CONTEXT
Telecom
operators manage millions of calls per day.
Each call generates a Call Detail Record (CDR) with:
|
Field |
Purpose |
|
Caller
ID |
Who
made the call |
|
Region |
Where
call originated |
|
Call
Duration |
Network
usage |
|
Call
Type |
Voice /
Data / Roaming / International |
|
Network
Load |
Congestion |
|
Drop
Rate |
Call
failures |
|
Revenue |
Billing
impact |
|
Call
Date |
Time
intelligence |
Telecom
companies must:
• Control
network congestion
• Detect revenue leakage & fraud
• Improve customer experience
• Optimize tower & spectrum usage
7. SAS PROGRAM
STEP-1 — Create Telecom Call Dataset
data telecom_raw;
length Caller_ID $6 Region $10 Call_Type $15;
format Call_Date date9.;
input Caller_ID $ Region $ Call_Date : date9. Call_Duration Network_Load Drop_Rate
Revenue Call_Type;
datalines;
C001 South 01JAN2025 15 78 2.5 120 Voice
C002 North 02JAN2025 22 82 3.1 210 Data
C003 East 03JAN2025 5 45 0.9 50 Voice
C004 West 04JAN2025 35 95 6.5 350 International
C005 South 05JAN2025 18 70 1.8 160 Voice
C006 North 06JAN2025 60 98 8.2 600 Roaming
C007 East 07JAN2025 12 55 1.2 100 Data
C008 West 08JAN2025 42 90 5.4 420 International
C009 South 09JAN2025 8 40 0.7 60 Voice
C010 North 10JAN2025 55 92 7.8 560 Roaming
C011 East 11JAN2025 25 75 3.5 230 Data
C012 West 12JAN2025 48 88 4.9 480 International
C013 South 13JAN2025 10 50 1.0 80 Voice
C014 North 14JAN2025 65 97 8.9 650 Roaming
C015 East 15JAN2025 20 72 2.2 190 Data
C016 West 16JAN2025 38 85 4.5 390 International
;
run;
proc print data=telecom_raw;
run;
OUTPUT:
| Obs | Caller_ID | Region | Call_Type | Call_Date | Call_Duration | Network_Load | Drop_Rate | Revenue |
|---|---|---|---|---|---|---|---|---|
| 1 | C001 | South | Voice | 01JAN2025 | 15 | 78 | 2.5 | 120 |
| 2 | C002 | North | Data | 02JAN2025 | 22 | 82 | 3.1 | 210 |
| 3 | C003 | East | Voice | 03JAN2025 | 5 | 45 | 0.9 | 50 |
| 4 | C004 | West | International | 04JAN2025 | 35 | 95 | 6.5 | 350 |
| 5 | C005 | South | Voice | 05JAN2025 | 18 | 70 | 1.8 | 160 |
| 6 | C006 | North | Roaming | 06JAN2025 | 60 | 98 | 8.2 | 600 |
| 7 | C007 | East | Data | 07JAN2025 | 12 | 55 | 1.2 | 100 |
| 8 | C008 | West | International | 08JAN2025 | 42 | 90 | 5.4 | 420 |
| 9 | C009 | South | Voice | 09JAN2025 | 8 | 40 | 0.7 | 60 |
| 10 | C010 | North | Roaming | 10JAN2025 | 55 | 92 | 7.8 | 560 |
| 11 | C011 | East | Data | 11JAN2025 | 25 | 75 | 3.5 | 230 |
| 12 | C012 | West | International | 12JAN2025 | 48 | 88 | 4.9 | 480 |
| 13 | C013 | South | Voice | 13JAN2025 | 10 | 50 | 1.0 | 80 |
| 14 | C014 | North | Roaming | 14JAN2025 | 65 | 97 | 8.9 | 650 |
| 15 | C015 | East | Data | 15JAN2025 | 20 | 72 | 2.2 | 190 |
| 16 | C016 | West | International | 16JAN2025 | 38 | 85 | 4.5 | 390 |
• Simulates telecom call records
• Each row = one call
• Date handled via DATE9
• Call type classification
• Revenue tracking
STEP-2 — Clean & Standardize Text
data telecom_clean;
set telecom_raw;
Caller_ID = strip(upcase(Caller_ID));
Region = propcase(trim(Region));
Call_Type = propcase(Call_Type);
run;
proc print data=telecom_clean;
run;
OUTPUT:
| Obs | Caller_ID | Region | Call_Type | Call_Date | Call_Duration | Network_Load | Drop_Rate | Revenue |
|---|---|---|---|---|---|---|---|---|
| 1 | C001 | South | Voice | 01JAN2025 | 15 | 78 | 2.5 | 120 |
| 2 | C002 | North | Data | 02JAN2025 | 22 | 82 | 3.1 | 210 |
| 3 | C003 | East | Voice | 03JAN2025 | 5 | 45 | 0.9 | 50 |
| 4 | C004 | West | International | 04JAN2025 | 35 | 95 | 6.5 | 350 |
| 5 | C005 | South | Voice | 05JAN2025 | 18 | 70 | 1.8 | 160 |
| 6 | C006 | North | Roaming | 06JAN2025 | 60 | 98 | 8.2 | 600 |
| 7 | C007 | East | Data | 07JAN2025 | 12 | 55 | 1.2 | 100 |
| 8 | C008 | West | International | 08JAN2025 | 42 | 90 | 5.4 | 420 |
| 9 | C009 | South | Voice | 09JAN2025 | 8 | 40 | 0.7 | 60 |
| 10 | C010 | North | Roaming | 10JAN2025 | 55 | 92 | 7.8 | 560 |
| 11 | C011 | East | Data | 11JAN2025 | 25 | 75 | 3.5 | 230 |
| 12 | C012 | West | International | 12JAN2025 | 48 | 88 | 4.9 | 480 |
| 13 | C013 | South | Voice | 13JAN2025 | 10 | 50 | 1.0 | 80 |
| 14 | C014 | North | Roaming | 14JAN2025 | 65 | 97 | 8.9 | 650 |
| 15 | C015 | East | Data | 15JAN2025 | 20 | 72 | 2.2 | 190 |
| 16 | C016 | West | International | 16JAN2025 | 38 | 85 | 4.5 | 390 |
• Removes spaces
• Standardizes case
• Improves joins
• Avoids duplicates
• Production readiness
STEP-3 — Add Billing Month Using INTNX
data telecom_dates;
set telecom_clean;
Bill_Month = intnx('month', Call_Date, 0, 'b');
format Bill_Month monyy7.;
run;
proc print data=telecom_dates;
run;
OUTPUT:
| Obs | Caller_ID | Region | Call_Type | Call_Date | Call_Duration | Network_Load | Drop_Rate | Revenue | Bill_Month |
|---|---|---|---|---|---|---|---|---|---|
| 1 | C001 | South | Voice | 01JAN2025 | 15 | 78 | 2.5 | 120 | JAN2025 |
| 2 | C002 | North | Data | 02JAN2025 | 22 | 82 | 3.1 | 210 | JAN2025 |
| 3 | C003 | East | Voice | 03JAN2025 | 5 | 45 | 0.9 | 50 | JAN2025 |
| 4 | C004 | West | International | 04JAN2025 | 35 | 95 | 6.5 | 350 | JAN2025 |
| 5 | C005 | South | Voice | 05JAN2025 | 18 | 70 | 1.8 | 160 | JAN2025 |
| 6 | C006 | North | Roaming | 06JAN2025 | 60 | 98 | 8.2 | 600 | JAN2025 |
| 7 | C007 | East | Data | 07JAN2025 | 12 | 55 | 1.2 | 100 | JAN2025 |
| 8 | C008 | West | International | 08JAN2025 | 42 | 90 | 5.4 | 420 | JAN2025 |
| 9 | C009 | South | Voice | 09JAN2025 | 8 | 40 | 0.7 | 60 | JAN2025 |
| 10 | C010 | North | Roaming | 10JAN2025 | 55 | 92 | 7.8 | 560 | JAN2025 |
| 11 | C011 | East | Data | 11JAN2025 | 25 | 75 | 3.5 | 230 | JAN2025 |
| 12 | C012 | West | International | 12JAN2025 | 48 | 88 | 4.9 | 480 | JAN2025 |
| 13 | C013 | South | Voice | 13JAN2025 | 10 | 50 | 1.0 | 80 | JAN2025 |
| 14 | C014 | North | Roaming | 14JAN2025 | 65 | 97 | 8.9 | 650 | JAN2025 |
| 15 | C015 | East | Data | 15JAN2025 | 20 | 72 | 2.2 | 190 | JAN2025 |
| 16 | C016 | West | International | 16JAN2025 | 38 | 85 | 4.5 | 390 | JAN2025 |
• Groups by month
• Enables trends
• Supports billing
• Works with PROC SQL
• Date normalization
STEP-4 — Network Utilization Macro
%macro utilization(input=, output=);
data &output;
set &input;
length Utilization $10;
if Network_Load < 60 then Utilization="Low";
else if Network_Load < 85 then Utilization="Medium";
else Utilization="High";
run;
proc print data=&output;
run;
%mend;
%utilization(input=telecom_dates, output=telecom_util);
OUTPUT:
| Obs | Caller_ID | Region | Call_Type | Call_Date | Call_Duration | Network_Load | Drop_Rate | Revenue | Bill_Month | Utilization |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | C001 | South | Voice | 01JAN2025 | 15 | 78 | 2.5 | 120 | JAN2025 | Medium |
| 2 | C002 | North | Data | 02JAN2025 | 22 | 82 | 3.1 | 210 | JAN2025 | Medium |
| 3 | C003 | East | Voice | 03JAN2025 | 5 | 45 | 0.9 | 50 | JAN2025 | Low |
| 4 | C004 | West | International | 04JAN2025 | 35 | 95 | 6.5 | 350 | JAN2025 | High |
| 5 | C005 | South | Voice | 05JAN2025 | 18 | 70 | 1.8 | 160 | JAN2025 | Medium |
| 6 | C006 | North | Roaming | 06JAN2025 | 60 | 98 | 8.2 | 600 | JAN2025 | High |
| 7 | C007 | East | Data | 07JAN2025 | 12 | 55 | 1.2 | 100 | JAN2025 | Low |
| 8 | C008 | West | International | 08JAN2025 | 42 | 90 | 5.4 | 420 | JAN2025 | High |
| 9 | C009 | South | Voice | 09JAN2025 | 8 | 40 | 0.7 | 60 | JAN2025 | Low |
| 10 | C010 | North | Roaming | 10JAN2025 | 55 | 92 | 7.8 | 560 | JAN2025 | High |
| 11 | C011 | East | Data | 11JAN2025 | 25 | 75 | 3.5 | 230 | JAN2025 | Medium |
| 12 | C012 | West | International | 12JAN2025 | 48 | 88 | 4.9 | 480 | JAN2025 | High |
| 13 | C013 | South | Voice | 13JAN2025 | 10 | 50 | 1.0 | 80 | JAN2025 | Low |
| 14 | C014 | North | Roaming | 14JAN2025 | 65 | 97 | 8.9 | 650 | JAN2025 | High |
| 15 | C015 | East | Data | 15JAN2025 | 20 | 72 | 2.2 | 190 | JAN2025 | Medium |
| 16 | C016 | West | International | 16JAN2025 | 38 | 85 | 4.5 | 390 | JAN2025 | High |
• Categorizes traffic
• Reusable logic
• Business rules
• Automation
• Network optimization
STEP-5 — Fraud Risk Macro
%macro fraud(input=, output=);
data &output;
set &input;
length Fraud_Flag $5;
if Call_Duration > 50 and Revenue > 500 then Fraud_Flag="YES";
else Fraud_Flag="NO";
run;
proc print data=&output;
run;
%mend;
%fraud(input=telecom_util, output=telecom_fraud);
OUTPUT:
| Obs | Caller_ID | Region | Call_Type | Call_Date | Call_Duration | Network_Load | Drop_Rate | Revenue | Bill_Month | Utilization | Fraud_Flag |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | C001 | South | Voice | 01JAN2025 | 15 | 78 | 2.5 | 120 | JAN2025 | Medium | NO |
| 2 | C002 | North | Data | 02JAN2025 | 22 | 82 | 3.1 | 210 | JAN2025 | Medium | NO |
| 3 | C003 | East | Voice | 03JAN2025 | 5 | 45 | 0.9 | 50 | JAN2025 | Low | NO |
| 4 | C004 | West | International | 04JAN2025 | 35 | 95 | 6.5 | 350 | JAN2025 | High | NO |
| 5 | C005 | South | Voice | 05JAN2025 | 18 | 70 | 1.8 | 160 | JAN2025 | Medium | NO |
| 6 | C006 | North | Roaming | 06JAN2025 | 60 | 98 | 8.2 | 600 | JAN2025 | High | YES |
| 7 | C007 | East | Data | 07JAN2025 | 12 | 55 | 1.2 | 100 | JAN2025 | Low | NO |
| 8 | C008 | West | International | 08JAN2025 | 42 | 90 | 5.4 | 420 | JAN2025 | High | NO |
| 9 | C009 | South | Voice | 09JAN2025 | 8 | 40 | 0.7 | 60 | JAN2025 | Low | NO |
| 10 | C010 | North | Roaming | 10JAN2025 | 55 | 92 | 7.8 | 560 | JAN2025 | High | YES |
| 11 | C011 | East | Data | 11JAN2025 | 25 | 75 | 3.5 | 230 | JAN2025 | Medium | NO |
| 12 | C012 | West | International | 12JAN2025 | 48 | 88 | 4.9 | 480 | JAN2025 | High | NO |
| 13 | C013 | South | Voice | 13JAN2025 | 10 | 50 | 1.0 | 80 | JAN2025 | Low | NO |
| 14 | C014 | North | Roaming | 14JAN2025 | 65 | 97 | 8.9 | 650 | JAN2025 | High | YES |
| 15 | C015 | East | Data | 15JAN2025 | 20 | 72 | 2.2 | 190 | JAN2025 | Medium | NO |
| 16 | C016 | West | International | 16JAN2025 | 38 | 85 | 4.5 | 390 | JAN2025 | High | NO |
• Finds abnormal calls
• Uses duration + revenue
• Flags risky records
• Telecom risk model
• Audit support
STEP-6 — PROC SQL Revenue Summary
proc sql;
create table revenue_summary as
select Region,
sum(Revenue) as Total_Revenue,
avg(Drop_Rate) as Avg_Drop
from telecom_fraud
group by Region;
quit;
proc print data=revenue_summary;
run;
OUTPUT:
| Obs | Region | Total_Revenue | Avg_Drop |
|---|---|---|---|
| 1 | East | 570 | 1.950 |
| 2 | North | 2020 | 7.000 |
| 3 | South | 420 | 1.500 |
| 4 | West | 1640 | 5.325 |
• Summarizes data
• Region comparison
• Business reporting
• KPI generation
• SQL analytics
STEP-7 — PROC FREQ
proc freq data=telecom_fraud;
tables Fraud_Flag*Call_Type;
run;
OUTPUT:
The FREQ Procedure
|
| ||||||||||||||||||||||||||||||||||||
• Cross analysis
• Fraud by type
• Monitoring tool
• Decision support
• Risk insight
STEP-8 — PROC MEANS
proc means data=telecom_fraud mean max min;
var Call_Duration Network_Load Revenue Drop_Rate;
run;
OUTPUT:
The MEANS Procedure
| Variable | Mean | Maximum | Minimum |
|---|---|---|---|
Call_Duration Network_Load Revenue Drop_Rate | 29.8750000 75.7500000 290.6250000 3.9437500 | 65.0000000 98.0000000 650.0000000 8.9000000 | 5.0000000 40.0000000 50.0000000 0.7000000 |
• Central tendency
• Extremes
• Network quality
• Revenue spread
• Operations control
STEP-9 — PROC UNIVARIATE
proc univariate data=telecom_fraud;
var Revenue Call_Duration;
run;
OUTPUT:
The UNIVARIATE Procedure
Variable: Revenue
| Moments | |||
|---|---|---|---|
| N | 16 | Sum Weights | 16 |
| Mean | 290.625 | Sum Observations | 4650 |
| Std Deviation | 203.583521 | Variance | 41446.25 |
| Skewness | 0.49019766 | Kurtosis | -1.1828857 |
| Uncorrected SS | 1973100 | Corrected SS | 621693.75 |
| Coeff Variation | 70.0502438 | Std Error Mean | 50.8958802 |
| Basic Statistical Measures | |||
|---|---|---|---|
| Location | Variability | ||
| Mean | 290.6250 | Std Deviation | 203.58352 |
| Median | 220.0000 | Variance | 41446 |
| Mode | . | Range | 600.00000 |
| Interquartile Range | 340.00000 | ||
| Tests for Location: Mu0=0 | ||||
|---|---|---|---|---|
| Test | Statistic | p Value | ||
| Student's t | t | 5.710187 | Pr > |t| | <.0001 |
| Sign | M | 8 | Pr >= |M| | <.0001 |
| Signed Rank | S | 68 | Pr >= |S| | <.0001 |
| Quantiles (Definition 5) | |
|---|---|
| Level | Quantile |
| 100% Max | 650 |
| 99% | 650 |
| 95% | 650 |
| 90% | 600 |
| 75% Q3 | 450 |
| 50% Median | 220 |
| 25% Q1 | 110 |
| 10% | 60 |
| 5% | 50 |
| 1% | 50 |
| 0% Min | 50 |
| Extreme Observations | |||
|---|---|---|---|
| Lowest | Highest | ||
| Value | Obs | Value | Obs |
| 50 | 3 | 420 | 8 |
| 60 | 9 | 480 | 12 |
| 80 | 13 | 560 | 10 |
| 100 | 7 | 600 | 6 |
| 120 | 1 | 650 | 14 |
The UNIVARIATE Procedure
Variable: Call_Duration
| Moments | |||
|---|---|---|---|
| N | 16 | Sum Weights | 16 |
| Mean | 29.875 | Sum Observations | 478 |
| Std Deviation | 19.4897409 | Variance | 379.85 |
| Skewness | 0.5041715 | Kurtosis | -1.0629722 |
| Uncorrected SS | 19978 | Corrected SS | 5697.75 |
| Coeff Variation | 65.2376264 | Std Error Mean | 4.87243522 |
| Basic Statistical Measures | |||
|---|---|---|---|
| Location | Variability | ||
| Mean | 29.87500 | Std Deviation | 19.48974 |
| Median | 23.50000 | Variance | 379.85000 |
| Mode | . | Range | 60.00000 |
| Interquartile Range | 31.50000 | ||
| Tests for Location: Mu0=0 | ||||
|---|---|---|---|---|
| Test | Statistic | p Value | ||
| Student's t | t | 6.131431 | Pr > |t| | <.0001 |
| Sign | M | 8 | Pr >= |M| | <.0001 |
| Signed Rank | S | 68 | Pr >= |S| | <.0001 |
| Quantiles (Definition 5) | |
|---|---|
| Level | Quantile |
| 100% Max | 65.0 |
| 99% | 65.0 |
| 95% | 65.0 |
| 90% | 60.0 |
| 75% Q3 | 45.0 |
| 50% Median | 23.5 |
| 25% Q1 | 13.5 |
| 10% | 8.0 |
| 5% | 5.0 |
| 1% | 5.0 |
| 0% Min | 5.0 |
| Extreme Observations | |||
|---|---|---|---|
| Lowest | Highest | ||
| Value | Obs | Value | Obs |
| 5 | 3 | 42 | 8 |
| 8 | 9 | 48 | 12 |
| 10 | 13 | 55 | 10 |
| 12 | 7 | 60 | 6 |
| 15 | 1 | 65 | 14 |
• Identifies anomalies
• Detects skewness
• Risk analysis
• Revenue leakage
• Performance monitoring
STEP-10 — PROC CORR
proc corr data=telecom_fraud;
var Call_Duration Network_Load Revenue Drop_Rate;
run;
OUTPUT:
The CORR Procedure
| 4 Variables: | Call_Duration Network_Load Revenue Drop_Rate |
|---|
| Simple Statistics | ||||||
|---|---|---|---|---|---|---|
| Variable | N | Mean | Std Dev | Sum | Minimum | Maximum |
| Call_Duration | 16 | 29.87500 | 19.48974 | 478.00000 | 5.00000 | 65.00000 |
| Network_Load | 16 | 75.75000 | 19.02455 | 1212 | 40.00000 | 98.00000 |
| Revenue | 16 | 290.62500 | 203.58352 | 4650 | 50.00000 | 650.00000 |
| Drop_Rate | 16 | 3.94375 | 2.75729 | 63.10000 | 0.70000 | 8.90000 |
| Pearson Correlation Coefficients, N = 16 Prob > |r| under H0: Rho=0 | ||||
|---|---|---|---|---|
| Call_Duration | Network_Load | Revenue | Drop_Rate | |
| Call_Duration | 1.00000 | 0.87194 <.0001 | 0.99907 <.0001 | 0.96639 <.0001 |
| Network_Load | 0.87194 <.0001 | 1.00000 | 0.86809 <.0001 | 0.89278 <.0001 |
| Revenue | 0.99907 <.0001 | 0.86809 <.0001 | 1.00000 | 0.96597 <.0001 |
| Drop_Rate | 0.96639 <.0001 | 0.89278 <.0001 | 0.96597 <.0001 | 1.00000 |
• Dependency check
• Congestion impact
• Drop analysis
• Financial link
• Engineering decisions
STEP-11 — PROC SGPLOT
proc sgplot data=telecom_fraud;
scatter x=Network_Load y=Drop_Rate;
run;
OUTPUT:
• Congestion vs drops
• Easy interpretation
• Executive dashboards
• Operations insight
• Quality tracking
STEP-12 — PROC TRANSPOSE
proc transpose data=revenue_summary out=rev_wide;
by Region;
id Region;
var Total_Revenue;
run;
proc print data=rev_wide;
run;
OUTPUT:
| Obs | Region | _NAME_ | East | North | South | West |
|---|---|---|---|---|---|---|
| 1 | East | Total_Revenue | 570 | . | . | . |
| 2 | North | Total_Revenue | . | 2020 | . | . |
| 3 | South | Total_Revenue | . | . | 420 | . |
| 4 | West | Total_Revenue | . | . | . | 1640 |
• Converts rows to columns
• BI tools ready
• Excel export
• Reporting layout
• Management view
STEP-13 — PROC DATASETS DELETE
proc datasets lib=work nolist;
delete telecom_raw telecom_clean telecom_dates;
quit;
OUTPUT:
NOTE: Deleting WORK.TELECOM_RAW (memtype=DATA).
• Removes temp tables
• Optimizes workspace
• Professional coding
• Faster SAS
• Production hygiene
FINAL CONCLUSION
This Telecom Analytics project replicates real telecom operations systems where
companies:
• Monitor call traffic
• Optimize network capacity
• Detect fraud
• Protect revenue
• Improve customer experience
INTERVIEW QUESTIONS FOR YOU
3.What is the use of the KEEP and DROP statements?
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 Telecom 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