230.STATEWISE POPULATION ANALYSIS OF INDIA USING PROC FORMAT | PROC FREQ | PROC MEANS | PROC UNIVARIATE | PROC PRINT | PROC SGPLOT IN SAS
- Get link
- X
- Other Apps
STATEWISE POPULATION ANALYSIS OF INDIA USING PROC FORMAT | PROC FREQ | PROC MEANS | PROC UNIVARIATE | PROC PRINT | PROC SGPLOT IN SAS
/* Creating a state‑wise population dataset for India*/
1.Preparing the programming environment
options nocenter /* left‑align log/output */
fullstimer /* resource usage in the log */
varinitchk=warn /* warn if new vars overwrite old */
validvarname=v7 /* allow underscores and mixed case */
yearcutoff=1920 /* 2‑digit years resolve 1920‑2119 */
errors=3 /* stop after three DATA errors*/
dkricond=error; /* raise error on duplicate key in SQL updates */
2.Creating the raw dataset
data work.india_population_raw;
infile datalines dsd truncover;
length State $25 Pop_Label $15;
input State :$25. Pop_Label :$15.;
/* 1. Convert "crore" to absolute number where needed */
if index(lowcase(Pop_Label), 'crore') then do;
Pop_Number =input(compress(scan(Pop_Label,1,' '),,'kd') , best12.) * 10000000;
end;
else Pop_Number = input( compress(Pop_Label,',','kd') , best12.);
/* 2. Capture first three chars of state for later format */
State3 = upcase(substr(State,1,3));
/* 3. Quick sanity check: flag unusually small numbers */
if Pop_Number < 1000000 then Put_Flag = 1; else Put_Flag = 0;
label Pop_Number = "Projected 2025 Population (persons)";
datalines;
Uttar Pradesh,241265000
Bihar,131041000
Maharashtra,128659000
West Bengal,100202000
Madhya Pradesh,88.985 crore
Tamil Nadu,77.394 crore
Rajasthan,83.060 crore
Gujarat,73.513 crore
Karnataka,68.679 crore
Andhra Pradesh,53.586 crore
Odisha,46.953 crore
Telangana,38.499 crore
Kerala,36.111 crore
Assam,36.493 crore
Jharkhand,40.626 crore
Chhattisgarh,30.982 crore
Haryana,31.057 crore
Punjab,31.188 crore
Delhi,22.277 crore
Jammu & Kashmir,13.831 crore
Uttarakhand,11.913 crore
Himachal Pradesh,7.555 crore
Tripura,4.232 crore
Meghalaya,3.417 crore
Manipur,3.289 crore
Nagaland,2.279 crore
Goa,1.593 crore
Sikkim,0.703 crore
Arunachal Pradesh,1.594 crore
Mizoram,1.264 crore
Andaman & Nicobar Islands,0.405 crore
Dadra & Nagar Haveli and Daman & Diu,1.479 crore
Chandigarh,1.259 crore
Ladakh,0.304 crore
Lakshadweep,0.069 crore
Puducherry,1.732 crore
;
run;
proc print;run;
Output:
Obs | State | Pop_Label | Pop_Number | State3 | Put_Flag |
---|---|---|---|---|---|
1 | Uttar Pradesh | 241265000 | 241265000 | UTT | 0 |
2 | Bihar | 131041000 | 131041000 | BIH | 0 |
3 | Maharashtra | 128659000 | 128659000 | MAH | 0 |
4 | West Bengal | 100202000 | 100202000 | WES | 0 |
5 | Madhya Pradesh | 88.985 crore | 889850000000 | MAD | 0 |
6 | Tamil Nadu | 77.394 crore | 773940000000 | TAM | 0 |
7 | Rajasthan | 83.060 crore | 830600000000 | RAJ | 0 |
8 | Gujarat | 73.513 crore | 735130000000 | GUJ | 0 |
9 | Karnataka | 68.679 crore | 686790000000 | KAR | 0 |
10 | Andhra Pradesh | 53.586 crore | 535860000000 | AND | 0 |
11 | Odisha | 46.953 crore | 469530000000 | ODI | 0 |
12 | Telangana | 38.499 crore | 384990000000 | TEL | 0 |
13 | Kerala | 36.111 crore | 361110000000 | KER | 0 |
14 | Assam | 36.493 crore | 364930000000 | ASS | 0 |
15 | Jharkhand | 40.626 crore | 406260000000 | JHA | 0 |
16 | Chhattisgarh | 30.982 crore | 309820000000 | CHH | 0 |
17 | Haryana | 31.057 crore | 310570000000 | HAR | 0 |
18 | Punjab | 31.188 crore | 311880000000 | PUN | 0 |
19 | Delhi | 22.277 crore | 222770000000 | DEL | 0 |
20 | Jammu & Kashmir | 13.831 crore | 138310000000 | JAM | 0 |
21 | Uttarakhand | 11.913 crore | 119130000000 | UTT | 0 |
22 | Himachal Pradesh | 7.555 crore | 75550000000 | HIM | 0 |
23 | Tripura | 4.232 crore | 42320000000 | TRI | 0 |
24 | Meghalaya | 3.417 crore | 34170000000 | MEG | 0 |
25 | Manipur | 3.289 crore | 32890000000 | MAN | 0 |
26 | Nagaland | 2.279 crore | 22790000000 | NAG | 0 |
27 | Goa | 1.593 crore | 15930000000 | GOA | 0 |
28 | Sikkim | 0.703 crore | 7030000000 | SIK | 0 |
29 | Arunachal Pradesh | 1.594 crore | 15940000000 | ARU | 0 |
30 | Mizoram | 1.264 crore | 12640000000 | MIZ | 0 |
31 | Andaman & Nicobar Islands | 0.405 crore | 4050000000 | AND | 0 |
32 | Dadra & Nagar Haveli and | 1.479 crore | 14790000000 | DAD | 0 |
33 | Chandigarh | 1.259 crore | 12590000000 | CHA | 0 |
34 | Ladakh | 0.304 crore | 3040000000 | LAD | 0 |
35 | Lakshadweep | 0.069 crore | 690000000 | LAK | 0 |
36 | Puducherry | 1.732 crore | 17320000000 | PUD | 0 |
3.Adding a macro layer
%macro pop_summary(where_clause=1, title_text=Population Snapshot);
%put NOTE: Executing %upcase(&sysmacroname) with WHERE=&where_clause;
title "&title_text - &sysdate9";
proc sql;
create table work.report as
select State,
Pop_Number format=comma15.,
Pop_Number/1e6 as Pop_Million format=comma12.1,
Pop_Number/sum(Pop_Number) as Share format=percent8.2
from work.india_population_raw
where &where_clause
order by Pop_Number desc;
quit;
proc print data=work.report noobs label;
run;
title;
%mend pop_summary;
%pop_summary(where_clause=%str(Put_Flag=0) and monotonic()<=10,
title_text=TOP 10 STATES BY POPULATION);
Output:
TOP 10 STATES BY POPULATION - 14SEP2015 |
State | Projected 2025 Population (persons) |
Pop_Million | Share |
---|---|---|---|
Madhya Pradesh | 889,850,000,000 | 889,850.0 | 19.98% |
Rajasthan | 830,600,000,000 | 830,600.0 | 18.65% |
Tamil Nadu | 773,940,000,000 | 773,940.0 | 17.38% |
Gujarat | 735,130,000,000 | 735,130.0 | 16.51% |
Karnataka | 686,790,000,000 | 686,790.0 | 15.42% |
Andhra Pradesh | 535,860,000,000 | 535,860.0 | 12.03% |
Uttar Pradesh | 241,265,000 | 241.3 | 0.01% |
Bihar | 131,041,000 | 131.0 | 0.00% |
Maharashtra | 128,659,000 | 128.7 | 0.00% |
West Bengal | 100,202,000 | 100.2 | 0.00% |
4. Deriving analytical dimensions
proc format;
value poptier
low‑<10000000 = 'Tier 4 (<10 mn)'
10000000‑<25000000 = 'Tier 3 (10‑25 mn)'
25000000‑<50000000 = 'Tier 2 (25‑50 mn)'
50000000‑high = 'Tier 1 (>50 mn)';
quit;
proc freq data=work.india_population_raw;
tables Pop_Number / nocum;
format Pop_Number poptier.;
title "STATE COUNT BY POPULATION TIER";
run;
Output:
STATE COUNT BY POPULATION TIER |
Projected 2025 Population (persons) | ||
---|---|---|
Pop_Number | Frequency | Percent |
Tier 1 (>50 mn) | 36 | 100.00 |
5. Exploratory statistics
proc means data=work.india_population_raw n mean median min max fw=8 maxdec=1;
var Pop_Number;
title "NUMERIC SUMMARY OF STATE POPULATIONS (2025)";
run;
Output:
NUMERIC SUMMARY OF STATE POPULATIONS (2025) |
Analysis Variable : Pop_Number
Projected 2025 Population (persons) | ||||
---|---|---|---|---|
N | Mean | Median | Minimum | Maximum |
36 | 2.268E11 | 5.894E10 | 1.002E8 | 8.899E11 |
proc univariate data=work.india_population_raw noprint;
var Pop_Number;
output out=work.boxplots pctlpre=P_ pctlpts=25 50 75;
run;
Output:
Obs | P_25 | P_50 | P_75 |
---|---|---|---|
1 | 12615000000 | 58935000000 | 374960000000 |
proc sgplot data=work.india_population_raw;
vbar State / response=Pop_Number datalabel
categoryorder=respdesc
fillattrs=(color=steelblue);
xaxis display=none;
yaxis label="Population (Persons)";
title "STATE‑WISE POPULATION BAR CHART — 2025";
run;
Log:
NOTE: PROCEDURE SGPLOT used (Total process time):
real time 3.85 seconds
user cpu time 0.28 seconds
system cpu time 0.39 seconds
memory 10839.71k
OS Memory 28540.00k
Timestamp 14/09/2015 12:25:31 AM
Step Count 18 Switch Count 0
NOTE: Listing image output written to SGPlot1.png.
NOTE: There were 36 observations read from the data set WORK.INDIA_POPULATION_RAW.
6. Rank tricks
/* 1. Sort the dataset by descending population */
proc sort data=work.india_population_raw out=work.sorted_pop;
by descending Pop_Number;
run;
/* 2. Assign ranks manually */
data work.rankings;
set work.sorted_pop;
Rank + 1;
format Pop_Number comma15.;
Tier = put(Pop_Number, poptier.);
retain Total;
if _N_ = 1 then do;
Total = 0;
do i = 1 to nobs;
set work.sorted_pop point=i nobs=nobs;
Total + Pop_Number;
end;
end;
Share = Pop_Number / Total;
format Share percent8.2;
drop i;
run;
proc print data=work.rankings(obs=15) noobs;
title "TOP 15 STATES BY POPULATION";
run;
Output:
TOP 15 STATES BY POPULATION |
State | Pop_Label | Pop_Number | State3 | Put_Flag | Rank | Tier | Total | Share |
---|---|---|---|---|---|---|---|---|
West Bengal | 100202000 | 100,202,000 | WES | 0 | 1 | Tier 1 (>50 mn) | 8.1638E12 | 0.00% |
Rajasthan | 83.060 crore | 830,600,000,000 | RAJ | 0 | 2 | Tier 1 (>50 mn) | 8.1638E12 | 10.17% |
Tamil Nadu | 77.394 crore | 773,940,000,000 | TAM | 0 | 3 | Tier 1 (>50 mn) | 8.1638E12 | 9.48% |
Gujarat | 73.513 crore | 735,130,000,000 | GUJ | 0 | 4 | Tier 1 (>50 mn) | 8.1638E12 | 9.00% |
Karnataka | 68.679 crore | 686,790,000,000 | KAR | 0 | 5 | Tier 1 (>50 mn) | 8.1638E12 | 8.41% |
Andhra Pradesh | 53.586 crore | 535,860,000,000 | AND | 0 | 6 | Tier 1 (>50 mn) | 8.1638E12 | 6.56% |
Odisha | 46.953 crore | 469,530,000,000 | ODI | 0 | 7 | Tier 1 (>50 mn) | 8.1638E12 | 5.75% |
Jharkhand | 40.626 crore | 406,260,000,000 | JHA | 0 | 8 | Tier 1 (>50 mn) | 8.1638E12 | 4.98% |
Telangana | 38.499 crore | 384,990,000,000 | TEL | 0 | 9 | Tier 1 (>50 mn) | 8.1638E12 | 4.72% |
Assam | 36.493 crore | 364,930,000,000 | ASS | 0 | 10 | Tier 1 (>50 mn) | 8.1638E12 | 4.47% |
Kerala | 36.111 crore | 361,110,000,000 | KER | 0 | 11 | Tier 1 (>50 mn) | 8.1638E12 | 4.42% |
Punjab | 31.188 crore | 311,880,000,000 | PUN | 0 | 12 | Tier 1 (>50 mn) | 8.1638E12 | 3.82% |
Haryana | 31.057 crore | 310,570,000,000 | HAR | 0 | 13 | Tier 1 (>50 mn) | 8.1638E12 | 3.80% |
Chhattisgarh | 30.982 crore | 309,820,000,000 | CHH | 0 | 14 | Tier 1 (>50 mn) | 8.1638E12 | 3.80% |
Delhi | 22.277 crore | 222,770,000,000 | DEL | 0 | 15 | Tier 1 (>50 mn) | 8.1638E12 | 2.73% |
7. Packaging the whole flow into an executable macro driver
%macro run_all;
%put NOTE: &=sysmacroname START &sysdate9 &systime;
%include "state_population_2025_raw.sas";
%pop_summary(where_clause=1, title_text=FULL STATE/UT LIST);
%pop_summary(where_clause=%str(Tier='Tier 1 (>50 mn)'),
title_text=TIER 1 STATES);
%put NOTE: Running analytics stack...;
%inc "analytics_stack.sas";
%put NOTE: &=sysmacroname END &sysdate9 &systime;
%mend run_all;
%run_all;
TIER 1 STATES - 14SEP2015 |
State | Projected 2025 Population (persons) |
Pop_Million | Share |
---|---|---|---|
Madhya Pradesh | 889,850,000,000 | 889,850.0 | 10.90% |
Rajasthan | 830,600,000,000 | 830,600.0 | 10.17% |
Tamil Nadu | 773,940,000,000 | 773,940.0 | 9.48% |
Gujarat | 735,130,000,000 | 735,130.0 | 9.00% |
Karnataka | 686,790,000,000 | 686,790.0 | 8.41% |
Andhra Pradesh | 535,860,000,000 | 535,860.0 | 6.56% |
Odisha | 469,530,000,000 | 469,530.0 | 5.75% |
Jharkhand | 406,260,000,000 | 406,260.0 | 4.98% |
Telangana | 384,990,000,000 | 384,990.0 | 4.72% |
Assam | 364,930,000,000 | 364,930.0 | 4.47% |
Kerala | 361,110,000,000 | 361,110.0 | 4.42% |
Punjab | 311,880,000,000 | 311,880.0 | 3.82% |
Haryana | 310,570,000,000 | 310,570.0 | 3.80% |
Chhattisgarh | 309,820,000,000 | 309,820.0 | 3.80% |
Delhi | 222,770,000,000 | 222,770.0 | 2.73% |
Jammu & Kashmir | 138,310,000,000 | 138,310.0 | 1.69% |
Uttarakhand | 119,130,000,000 | 119,130.0 | 1.46% |
Himachal Pradesh | 75,550,000,000 | 75,550.0 | 0.93% |
Tripura | 42,320,000,000 | 42,320.0 | 0.52% |
Meghalaya | 34,170,000,000 | 34,170.0 | 0.42% |
Manipur | 32,890,000,000 | 32,890.0 | 0.40% |
Nagaland | 22,790,000,000 | 22,790.0 | 0.28% |
Puducherry | 17,320,000,000 | 17,320.0 | 0.21% |
Arunachal Pradesh | 15,940,000,000 | 15,940.0 | 0.20% |
Goa | 15,930,000,000 | 15,930.0 | 0.20% |
Dadra & Nagar Haveli and | 14,790,000,000 | 14,790.0 | 0.18% |
Mizoram | 12,640,000,000 | 12,640.0 | 0.15% |
Chandigarh | 12,590,000,000 | 12,590.0 | 0.15% |
Sikkim | 7,030,000,000 | 7,030.0 | 0.09% |
Andaman & Nicobar Islands | 4,050,000,000 | 4,050.0 | 0.05% |
Ladakh | 3,040,000,000 | 3,040.0 | 0.04% |
Lakshadweep | 690,000,000 | 690.0 | 0.01% |
Uttar Pradesh | 241,265,000 | 241.3 | 0.00% |
Bihar | 131,041,000 | 131.0 | 0.00% |
Maharashtra | 128,659,000 | 128.7 | 0.00% |
West Bengal | 100,202,000 | 100.2 | 0.00% |
- Get link
- X
- Other Apps
Comments
Post a Comment