219.ANALYZING CLIMATE CHANGES WORLDWIDE USING PROC CONTENTS | PROC PRINT | PROC MEANS | PROC SQL | PROC FORMAT | PROC SGPLOT | PROC TRANSPOSE IN SAS WITH MACROS OPTIONS AND FUNCTIONS

ANALYZING CLIMATE CHANGES WORLDWIDE USING PROC CONTENTS | PROC PRINT | PROC MEANS | PROC SQL | PROC FORMAT | PROC SGPLOT | PROC TRANSPOSE IN SAS WITH MACROS OPTIONS AND FUNCTIONS

/*Creating a custom dataset about climate changes worldwide */

Dataset Theme

The dataset will simulate global climate changes with country-level information from 2000 to 2020, including:

Country

Year

Avg_Temp_C (Average Temperature in Celsius)

CO2_Emissions_MT (CO2 Emissions in Million Tonnes)

Sea_Level_Change_mm

Disaster_Count (Climate-Related Disasters)

Green_Cover_Change_% (Change in Forest/Green Area)


STEP 1: Set OPTIONS and Create the Raw Dataset

/* Enable SAS options for debugging and formatting */

options nodate pageno=1 linesize=120 pagesize=60 fullstimer;


/* Create dataset with simulated climate data */

data Climate_Change;

    length Country $20;

    infile datalines dlm=',' dsd;

    input Country $ Year Avg_Temp_C CO2_Emissions_MT Sea_Level_Change_mm Disaster_Count Green_Cover_Change_;

    label

        Country = "Country Name"

        Year = "Year"

        Avg_Temp_C = "Average Temperature (°C)"

        CO2_Emissions_MT = "CO2 Emissions (Million Tonnes)"

        Sea_Level_Change_mm = "Sea Level Change (mm)"

        Disaster_Count = "Number of Climate Disasters"

        Green_Cover_Change_ = "Green Cover Change (%)";

datalines;

India,2000,25.5,1050,1.2,5,-0.5

India,2010,26.7,1300,1.7,7,-0.8

India,2020,27.4,1550,2.1,9,-1.2

USA,2000,13.8,5800,1.1,4,-0.3

USA,2010,14.4,6000,1.5,5,-0.4

USA,2020,15.2,6200,1.9,7,-0.9

Brazil,2000,22.0,400,0.9,3,-1.0

Brazil,2010,23.1,500,1.2,4,-1.3

Brazil,2020,24.0,600,1.6,6,-1.6

Australia,2000,21.0,300,0.8,2,-0.2

Australia,2010,22.2,350,1.1,3,-0.5

Australia,2020,23.5,410,1.4,4,-0.7

China,2000,14.0,4000,1.0,5,-0.4

China,2010,15.8,6000,1.6,8,-0.9

China,2020,17.5,8000,2.2,10,-1.5

;

run;

proc print;run;

Output:

Obs Country Year Avg_Temp_C CO2_Emissions_MT Sea_Level_Change_mm Disaster_Count Green_Cover_Change_
1 India 2000 25.5 1050 1.2 5 -0.5
2 India 2010 26.7 1300 1.7 7 -0.8
3 India 2020 27.4 1550 2.1 9 -1.2
4 USA 2000 13.8 5800 1.1 4 -0.3
5 USA 2010 14.4 6000 1.5 5 -0.4
6 USA 2020 15.2 6200 1.9 7 -0.9
7 Brazil 2000 22.0 400 0.9 3 -1.0
8 Brazil 2010 23.1 500 1.2 4 -1.3
9 Brazil 2020 24.0 600 1.6 6 -1.6
10 Australia 2000 21.0 300 0.8 2 -0.2
11 Australia 2010 22.2 350 1.1 3 -0.5
12 Australia 2020 23.5 410 1.4 4 -0.7
13 China 2000 14.0 4000 1.0 5 -0.4
14 China 2010 15.8 6000 1.6 8 -0.9
15 China 2020 17.5 8000 2.2 10 -1.5

STEP 2: Use PROC CONTENTS, PROC PRINT, and PROC MEANS

/* View structure of the dataset */

proc contents data=Climate_Change varnum;

    title "Dataset Contents of Climate_Change";

run;

Output:

Dataset Contents of Climate_Change

The CONTENTS Procedure

Data Set Name WORK.CLIMATE_CHANGE Observations 15
Member Type DATA Variables 7
Engine V9 Indexes 0
Created 14/09/2015 00:05:27 Observation Length 72
Last Modified 14/09/2015 00:05:27 Deleted Observations 0
Protection   Compressed NO
Data Set Type   Sorted NO
Label      
Data Representation WINDOWS_64    
Encoding wlatin1 Western (Windows)    

Engine/Host Dependent Information
Data Set Page Size 65536
Number of Data Set Pages 1
First Data Page 1
Max Obs per Page 908
Obs in First Data Page 15
Number of Data Set Repairs 0
ExtendObsCounter YES
Filename C:\Users\Lenovo\AppData\Local\Temp\SAS Temporary Files\_TD8500_DESKTOP-QFAA4KV_\climate_change.sas7bdat
Release Created 9.0401M2
Host Created X64_8HOME

Variables in Creation Order
# Variable Type Len Label
1 Country Char 20 Country Name
2 Year Num 8 Year
3 Avg_Temp_C Num 8 Average Temperature (°C)
4 CO2_Emissions_MT Num 8 CO2 Emissions (Million Tonnes)
5 Sea_Level_Change_mm Num 8 Sea Level Change (mm)
6 Disaster_Count Num 8 Number of Climate Disasters
7 Green_Cover_Change_ Num 8 Green Cover Change (%)

/* Print the data with proper formatting */

proc print data=Climate_Change label noobs;

    format Avg_Temp_C 5.1 CO2_Emissions_MT comma8. Sea_Level_Change_mm 4.1 Green_Cover_Change_ 4.1;

    title "Climate Change Data (2000-2020)";

run;

Output:

Climate Change Data (2000-2020)

Country Name Year Average Temperature
(°C)
CO2 Emissions
(Million Tonnes)
Sea Level
Change (mm)
Number
of Climate
Disasters
Green Cover
Change (%)
India 2000 25.5 1,050 1.2 5 -0.5
India 2010 26.7 1,300 1.7 7 -0.8
India 2020 27.4 1,550 2.1 9 -1.2
USA 2000 13.8 5,800 1.1 4 -0.3
USA 2010 14.4 6,000 1.5 5 -0.4
USA 2020 15.2 6,200 1.9 7 -0.9
Brazil 2000 22.0 400 0.9 3 -1.0
Brazil 2010 23.1 500 1.2 4 -1.3
Brazil 2020 24.0 600 1.6 6 -1.6
Australia 2000 21.0 300 0.8 2 -0.2
Australia 2010 22.2 350 1.1 3 -0.5
Australia 2020 23.5 410 1.4 4 -0.7
China 2000 14.0 4,000 1.0 5 -0.4
China 2010 15.8 6,000 1.6 8 -0.9
China 2020 17.5 8,000 2.2 10 -1.5

/* Use PROC MEANS with statistics */

proc means data=Climate_Change n mean min max std;

    class Country;

    var Avg_Temp_C CO2_Emissions_MT Sea_Level_Change_mm Disaster_Count Green_Cover_Change_;

    title "Summary Statistics by Country";

run;

Output:

Summary Statistics by Country

The MEANS Procedure

Country Name N Obs Variable Label N Mean Minimum Maximum Std Dev
Australia 3
Avg_Temp_C
CO2_Emissions_MT
Sea_Level_Change_mm
Disaster_Count
Green_Cover_Change_
Average Temperature (°C)
CO2 Emissions (Million Tonnes)
Sea Level Change (mm)
Number of Climate Disasters
Green Cover Change (%)
3
3
3
3
3
22.2333333
353.3333333
1.1000000
3.0000000
-0.4666667
21.0000000
300.0000000
0.8000000
2.0000000
-0.7000000
23.5000000
410.0000000
1.4000000
4.0000000
-0.2000000
1.2503333
55.0757055
0.3000000
1.0000000
0.2516611
Brazil 3
Avg_Temp_C
CO2_Emissions_MT
Sea_Level_Change_mm
Disaster_Count
Green_Cover_Change_
Average Temperature (°C)
CO2 Emissions (Million Tonnes)
Sea Level Change (mm)
Number of Climate Disasters
Green Cover Change (%)
3
3
3
3
3
23.0333333
500.0000000
1.2333333
4.3333333
-1.3000000
22.0000000
400.0000000
0.9000000
3.0000000
-1.6000000
24.0000000
600.0000000
1.6000000
6.0000000
-1.0000000
1.0016653
100.0000000
0.3511885
1.5275252
0.3000000
China 3
Avg_Temp_C
CO2_Emissions_MT
Sea_Level_Change_mm
Disaster_Count
Green_Cover_Change_
Average Temperature (°C)
CO2 Emissions (Million Tonnes)
Sea Level Change (mm)
Number of Climate Disasters
Green Cover Change (%)
3
3
3
3
3
15.7666667
6000.00
1.6000000
7.6666667
-0.9333333
14.0000000
4000.00
1.0000000
5.0000000
-1.5000000
17.5000000
8000.00
2.2000000
10.0000000
-0.4000000
1.7502381
2000.00
0.6000000
2.5166115
0.5507571
India 3
Avg_Temp_C
CO2_Emissions_MT
Sea_Level_Change_mm
Disaster_Count
Green_Cover_Change_
Average Temperature (°C)
CO2 Emissions (Million Tonnes)
Sea Level Change (mm)
Number of Climate Disasters
Green Cover Change (%)
3
3
3
3
3
26.5333333
1300.00
1.6666667
7.0000000
-0.8333333
25.5000000
1050.00
1.2000000
5.0000000
-1.2000000
27.4000000
1550.00
2.1000000
9.0000000
-0.5000000
0.9609024
250.0000000
0.4509250
2.0000000
0.3511885
USA 3
Avg_Temp_C
CO2_Emissions_MT
Sea_Level_Change_mm
Disaster_Count
Green_Cover_Change_
Average Temperature (°C)
CO2 Emissions (Million Tonnes)
Sea Level Change (mm)
Number of Climate Disasters
Green Cover Change (%)
3
3
3
3
3
14.4666667
6000.00
1.5000000
5.3333333
-0.5333333
13.8000000
5800.00
1.1000000
4.0000000
-0.9000000
15.2000000
6200.00
1.9000000
7.0000000
-0.3000000
0.7023769
200.0000000
0.4000000
1.5275252
0.3214550

STEP 3: Using SQL to Derive Insights

/* Country with highest average temperature in 2020 */

proc sql;

    options nolabel;

    title "Top Hottest Country in 2020";

    select Country, Avg_Temp_C

    from Climate_Change

    where Year = 2020

    group by Country

    having Avg_Temp_C = max(Avg_Temp_C);

quit;

Output:

Top Hottest Country in 2020

Country Avg_Temp_C
Australia 23.5
Brazil 24
China 17.5
India 27.4
USA 15.2

/* Average CO2 Emissions by Year */

proc sql;

    title "Average CO2 Emissions Per Year";

    select Year, mean(CO2_Emissions_MT) as Avg_CO2_Emissions

    from Climate_Change

    group by Year

    order by Year;

quit;

Output:

Average CO2 Emissions Per Year

Year Avg_CO2_Emissions
2000 2310
2010 2830
2020 3352

STEP 4: Apply FUNCTIONS in DATA Step

/* Derive additional columns using SAS functions */

data Climate_Functions;

    set Climate_Change;

    

    /* Avoid division by zero */

    if Disaster_Count > 0 then 

        CO2_per_Disaster = round(CO2_Emissions_MT / Disaster_Count, 0.1);

    else 

        CO2_per_Disaster = .; 


    /* Year as character */

    Year_Label = put(Year, 4.);


    /* Celsius to Fahrenheit */

    Temp_Fahrenheit = round((Avg_Temp_C * 9/5) + 32, 1);


    /* Use IFC for character result */

    Risk_Level = ifc(Disaster_Count > 6, 'High', 

                     ifc(Disaster_Count > 3, 'Medium', 

                         'Low'));

run;


/* Display calculated values */

proc print data=Climate_Functions label;

    title "Climate Data with Derived Metrics";

    var Country Year Avg_Temp_C Temp_Fahrenheit CO2_Emissions_MT CO2_per_Disaster Risk_Level;

run;

Output:

Climate Data with Derived Metrics

Obs Country Name Year Average Temperature
(°C)
Temp_Fahrenheit CO2 Emissions
(Million
Tonnes)
CO2_per_Disaster Risk_Level
1 India 2000 25.5 78 1050 210.0 Medium
2 India 2010 26.7 80 1300 185.7 High
3 India 2020 27.4 81 1550 172.2 High
4 USA 2000 13.8 57 5800 1450.0 Medium
5 USA 2010 14.4 58 6000 1200.0 Medium
6 USA 2020 15.2 59 6200 885.7 High
7 Brazil 2000 22.0 72 400 133.3 Low
8 Brazil 2010 23.1 74 500 125.0 Medium
9 Brazil 2020 24.0 75 600 100.0 Medium
10 Australia 2000 21.0 70 300 150.0 Low
11 Australia 2010 22.2 72 350 116.7 Low
12 Australia 2020 23.5 74 410 102.5 Medium
13 China 2000 14.0 57 4000 800.0 Medium
14 China 2010 15.8 60 6000 750.0 High
15 China 2020 17.5 64 8000 800.0 High

STEP 5: MACRO to Get Year-Wise Temperature and Emissions

/* Macro to report temp & emissions by year */

%macro year_report(year=);

    proc sql;

        title "Climate Report for Year &year";

        select Country, Avg_Temp_C, CO2_Emissions_MT, Sea_Level_Change_mm, Disaster_Count

        from Climate_Change

        where Year = &year

        order by CO2_Emissions_MT desc;

    quit;

%mend;


/* Use macro for 2000, 2010, 2020 */

%year_report(year=2000);

Output:

Climate Report for Year 2000

Country Name Average Temperature
(°C)
CO2 Emissions
(Million Tonnes)
Sea Level Change
(mm)
Number of Climate
Disasters
USA 13.8 5800 1.1 4
China 14 4000 1 5
India 25.5 1050 1.2 5
Brazil 22 400 0.9 3
Australia 21 300 0.8 2

%year_report(year=2010);

Output:

Climate Report for Year 2010

Country Name Average Temperature
(°C)
CO2 Emissions
(Million Tonnes)
Sea Level Change
(mm)
Number of Climate
Disasters
China 15.8 6000 1.6 8
USA 14.4 6000 1.5 5
India 26.7 1300 1.7 7
Brazil 23.1 500 1.2 4
Australia 22.2 350 1.1 3

%year_report(year=2020);

Output:

Climate Report for Year 2020

Country Name Average Temperature
(°C)
CO2 Emissions
(Million Tonnes)
Sea Level Change
(mm)
Number of Climate
Disasters
China 17.5 8000 2.2 10
USA 15.2 6200 1.9 7
India 27.4 1550 2.1 9
Brazil 24 600 1.6 6
Australia 23.5 410 1.4 4

STEP 6: PROC FORMAT and Applying Group Labels

/* Define Risk Format */

proc format;

    value $riskfmt

        'High' = 'High Risk'

        'Medium' = 'Medium Risk'

        'Low' = 'Low Risk';

run;


proc print data=Climate_Functions label;

    format Risk_Level $riskfmt.;

    title "Formatted Climate Risk Levels";

run;

Output:

Formatted Climate Risk Levels

Obs Country Name Year Average Temperature
(°C)
CO2 Emissions
(Million
Tonnes)
Sea Level
Change (mm)
Number
of Climate
Disasters
Green Cover
Change (%)
CO2_per_Disaster Year_Label Temp_Fahrenheit Risk_Level
1 India 2000 25.5 1050 1.2 5 -0.5 210.0 2000 78 Medium Risk
2 India 2010 26.7 1300 1.7 7 -0.8 185.7 2010 80 High Risk
3 India 2020 27.4 1550 2.1 9 -1.2 172.2 2020 81 High Risk
4 USA 2000 13.8 5800 1.1 4 -0.3 1450.0 2000 57 Medium Risk
5 USA 2010 14.4 6000 1.5 5 -0.4 1200.0 2010 58 Medium Risk
6 USA 2020 15.2 6200 1.9 7 -0.9 885.7 2020 59 High Risk
7 Brazil 2000 22.0 400 0.9 3 -1.0 133.3 2000 72 Low Risk
8 Brazil 2010 23.1 500 1.2 4 -1.3 125.0 2010 74 Medium Risk
9 Brazil 2020 24.0 600 1.6 6 -1.6 100.0 2020 75 Medium Risk
10 Australia 2000 21.0 300 0.8 2 -0.2 150.0 2000 70 Low Risk
11 Australia 2010 22.2 350 1.1 3 -0.5 116.7 2010 72 Low Risk
12 Australia 2020 23.5 410 1.4 4 -0.7 102.5 2020 74 Medium Risk
13 China 2000 14.0 4000 1.0 5 -0.4 800.0 2000 57 Medium Risk
14 China 2010 15.8 6000 1.6 8 -0.9 750.0 2010 60 High Risk
15 China 2020 17.5 8000 2.2 10 -1.5 800.0 2020 64 High Risk

STEP 7: Visual Summary using PROC SGPLOT

/* Bar Chart of Emissions in 2020 */

proc sgplot data=Climate_Change;

    where Year=2020;

    title "CO2 Emissions by Country (2020)";

    vbar Country / response=CO2_Emissions_MT datalabel;

run;

Log:

NOTE: PROCEDURE SGPLOT used (Total process time):
      real time           3.04 seconds
      cpu time            0.56 seconds

NOTE: Listing image output written to SGPlot1.png.
NOTE: There were 5 observations read from the data set WORK.CLIMATE_CHANGE.
      WHERE Year=2020

/* Line Plot of Global Temperature Trend */

proc sgplot data=Climate_Change;

    title "Average Temperature Over Time by Country";

    series x=Year y=Avg_Temp_C / group=Country lineattrs=(thickness=2);

run;

Output:

NOTE: PROCEDURE SGPLOT used (Total process time):
      real time           0.76 seconds
      cpu time            0.06 seconds

NOTE: Listing image output written to SGPlot3.png.
NOTE: There were 15 observations read from the data set WORK.CLIMATE_CHANGE.

STEP 8: PROC TRANSPOSE to View Yearwise Trends

/* Transpose CO2 Emissions by Year for Comparison */

proc transpose data=Climate_Change out=Trans_CO2(drop=_name_) prefix=Year_;

    by Country notsorted;

    id Year;

    var CO2_Emissions_MT;

run;


proc print data=Trans_CO2 label;

    title "CO2 Emissions Comparison by Country (2000–2020)";

run;

Output:

CO2 Emissions Comparison by Country (2000–2020)

Obs Country Name LABEL OF FORMER VARIABLE Year_2000 Year_2010 Year_2020
1 India CO2 Emissions (Million Tonnes) 1050 1300 1550
2 USA CO2 Emissions (Million Tonnes) 5800 6000 6200
3 Brazil CO2 Emissions (Million Tonnes) 400 500 600
4 Australia CO2 Emissions (Million Tonnes) 300 350 410
5 China CO2 Emissions (Million Tonnes) 4000 6000 8000

STEP 9: Custom Macro to Compare Any Two Countries

%macro compare_countries(c1, c2);

    proc sql;

        title "Climate Comparison: &c1 vs &c2";

        select Year, Country, Avg_Temp_C, CO2_Emissions_MT, Disaster_Count

        from Climate_Change

        where Country in ("&c1", "&c2")

        order by Year, Country;

    quit;

%mend;


%compare_countries(India, USA);

Output:

Climate Comparison: India vs USA

Year Country Name Average Temperature
(°C)
CO2 Emissions
(Million Tonnes)
Number of Climate
Disasters
2000 India 25.5 1050 5
2000 USA 13.8 5800 4
2010 India 26.7 1300 7
2010 USA 14.4 6000 5
2020 India 27.4 1550 9
2020 USA 15.2 6200 7

%compare_countries(Brazil, China);

Output:

Climate Comparison: Brazil vs China

Year Country Name Average Temperature
(°C)
CO2 Emissions
(Million Tonnes)
Number of Climate
Disasters
2000 Brazil 22 400 3
2000 China 14 4000 5
2010 Brazil 23.1 500 4
2010 China 15.8 6000 8
2020 Brazil 24 600 6
2020 China 17.5 8000 10




To Visit My Previous E-Commerce Dataset:Click Here
To Visit My Previous Length,Input,Retain Statements:Click Here
To Visit My Previous Urban Traffic Dataset:Click Here
To Visit My Previous Home Energy Consumption Dataset:Click Here





--->PLEASE FOLLOW OUR BLOG FOR MORE INFORMATION.
--->PLEASE DO COMMENTS AND SHARE OUR BLOG.

PLEASE FOLLOW OUR TELEGRAM CHANNEL CLICK HERE

PLEASE FOLLOW OUR FACEBOOK PAGE  CLICK HERE

PLEASE FOLLOW OUR INSTAGRAM PAGE CLICK HERE






Comments