230.STATEWISE POPULATION ANALYSIS OF INDIA USING PROC FORMAT | PROC FREQ | PROC MEANS | PROC UNIVARIATE | PROC PRINT | PROC SGPLOT IN SAS

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

The FREQ Procedure

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)

The MEANS Procedure

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;

Output:
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%





To Visit My Previous Sas Questions Datasets:Click Here
To Visit My Previous Home Energy Consumption Dataset:Click Here
To Visit My Previous Wildlife Migration Dataset:Click Here
To Visit My Previous Endangered Species Dataset:Click Here





--->PRACTICE AND COMMENT YOUR OUTPUT: 

--->PLEASE FOLLOW OUR BLOG FOR MORE UPDATES.

PLEASE FOLLOW OUR TELEGRAM CHANNEL CLICK HERE

PLEASE FOLLOW OUR FACEBOOK PAGE  CLICK HERE

PLEASE FOLLOW OUR INSTAGRAM PAGE CLICK HERE



Comments