Monday, 3 November 2025

299.COMPREHENSIVE SAS TUTORIAL ON NAMKEEN DATA CREATION AND ANALYSIS USING DATA AND PUT, MERGE,PROC SQL, PROC COMPARE, PROC REPORT, PROC TABULATE, AND MACROS

COMPREHENSIVE SAS TUTORIAL ON NAMKEEN DATA CREATION AND ANALYSIS USING DATA AND PUT, MERGE,PROC SQL, PROC COMPARE, PROC REPORT, PROC TABULATE, AND MACROS


option nocenter;

1: Creating the Base Datasets

/*Macro 1: Data Simulation*/

%macro namkeen_simulate;


    /* === NORTH REGION NAMKEEN DATA === */

    filename north temp;

    data _null_;

        file north;

        put "101 Haldiram Bhujia 45 200 4.7";

        put "102 Bikaji AlooBhujia 40 180 4.5"; 

        put "103 Bikanervala Navratan 55 250 4.6";

        put "104 PepsiCo LaysMasala 20 100 4.2";

        put "105 Balaji RatlamiSev 35 150 4.4";

        put "106 Pratap Gathiya 30 200 4.1";

    run;


    data work.namkeen_north;

        infile north;

        input SnackID Brand :$20. Type :$20. Price Weight_g Rating;

    run;


    proc print data=work.namkeen_north noobs;

        title "NAMKEEN PRODUCTS - NORTH REGION";

    run;


    /* === SOUTH REGION NAMKEEN DATA === */

    filename south temp;

    data _null_;

        file south;

        put "107 Aachi Mixture 50 220 4.3";

        put "108 GRB KaraBoondi 45 200 4.5";

        put "109 MTR Chakli 60 250 4.6";

        put "110 Maiyas Nippattu 55 230 4.2";

        put "111 Lays ClassicSalt 20 100 4.1";

        put "112 Haldiram MoongDal 40 150 4.7";

    run;


    data work.namkeen_south;

        infile south;

        input SnackID Brand :$20. Type :$20. Price Weight_g Rating;

    run;


    proc print data=work.namkeen_south noobs;

        title "NAMKEEN PRODUCTS - SOUTH REGION";

    run;

%mend namkeen_simulate;


%namkeen_simulate;

OUTPUT:

NAMKEEN PRODUCTS - NORTH REGION

SnackIDBrandTypePriceWeight_gRating
101HaldiramBhujia452004.7
102BikajiAlooBhujia401804.5
103BikanervalaNavratan552504.6
104PepsiCoLaysMasala201004.2
105BalajiRatlamiSev351504.4
106PratapGathiya302004.1

NAMKEEN PRODUCTS - SOUTH REGION

SnackIDBrandTypePriceWeight_gRating
107AachiMixture502204.3
108GRBKaraBoondi452004.5
109MTRChakli602504.6
110MaiyasNippattu552304.2
111LaysClassicSalt201004.1
112HaldiramMoongDal401504.7

2: Combining Datasets

/*2.1 Using SET Statement*/

data all_namkeen_set;

   set namkeen_north namkeen_south;

run;

proc print data=all_namkeen_set;

   title "NAMKEEN DATA COMBINED USING SET STATEMENT";

run;

OUTPUT:

NAMKEEN DATA COMBINED USING SET STATEMENT

ObsSnackIDBrandTypePriceWeight_gRating
1101HaldiramBhujia452004.7
2102BikajiAlooBhujia401804.5
3103BikanervalaNavratan552504.6
4104PepsiCoLaysMasala201004.2
5105BalajiRatlamiSev351504.4
6106PratapGathiya302004.1
7107AachiMixture502204.3
8108GRBKaraBoondi452004.5
9109MTRChakli602504.6
10110MaiyasNippattu552304.2
11111LaysClassicSalt201004.1
12112HaldiramMoongDal401504.7

/*2.2 Using MERGE Statement*/

Before merging, we’ll create two supporting datasets:

namkeen_price → contains price & weight

namkeen_rating → contains rating


data namkeen_price;

   set all_namkeen_set(keep=SnackID Brand Type Price Weight_g);

run;

proc print data=namkeen_price;

run;

OUTPUT:

ObsSnackIDBrandTypePriceWeight_g
1101HaldiramBhujia45200
2102BikajiAlooBhujia40180
3103BikanervalaNavratan55250
4104PepsiCoLaysMasala20100
5105BalajiRatlamiSev35150
6106PratapGathiya30200
7107AachiMixture50220
8108GRBKaraBoondi45200
9109MTRChakli60250
10110MaiyasNippattu55230
11111LaysClassicSalt20100
12112HaldiramMoongDal40150

data namkeen_rating;

   set all_namkeen_set(keep=SnackID Rating);

run;

proc print data=namkeen_rating;

run;

OUTPUT:

ObsSnackIDRating
11014.7
21024.5
31034.6
41044.2
51054.4
61064.1
71074.3
81084.5
91094.6
101104.2
111114.1
121124.7

proc sort data=namkeen_price Out=namkeen_price_sorted; 

  by SnackID;

run;

proc print data=namkeen_price_sorted;

run;

OUTPUT:

ObsSnackIDBrandTypePriceWeight_g
1101HaldiramBhujia45200
2102BikajiAlooBhujia40180
3103BikanervalaNavratan55250
4104PepsiCoLaysMasala20100
5105BalajiRatlamiSev35150
6106PratapGathiya30200
7107AachiMixture50220
8108GRBKaraBoondi45200
9109MTRChakli60250
10110MaiyasNippattu55230
11111LaysClassicSalt20100
12112HaldiramMoongDal40150

proc sort data=namkeen_rating Out=namkeen_rating_sorted; 

  by SnackID;

run;

proc print data=namkeen_rating_sorted;

run;

OUTPUT:

ObsSnackIDRating
11014.7
21024.5
31034.6
41044.2
51054.4
61064.1
71074.3
81084.5
91094.6
101104.2
111114.1
121124.7

data merged_namkeen;

   merge namkeen_price_sorted(in=a) namkeen_rating_sorted(in=b);

   by SnackID;

   if a and b;

run;

proc print data=merged_namkeen;

   title "NAMKEEN DATA COMBINED USING MERGE STATEMENT";

run;

OUTPUT:

NAMKEEN DATA COMBINED USING MERGE STATEMENT

ObsSnackIDBrandTypePriceWeight_gRating
1101HaldiramBhujia452004.7
2102BikajiAlooBhujia401804.5
3103BikanervalaNavratan552504.6
4104PepsiCoLaysMasala201004.2
5105BalajiRatlamiSev351504.4
6106PratapGathiya302004.1
7107AachiMixture502204.3
8108GRBKaraBoondi452004.5
9109MTRChakli602504.6
10110MaiyasNippattu552304.2
11111LaysClassicSalt201004.1
12112HaldiramMoongDal401504.7

/*2.3 Using PROC SQL Join*/

proc sql;

   create table namkeen_sql as

   select a.SnackID, a.Brand, a.Type, a.Price, a.Weight_g, b.Rating

   from namkeen_price a

   inner join namkeen_rating b

   on a.SnackID = b.SnackID;

quit;


proc print data=namkeen_sql;

   title "NAMKEEN DATA COMBINED USING PROC SQL JOIN";

run;

OUTPUT:

NAMKEEN DATA COMBINED USING PROC SQL JOIN

ObsSnackIDBrandTypePriceWeight_gRating
1101HaldiramBhujia452004.7
2102BikajiAlooBhujia401804.5
3103BikanervalaNavratan552504.6
4104PepsiCoLaysMasala201004.2
5105BalajiRatlamiSev351504.4
6106PratapGathiya302004.1
7107AachiMixture502204.3
8108GRBKaraBoondi452004.5
9109MTRChakli602504.6
10110MaiyasNippattu552304.2
11111LaysClassicSalt201004.1
12112HaldiramMoongDal401504.7

3: QC Check – PROC COMPARE

proc compare base=merged_namkeen compare=namkeen_sql briefsummary;

   title "QC CHECK: COMPARISON BETWEEN MERGE AND PROC SQL OUTPUTS";

run;

OUTPUT:

QC CHECK: COMPARISON BETWEEN MERGE AND PROC SQL OUTPUTS

The COMPARE Procedure                                                                                                               
Comparison of WORK.MERGED_NAMKEEN with WORK.NAMKEEN_SQL                                                                             
(Method=EXACT)                                                                                                                      
                                                                                                                                    
NOTE: No unequal values were found. All values compared are exactly equal.                                                          

4: TLF-style Summary Tables

/*4.1 Listing: PROC REPORT*/

proc report data=all_namkeen_set nowd headline headskip;

   columns SnackID Brand Type Price Weight_g Rating;

   define SnackID / order "Snack ID";

   define Brand / display "Brand Name";

   define Type / display "Namkeen Type";

   define Price / display "Price (₹)";

   define Weight_g / display "Weight (g)";

   define Rating / display "Customer Rating";

   title "LISTING REPORT OF NAMKEEN PRODUCTS IN INDIA";

run;

OUTPUT:

LISTING REPORT OF NAMKEEN PRODUCTS IN INDIA

Snack IDBrand NameNamkeen TypePrice (₹)Weight (g)Customer Rating
101HaldiramBhujia452004.7
102BikajiAlooBhujia401804.5
103BikanervalaNavratan552504.6
104PepsiCoLaysMasala201004.2
105BalajiRatlamiSev351504.4
106PratapGathiya302004.1
107AachiMixture502204.3
108GRBKaraBoondi452004.5
109MTRChakli602504.6
110MaiyasNippattu552304.2
111LaysClassicSalt201004.1
112HaldiramMoongDal401504.7

/*4.2 Table: PROC TABULATE Summary*/

proc tabulate data=all_namkeen_set;

   class Brand Type;

   var Price Rating;

   table Brand*Type,

         (Price Rating)*(mean min max);

   title "SUMMARY TABLE OF PRICE AND RATING BY BRAND AND TYPE";

run;

OUTPUT:

SUMMARY TABLE OF PRICE AND RATING BY BRAND AND TYPE

 PriceRating
MeanMinMaxMeanMinMax
BrandType50.0050.0050.004.304.304.30
AachiMixture
BalajiRatlamiSev35.0035.0035.004.404.404.40
BikajiAlooBhujia40.0040.0040.004.504.504.50
BikanervalaNavratan55.0055.0055.004.604.604.60
GRBKaraBoondi45.0045.0045.004.504.504.50
HaldiramBhujia45.0045.0045.004.704.704.70
MoongDal40.0040.0040.004.704.704.70
LaysClassicSalt20.0020.0020.004.104.104.10
MTRChakli60.0060.0060.004.604.604.60
MaiyasNippattu55.0055.0055.004.204.204.20
PepsiCoLaysMasala20.0020.0020.004.204.204.20
PratapGathiya30.0030.0030.004.104.104.10

5: Automation with Reporting Macro

/*Macro 2: Summary Reporting*/

%macro namkeen_report(ds=);

   %put Generating summary report for dataset: &ds;


   proc means data=&ds n mean min max;

      var Price Weight_g Rating;

      class Brand;

      title "PROC MEANS SUMMARY FOR &ds";

   run;


   proc freq data=&ds;

      tables Type / nocum nopercent;

      title "FREQUENCY OF NAMKEEN TYPES IN &ds";

   run;


   proc sgplot data=&ds;

      vbar Brand / response=Price stat=mean datalabel;

      title "AVERAGE PRICE BY BRAND - &ds";

   run;


   proc sgplot data=&ds;

      vbar Type / response=Rating stat=mean datalabel;

      title "AVERAGE CUSTOMER RATING BY NAMKEEN TYPE - &ds";

   run;


%mend namkeen_report;


%namkeen_report(ds=all_namkeen_set);

OUTPUT:

PROC MEANS SUMMARY FOR all_namkeen_set

The MEANS Procedure

BrandN ObsVariableNMeanMinimumMaximum
Aachi1
Price
Weight_g
Rating
1
1
1
50.0000000
220.0000000
4.3000000
50.0000000
220.0000000
4.3000000
50.0000000
220.0000000
4.3000000
Balaji1
Price
Weight_g
Rating
1
1
1
35.0000000
150.0000000
4.4000000
35.0000000
150.0000000
4.4000000
35.0000000
150.0000000
4.4000000
Bikaji1
Price
Weight_g
Rating
1
1
1
40.0000000
180.0000000
4.5000000
40.0000000
180.0000000
4.5000000
40.0000000
180.0000000
4.5000000
Bikanervala1
Price
Weight_g
Rating
1
1
1
55.0000000
250.0000000
4.6000000
55.0000000
250.0000000
4.6000000
55.0000000
250.0000000
4.6000000
GRB1
Price
Weight_g
Rating
1
1
1
45.0000000
200.0000000
4.5000000
45.0000000
200.0000000
4.5000000
45.0000000
200.0000000
4.5000000
Haldiram2
Price
Weight_g
Rating
2
2
2
42.5000000
175.0000000
4.7000000
40.0000000
150.0000000
4.7000000
45.0000000
200.0000000
4.7000000
Lays1
Price
Weight_g
Rating
1
1
1
20.0000000
100.0000000
4.1000000
20.0000000
100.0000000
4.1000000
20.0000000
100.0000000
4.1000000
MTR1
Price
Weight_g
Rating
1
1
1
60.0000000
250.0000000
4.6000000
60.0000000
250.0000000
4.6000000
60.0000000
250.0000000
4.6000000
Maiyas1
Price
Weight_g
Rating
1
1
1
55.0000000
230.0000000
4.2000000
55.0000000
230.0000000
4.2000000
55.0000000
230.0000000
4.2000000
PepsiCo1
Price
Weight_g
Rating
1
1
1
20.0000000
100.0000000
4.2000000
20.0000000
100.0000000
4.2000000
20.0000000
100.0000000
4.2000000
Pratap1
Price
Weight_g
Rating
1
1
1
30.0000000
200.0000000
4.1000000
30.0000000
200.0000000
4.1000000
30.0000000
200.0000000
4.1000000

FREQUENCY OF NAMKEEN TYPES IN all_namkeen_set

The FREQ Procedure

TypeFrequency
AlooBhujia1
Bhujia1
Chakli1
ClassicSalt1
Gathiya1
KaraBoondi1
LaysMasala1
Mixture1
MoongDal1
Navratan1
Nippattu1
RatlamiSev1
The SGPlot Procedure
The SGPlot Procedure






To Visit My Previous Online Streaming Flatform Dataset:Click Here
To Visit My Previous Statistical Evaluation Of Clinical Trials:Click Here
To Visit My Previous Unlocking Retail Insights Dataset:Click Here
To Visit My Previous Sas Interview Questions-1:Click Here  



Follow Us On : 


 


--- FOLLOW OUR BLOG FOR MORE INFORMATION.

--->PLEASE DO COMMENTS AND SHARE OUR BLOG.

No comments:

Post a Comment