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
- Get link
- X
- Other Apps
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 |
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 |
Country Name | N Obs | Variable | Label | N | Mean | Minimum | Maximum | Std Dev | |||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Australia | 3 |
|
|
|
|
|
|
| |||||||||||||||||||||||||||||||||||
Brazil | 3 |
|
|
|
|
|
|
| |||||||||||||||||||||||||||||||||||
China | 3 |
|
|
|
|
|
|
| |||||||||||||||||||||||||||||||||||
India | 3 |
|
|
|
|
|
|
| |||||||||||||||||||||||||||||||||||
USA | 3 |
|
|
|
|
|
|
|
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:
/* 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:
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 |
- Get link
- X
- Other Apps
Comments
Post a Comment