375.What Happens When You Analyze Earthquakes with SAS?
What Happens When You Analyze Earthquakes with SAS?
1. Project Overview
Earthquakes are among the most destructive
natural disasters. Accurate data preparation, transformation, and analysis are
critical for risk assessment,
disaster management, and early warning systems.
This project simulates a global earthquake monitoring system, where
seismic events are recorded, processed, classified, and analyzed using Base SAS and Advanced SAS techniques.
Here We Learn:
·
How to design
a structured dataset
·
How to clean
and standardize textual data
·
How to work
with dates using MDY, INTNX, INTCK
·
How to apply
DATA step, PROC SQL, and statistical procedures
·
How to build
reusable SAS macros
·
How to reshape
data using TRANSPOSE
·
How to combine
datasets using SET, MERGE, APPEND
·
How to classify
seismic risk programmatically
·
How to visualize
seismic trends
·
How to copy
datasets across libraries
2. Dataset Design
Core Variables
|
Variable |
Description |
|
Earthquake_ID |
Unique identifier |
|
Country |
Affected country |
|
Magnitude |
Richter magnitude |
|
Depth_km |
Depth below earth surface |
|
Duration_Seconds |
Duration of shaking |
|
Damage_Level |
Low / Moderate / Severe |
|
Alert_Type |
Advisory / Watch / Warning |
|
Event_Date |
Earthquake occurrence date |
|
Report_Date |
Reporting date |
3. Creating the Earthquake Dataset (DATA Step)
data earthquakes_raw;
length Earthquake_ID $10 Country $20 Damage_Level $10 Alert_Type $10;
format Event_Date Report_Date date9.;
input Earthquake_ID $ Country $ Magnitude Depth_km Duration_Seconds Damage_Level $
Alert_Type $ Event_Date : date9. Report_Date : date9.;
datalines;
EQ001 india 6.5 15 45 Moderate Watch 01JAN2023 02JAN2023
EQ002 japan 7.8 30 70 Severe Warning 12FEB2023 13FEB2023
EQ003 chile 6.1 10 38 Moderate Advisory 20MAR2023 21MAR2023
EQ004 nepal 5.9 12 32 Low Advisory 05APR2023 06APR2023
EQ005 indonesia 7.2 25 65 Severe Warning 15MAY2023 16MAY2023
EQ006 turkey 6.8 18 55 Severe Warning 01JUN2023 02JUN2023
EQ007 usa 5.5 8 25 Low Advisory 10JUL2023 11JUL2023
EQ008 mexico 6.3 20 48 Moderate Watch 22AUG2023 23AUG2023
EQ009 italy 5.7 10 28 Low Advisory 03SEP2023 04SEP2023
EQ010 iran 6.9 22 60 Severe Warning 14OCT2023 15OCT2023
EQ011 peru 6.4 15 42 Moderate Watch 28NOV2023 29NOV2023
EQ012 china 7.5 35 80 Severe Warning 09DEC2023 10DEC2023
EQ013 greece 5.8 12 30 Low Advisory 02JAN2024 03JAN2024
EQ014 afghanistan 6.7 28 58 Severe Warning 18FEB2024 19FEB2024
EQ015 philippines 6.2 18 40 Moderate Watch 30MAR2024 31MAR2024
EQ016 newzealand 5.9 14 33 Low Advisory 15APR2024 16APR2024
;
run;
proc print data=earthquakes_raw;
run;
OUTPUT:
| Obs | Earthquake_ID | Country | Damage_Level | Alert_Type | Event_Date | Report_Date | Magnitude | Depth_km | Duration_Seconds |
|---|---|---|---|---|---|---|---|---|---|
| 1 | EQ001 | india | Moderate | Watch | 01JAN2023 | 02JAN2023 | 6.5 | 15 | 45 |
| 2 | EQ002 | japan | Severe | Warning | 12FEB2023 | 13FEB2023 | 7.8 | 30 | 70 |
| 3 | EQ003 | chile | Moderate | Advisory | 20MAR2023 | 21MAR2023 | 6.1 | 10 | 38 |
| 4 | EQ004 | nepal | Low | Advisory | 05APR2023 | 06APR2023 | 5.9 | 12 | 32 |
| 5 | EQ005 | indonesia | Severe | Warning | 15MAY2023 | 16MAY2023 | 7.2 | 25 | 65 |
| 6 | EQ006 | turkey | Severe | Warning | 01JUN2023 | 02JUN2023 | 6.8 | 18 | 55 |
| 7 | EQ007 | usa | Low | Advisory | 10JUL2023 | 11JUL2023 | 5.5 | 8 | 25 |
| 8 | EQ008 | mexico | Moderate | Watch | 22AUG2023 | 23AUG2023 | 6.3 | 20 | 48 |
| 9 | EQ009 | italy | Low | Advisory | 03SEP2023 | 04SEP2023 | 5.7 | 10 | 28 |
| 10 | EQ010 | iran | Severe | Warning | 14OCT2023 | 15OCT2023 | 6.9 | 22 | 60 |
| 11 | EQ011 | peru | Moderate | Watch | 28NOV2023 | 29NOV2023 | 6.4 | 15 | 42 |
| 12 | EQ012 | china | Severe | Warning | 09DEC2023 | 10DEC2023 | 7.5 | 35 | 80 |
| 13 | EQ013 | greece | Low | Advisory | 02JAN2024 | 03JAN2024 | 5.8 | 12 | 30 |
| 14 | EQ014 | afghanistan | Severe | Warning | 18FEB2024 | 19FEB2024 | 6.7 | 28 | 58 |
| 15 | EQ015 | philippines | Moderate | Watch | 30MAR2024 | 31MAR2024 | 6.2 | 18 | 40 |
| 16 | EQ016 | newzealand | Low | Advisory | 15APR2024 | 16APR2024 | 5.9 | 14 | 33 |
4. Data Cleaning & Standardization (Functions)
data earthquakes_clean;
set earthquakes_raw;
Country = propcase(lowcase(trim(Country)));
Alert_Type = upcase(compress(Alert_Type));
Damage_Level = propcase(Damage_Level);
Country_Code = substr(Country,1,3);
Event_Month = intnx('month', Event_Date, 0, 'b');
Days_To_Report = intck('day', Event_Date, Report_Date);
format Event_Month monyy7.;
label Days_To_Report = "Days between Event and Report";
run;
proc print data=earthquakes_clean;
run;
OUTPUT:
| Obs | Earthquake_ID | Country | Damage_Level | Alert_Type | Event_Date | Report_Date | Magnitude | Depth_km | Duration_Seconds | Country_Code | Event_Month | Days_To_Report |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | EQ001 | India | Moderate | WATCH | 01JAN2023 | 02JAN2023 | 6.5 | 15 | 45 | Ind | JAN2023 | 1 |
| 2 | EQ002 | Japan | Severe | WARNING | 12FEB2023 | 13FEB2023 | 7.8 | 30 | 70 | Jap | FEB2023 | 1 |
| 3 | EQ003 | Chile | Moderate | ADVISORY | 20MAR2023 | 21MAR2023 | 6.1 | 10 | 38 | Chi | MAR2023 | 1 |
| 4 | EQ004 | Nepal | Low | ADVISORY | 05APR2023 | 06APR2023 | 5.9 | 12 | 32 | Nep | APR2023 | 1 |
| 5 | EQ005 | Indonesia | Severe | WARNING | 15MAY2023 | 16MAY2023 | 7.2 | 25 | 65 | Ind | MAY2023 | 1 |
| 6 | EQ006 | Turkey | Severe | WARNING | 01JUN2023 | 02JUN2023 | 6.8 | 18 | 55 | Tur | JUN2023 | 1 |
| 7 | EQ007 | Usa | Low | ADVISORY | 10JUL2023 | 11JUL2023 | 5.5 | 8 | 25 | Usa | JUL2023 | 1 |
| 8 | EQ008 | Mexico | Moderate | WATCH | 22AUG2023 | 23AUG2023 | 6.3 | 20 | 48 | Mex | AUG2023 | 1 |
| 9 | EQ009 | Italy | Low | ADVISORY | 03SEP2023 | 04SEP2023 | 5.7 | 10 | 28 | Ita | SEP2023 | 1 |
| 10 | EQ010 | Iran | Severe | WARNING | 14OCT2023 | 15OCT2023 | 6.9 | 22 | 60 | Ira | OCT2023 | 1 |
| 11 | EQ011 | Peru | Moderate | WATCH | 28NOV2023 | 29NOV2023 | 6.4 | 15 | 42 | Per | NOV2023 | 1 |
| 12 | EQ012 | China | Severe | WARNING | 09DEC2023 | 10DEC2023 | 7.5 | 35 | 80 | Chi | DEC2023 | 1 |
| 13 | EQ013 | Greece | Low | ADVISORY | 02JAN2024 | 03JAN2024 | 5.8 | 12 | 30 | Gre | JAN2024 | 1 |
| 14 | EQ014 | Afghanistan | Severe | WARNING | 18FEB2024 | 19FEB2024 | 6.7 | 28 | 58 | Afg | FEB2024 | 1 |
| 15 | EQ015 | Philippines | Moderate | WATCH | 30MAR2024 | 31MAR2024 | 6.2 | 18 | 40 | Phi | MAR2024 | 1 |
| 16 | EQ016 | Newzealand | Low | ADVISORY | 15APR2024 | 16APR2024 | 5.9 | 14 | 33 | New | APR2024 | 1 |
5. Seismic Risk Classification (Macro)
%macro seismic_risk(input=, output=);
data &output;
set &input;
length Seismic_Risk $15;
if Magnitude >= 7 then Seismic_Risk = "High Risk";
else if Magnitude >= 6 then Seismic_Risk = "Moderate Risk";
else Seismic_Risk = "Low Risk";
run;
proc print data=&output;
run;
%mend;
%seismic_risk(input=earthquakes_clean, output=earthquakes_risk);
OUTPUT:
| Obs | Earthquake_ID | Country | Damage_Level | Alert_Type | Event_Date | Report_Date | Magnitude | Depth_km | Duration_Seconds | Country_Code | Event_Month | Days_To_Report | Seismic_Risk |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | EQ001 | India | Moderate | WATCH | 01JAN2023 | 02JAN2023 | 6.5 | 15 | 45 | Ind | JAN2023 | 1 | Moderate Risk |
| 2 | EQ002 | Japan | Severe | WARNING | 12FEB2023 | 13FEB2023 | 7.8 | 30 | 70 | Jap | FEB2023 | 1 | High Risk |
| 3 | EQ003 | Chile | Moderate | ADVISORY | 20MAR2023 | 21MAR2023 | 6.1 | 10 | 38 | Chi | MAR2023 | 1 | Moderate Risk |
| 4 | EQ004 | Nepal | Low | ADVISORY | 05APR2023 | 06APR2023 | 5.9 | 12 | 32 | Nep | APR2023 | 1 | Low Risk |
| 5 | EQ005 | Indonesia | Severe | WARNING | 15MAY2023 | 16MAY2023 | 7.2 | 25 | 65 | Ind | MAY2023 | 1 | High Risk |
| 6 | EQ006 | Turkey | Severe | WARNING | 01JUN2023 | 02JUN2023 | 6.8 | 18 | 55 | Tur | JUN2023 | 1 | Moderate Risk |
| 7 | EQ007 | Usa | Low | ADVISORY | 10JUL2023 | 11JUL2023 | 5.5 | 8 | 25 | Usa | JUL2023 | 1 | Low Risk |
| 8 | EQ008 | Mexico | Moderate | WATCH | 22AUG2023 | 23AUG2023 | 6.3 | 20 | 48 | Mex | AUG2023 | 1 | Moderate Risk |
| 9 | EQ009 | Italy | Low | ADVISORY | 03SEP2023 | 04SEP2023 | 5.7 | 10 | 28 | Ita | SEP2023 | 1 | Low Risk |
| 10 | EQ010 | Iran | Severe | WARNING | 14OCT2023 | 15OCT2023 | 6.9 | 22 | 60 | Ira | OCT2023 | 1 | Moderate Risk |
| 11 | EQ011 | Peru | Moderate | WATCH | 28NOV2023 | 29NOV2023 | 6.4 | 15 | 42 | Per | NOV2023 | 1 | Moderate Risk |
| 12 | EQ012 | China | Severe | WARNING | 09DEC2023 | 10DEC2023 | 7.5 | 35 | 80 | Chi | DEC2023 | 1 | High Risk |
| 13 | EQ013 | Greece | Low | ADVISORY | 02JAN2024 | 03JAN2024 | 5.8 | 12 | 30 | Gre | JAN2024 | 1 | Low Risk |
| 14 | EQ014 | Afghanistan | Severe | WARNING | 18FEB2024 | 19FEB2024 | 6.7 | 28 | 58 | Afg | FEB2024 | 1 | Moderate Risk |
| 15 | EQ015 | Philippines | Moderate | WATCH | 30MAR2024 | 31MAR2024 | 6.2 | 18 | 40 | Phi | MAR2024 | 1 | Moderate Risk |
| 16 | EQ016 | Newzealand | Low | ADVISORY | 15APR2024 | 16APR2024 | 5.9 | 14 | 33 | New | APR2024 | 1 | Low Risk |
6. PROC SQL Analysis
proc sql;
create table country_summary as
select Country,
count(*) as Total_Events,
avg(Magnitude) as Avg_Magnitude format=5.2,
avg(Depth_km) as Avg_Depth format=6.2
from earthquakes_risk
group by Country;
quit;
proc print data=country_summary;
run;
OUTPUT:
| Obs | Country | Total_Events | Avg_Magnitude | Avg_Depth |
|---|---|---|---|---|
| 1 | Afghanistan | 1 | 6.70 | 28.00 |
| 2 | Chile | 1 | 6.10 | 10.00 |
| 3 | China | 1 | 7.50 | 35.00 |
| 4 | Greece | 1 | 5.80 | 12.00 |
| 5 | India | 1 | 6.50 | 15.00 |
| 6 | Indonesia | 1 | 7.20 | 25.00 |
| 7 | Iran | 1 | 6.90 | 22.00 |
| 8 | Italy | 1 | 5.70 | 10.00 |
| 9 | Japan | 1 | 7.80 | 30.00 |
| 10 | Mexico | 1 | 6.30 | 20.00 |
| 11 | Nepal | 1 | 5.90 | 12.00 |
| 12 | Newzealand | 1 | 5.90 | 14.00 |
| 13 | Peru | 1 | 6.40 | 15.00 |
| 14 | Philippines | 1 | 6.20 | 18.00 |
| 15 | Turkey | 1 | 6.80 | 18.00 |
| 16 | Usa | 1 | 5.50 | 8.00 |
7. Statistical Analysis – PROC MEANS
proc means data=earthquakes_risk mean min max std;
class Seismic_Risk;
var Magnitude Depth_km Duration_Seconds Days_To_Report;
run;
OUTPUT:
The MEANS Procedure
| Seismic_Risk | N Obs | Variable | Label | Mean | Minimum | Maximum | Std Dev |
|---|---|---|---|---|---|---|---|
| High Risk | 3 | Magnitude Depth_km Duration_Seconds Days_To_Report | Days between Event and Report | 7.5000000 30.0000000 71.6666667 1.0000000 | 7.2000000 25.0000000 65.0000000 1.0000000 | 7.8000000 35.0000000 80.0000000 1.0000000 | 0.3000000 5.0000000 7.6376262 0 |
| Low Risk | 5 | Magnitude Depth_km Duration_Seconds Days_To_Report | Days between Event and Report | 5.7600000 11.2000000 29.6000000 1.0000000 | 5.5000000 8.0000000 25.0000000 1.0000000 | 5.9000000 14.0000000 33.0000000 1.0000000 | 0.1673320 2.2803509 3.2093613 0 |
| Moderate Risk | 8 | Magnitude Depth_km Duration_Seconds Days_To_Report | Days between Event and Report | 6.4875000 18.2500000 48.2500000 1.0000000 | 6.1000000 10.0000000 38.0000000 1.0000000 | 6.9000000 28.0000000 60.0000000 1.0000000 | 0.2900123 5.3652320 8.4642104 0 |
8. Distribution Analysis – PROC UNIVARIATE
proc univariate data=earthquakes_risk;
var Magnitude;
histogram Magnitude;
run;
OUTPUT:
The UNIVARIATE Procedure
Variable: Magnitude
| Moments | |||
|---|---|---|---|
| N | 16 | Sum Weights | 16 |
| Mean | 6.45 | Sum Observations | 103.2 |
| Std Deviation | 0.66231916 | Variance | 0.43866667 |
| Skewness | 0.58767957 | Kurtosis | -0.3820146 |
| Uncorrected SS | 672.22 | Corrected SS | 6.58 |
| Coeff Variation | 10.2685141 | Std Error Mean | 0.16557979 |
| Basic Statistical Measures | |||
|---|---|---|---|
| Location | Variability | ||
| Mean | 6.450000 | Std Deviation | 0.66232 |
| Median | 6.350000 | Variance | 0.43867 |
| Mode | 5.900000 | Range | 2.30000 |
| Interquartile Range | 0.95000 | ||
| Tests for Location: Mu0=0 | ||||
|---|---|---|---|---|
| Test | Statistic | p Value | ||
| Student's t | t | 38.95403 | Pr > |t| | <.0001 |
| Sign | M | 8 | Pr >= |M| | <.0001 |
| Signed Rank | S | 68 | Pr >= |S| | <.0001 |
| Quantiles (Definition 5) | |
|---|---|
| Level | Quantile |
| 100% Max | 7.80 |
| 99% | 7.80 |
| 95% | 7.80 |
| 90% | 7.50 |
| 75% Q3 | 6.85 |
| 50% Median | 6.35 |
| 25% Q1 | 5.90 |
| 10% | 5.70 |
| 5% | 5.50 |
| 1% | 5.50 |
| 0% Min | 5.50 |
| Extreme Observations | |||
|---|---|---|---|
| Lowest | Highest | ||
| Value | Obs | Value | Obs |
| 5.5 | 7 | 6.8 | 6 |
| 5.7 | 9 | 6.9 | 10 |
| 5.8 | 13 | 7.2 | 5 |
| 5.9 | 16 | 7.5 | 12 |
| 5.9 | 4 | 7.8 | 2 |
The UNIVARIATE Procedure
9. Visualization – PROC SGPLOT
proc sgplot data=earthquakes_risk;
scatter x=Depth_km y=Magnitude / group=Seismic_Risk;
title "Earthquake Magnitude vs Depth by Seismic Risk";
run;
OUTPUT:
10. Data Reshaping – PROC TRANSPOSE
proc transpose data=country_summary out=country_transposed;
by Country;
var Avg_Magnitude Avg_Depth;
run;
proc print data=country_transposed;
run;
OUTPUT:
| Obs | Country | _NAME_ | COL1 |
|---|---|---|---|
| 1 | Afghanistan | Avg_Magnitude | 6.7 |
| 2 | Afghanistan | Avg_Depth | 28.0 |
| 3 | Chile | Avg_Magnitude | 6.1 |
| 4 | Chile | Avg_Depth | 10.0 |
| 5 | China | Avg_Magnitude | 7.5 |
| 6 | China | Avg_Depth | 35.0 |
| 7 | Greece | Avg_Magnitude | 5.8 |
| 8 | Greece | Avg_Depth | 12.0 |
| 9 | India | Avg_Magnitude | 6.5 |
| 10 | India | Avg_Depth | 15.0 |
| 11 | Indonesia | Avg_Magnitude | 7.2 |
| 12 | Indonesia | Avg_Depth | 25.0 |
| 13 | Iran | Avg_Magnitude | 6.9 |
| 14 | Iran | Avg_Depth | 22.0 |
| 15 | Italy | Avg_Magnitude | 5.7 |
| 16 | Italy | Avg_Depth | 10.0 |
| 17 | Japan | Avg_Magnitude | 7.8 |
| 18 | Japan | Avg_Depth | 30.0 |
| 19 | Mexico | Avg_Magnitude | 6.3 |
| 20 | Mexico | Avg_Depth | 20.0 |
| 21 | Nepal | Avg_Magnitude | 5.9 |
| 22 | Nepal | Avg_Depth | 12.0 |
| 23 | Newzealand | Avg_Magnitude | 5.9 |
| 24 | Newzealand | Avg_Depth | 14.0 |
| 25 | Peru | Avg_Magnitude | 6.4 |
| 26 | Peru | Avg_Depth | 15.0 |
| 27 | Philippines | Avg_Magnitude | 6.2 |
| 28 | Philippines | Avg_Depth | 18.0 |
| 29 | Turkey | Avg_Magnitude | 6.8 |
| 30 | Turkey | Avg_Depth | 18.0 |
| 31 | Usa | Avg_Magnitude | 5.5 |
| 32 | Usa | Avg_Depth | 8.0 |
11.Create a new dataset
data earthquakes_new;
set earthquakes_risk;
where Event_Date >= '01JAN2024'd;
run;
proc print data=earthquakes_new;
run;
OUTPUT:
| Obs | Earthquake_ID | Country | Damage_Level | Alert_Type | Event_Date | Report_Date | Magnitude | Depth_km | Duration_Seconds | Country_Code | Event_Month | Days_To_Report | Seismic_Risk |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | EQ013 | Greece | Low | ADVISORY | 02JAN2024 | 03JAN2024 | 5.8 | 12 | 30 | Gre | JAN2024 | 1 | Low Risk |
| 2 | EQ014 | Afghanistan | Severe | WARNING | 18FEB2024 | 19FEB2024 | 6.7 | 28 | 58 | Afg | FEB2024 | 1 | Moderate Risk |
| 3 | EQ015 | Philippines | Moderate | WATCH | 30MAR2024 | 31MAR2024 | 6.2 | 18 | 40 | Phi | MAR2024 | 1 | Moderate Risk |
| 4 | EQ016 | Newzealand | Low | ADVISORY | 15APR2024 | 16APR2024 | 5.9 | 14 | 33 | New | APR2024 | 1 | Low Risk |
12. Dataset Combination Techniques
SET
data combined_events;
set earthquakes_risk
earthquakes_new;
run;
proc print data=country_transposed;
run;
OUTPUT:
| Obs | Country | _NAME_ | COL1 |
|---|---|---|---|
| 1 | Afghanistan | Avg_Magnitude | 6.7 |
| 2 | Afghanistan | Avg_Depth | 28.0 |
| 3 | Chile | Avg_Magnitude | 6.1 |
| 4 | Chile | Avg_Depth | 10.0 |
| 5 | China | Avg_Magnitude | 7.5 |
| 6 | China | Avg_Depth | 35.0 |
| 7 | Greece | Avg_Magnitude | 5.8 |
| 8 | Greece | Avg_Depth | 12.0 |
| 9 | India | Avg_Magnitude | 6.5 |
| 10 | India | Avg_Depth | 15.0 |
| 11 | Indonesia | Avg_Magnitude | 7.2 |
| 12 | Indonesia | Avg_Depth | 25.0 |
| 13 | Iran | Avg_Magnitude | 6.9 |
| 14 | Iran | Avg_Depth | 22.0 |
| 15 | Italy | Avg_Magnitude | 5.7 |
| 16 | Italy | Avg_Depth | 10.0 |
| 17 | Japan | Avg_Magnitude | 7.8 |
| 18 | Japan | Avg_Depth | 30.0 |
| 19 | Mexico | Avg_Magnitude | 6.3 |
| 20 | Mexico | Avg_Depth | 20.0 |
| 21 | Nepal | Avg_Magnitude | 5.9 |
| 22 | Nepal | Avg_Depth | 12.0 |
| 23 | Newzealand | Avg_Magnitude | 5.9 |
| 24 | Newzealand | Avg_Depth | 14.0 |
| 25 | Peru | Avg_Magnitude | 6.4 |
| 26 | Peru | Avg_Depth | 15.0 |
| 27 | Philippines | Avg_Magnitude | 6.2 |
| 28 | Philippines | Avg_Depth | 18.0 |
| 29 | Turkey | Avg_Magnitude | 6.8 |
| 30 | Turkey | Avg_Depth | 18.0 |
| 31 | Usa | Avg_Magnitude | 5.5 |
| 32 | Usa | Avg_Depth | 8.0 |
APPEND
proc append base=earthquakes_risk
data=earthquakes_new;
run;
proc print data=earthquakes_risk;
run;
OUTPUT:
| Obs | Earthquake_ID | Country | Damage_Level | Alert_Type | Event_Date | Report_Date | Magnitude | Depth_km | Duration_Seconds | Country_Code | Event_Month | Days_To_Report | Seismic_Risk |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | EQ001 | India | Moderate | WATCH | 01JAN2023 | 02JAN2023 | 6.5 | 15 | 45 | Ind | JAN2023 | 1 | Moderate Risk |
| 2 | EQ002 | Japan | Severe | WARNING | 12FEB2023 | 13FEB2023 | 7.8 | 30 | 70 | Jap | FEB2023 | 1 | High Risk |
| 3 | EQ003 | Chile | Moderate | ADVISORY | 20MAR2023 | 21MAR2023 | 6.1 | 10 | 38 | Chi | MAR2023 | 1 | Moderate Risk |
| 4 | EQ004 | Nepal | Low | ADVISORY | 05APR2023 | 06APR2023 | 5.9 | 12 | 32 | Nep | APR2023 | 1 | Low Risk |
| 5 | EQ005 | Indonesia | Severe | WARNING | 15MAY2023 | 16MAY2023 | 7.2 | 25 | 65 | Ind | MAY2023 | 1 | High Risk |
| 6 | EQ006 | Turkey | Severe | WARNING | 01JUN2023 | 02JUN2023 | 6.8 | 18 | 55 | Tur | JUN2023 | 1 | Moderate Risk |
| 7 | EQ007 | Usa | Low | ADVISORY | 10JUL2023 | 11JUL2023 | 5.5 | 8 | 25 | Usa | JUL2023 | 1 | Low Risk |
| 8 | EQ008 | Mexico | Moderate | WATCH | 22AUG2023 | 23AUG2023 | 6.3 | 20 | 48 | Mex | AUG2023 | 1 | Moderate Risk |
| 9 | EQ009 | Italy | Low | ADVISORY | 03SEP2023 | 04SEP2023 | 5.7 | 10 | 28 | Ita | SEP2023 | 1 | Low Risk |
| 10 | EQ010 | Iran | Severe | WARNING | 14OCT2023 | 15OCT2023 | 6.9 | 22 | 60 | Ira | OCT2023 | 1 | Moderate Risk |
| 11 | EQ011 | Peru | Moderate | WATCH | 28NOV2023 | 29NOV2023 | 6.4 | 15 | 42 | Per | NOV2023 | 1 | Moderate Risk |
| 12 | EQ012 | China | Severe | WARNING | 09DEC2023 | 10DEC2023 | 7.5 | 35 | 80 | Chi | DEC2023 | 1 | High Risk |
| 13 | EQ013 | Greece | Low | ADVISORY | 02JAN2024 | 03JAN2024 | 5.8 | 12 | 30 | Gre | JAN2024 | 1 | Low Risk |
| 14 | EQ014 | Afghanistan | Severe | WARNING | 18FEB2024 | 19FEB2024 | 6.7 | 28 | 58 | Afg | FEB2024 | 1 | Moderate Risk |
| 15 | EQ015 | Philippines | Moderate | WATCH | 30MAR2024 | 31MAR2024 | 6.2 | 18 | 40 | Phi | MAR2024 | 1 | Moderate Risk |
| 16 | EQ016 | Newzealand | Low | ADVISORY | 15APR2024 | 16APR2024 | 5.9 | 14 | 33 | New | APR2024 | 1 | Low Risk |
| 17 | EQ013 | Greece | Low | ADVISORY | 02JAN2024 | 03JAN2024 | 5.8 | 12 | 30 | Gre | JAN2024 | 1 | Low Risk |
| 18 | EQ014 | Afghanistan | Severe | WARNING | 18FEB2024 | 19FEB2024 | 6.7 | 28 | 58 | Afg | FEB2024 | 1 | Moderate Risk |
| 19 | EQ015 | Philippines | Moderate | WATCH | 30MAR2024 | 31MAR2024 | 6.2 | 18 | 40 | Phi | MAR2024 | 1 | Moderate Risk |
| 20 | EQ016 | Newzealand | Low | ADVISORY | 15APR2024 | 16APR2024 | 5.9 | 14 | 33 | New | APR2024 | 1 | Low Risk |
MERGE
proc sort data=earthquakes_risk; by Country; run;
proc print data=earthquakes_risk;
run;
OUTPUT:
| Obs | Earthquake_ID | Country | Damage_Level | Alert_Type | Event_Date | Report_Date | Magnitude | Depth_km | Duration_Seconds | Country_Code | Event_Month | Days_To_Report | Seismic_Risk |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | EQ014 | Afghanistan | Severe | WARNING | 18FEB2024 | 19FEB2024 | 6.7 | 28 | 58 | Afg | FEB2024 | 1 | Moderate Risk |
| 2 | EQ014 | Afghanistan | Severe | WARNING | 18FEB2024 | 19FEB2024 | 6.7 | 28 | 58 | Afg | FEB2024 | 1 | Moderate Risk |
| 3 | EQ003 | Chile | Moderate | ADVISORY | 20MAR2023 | 21MAR2023 | 6.1 | 10 | 38 | Chi | MAR2023 | 1 | Moderate Risk |
| 4 | EQ012 | China | Severe | WARNING | 09DEC2023 | 10DEC2023 | 7.5 | 35 | 80 | Chi | DEC2023 | 1 | High Risk |
| 5 | EQ013 | Greece | Low | ADVISORY | 02JAN2024 | 03JAN2024 | 5.8 | 12 | 30 | Gre | JAN2024 | 1 | Low Risk |
| 6 | EQ013 | Greece | Low | ADVISORY | 02JAN2024 | 03JAN2024 | 5.8 | 12 | 30 | Gre | JAN2024 | 1 | Low Risk |
| 7 | EQ001 | India | Moderate | WATCH | 01JAN2023 | 02JAN2023 | 6.5 | 15 | 45 | Ind | JAN2023 | 1 | Moderate Risk |
| 8 | EQ005 | Indonesia | Severe | WARNING | 15MAY2023 | 16MAY2023 | 7.2 | 25 | 65 | Ind | MAY2023 | 1 | High Risk |
| 9 | EQ010 | Iran | Severe | WARNING | 14OCT2023 | 15OCT2023 | 6.9 | 22 | 60 | Ira | OCT2023 | 1 | Moderate Risk |
| 10 | EQ009 | Italy | Low | ADVISORY | 03SEP2023 | 04SEP2023 | 5.7 | 10 | 28 | Ita | SEP2023 | 1 | Low Risk |
| 11 | EQ002 | Japan | Severe | WARNING | 12FEB2023 | 13FEB2023 | 7.8 | 30 | 70 | Jap | FEB2023 | 1 | High Risk |
| 12 | EQ008 | Mexico | Moderate | WATCH | 22AUG2023 | 23AUG2023 | 6.3 | 20 | 48 | Mex | AUG2023 | 1 | Moderate Risk |
| 13 | EQ004 | Nepal | Low | ADVISORY | 05APR2023 | 06APR2023 | 5.9 | 12 | 32 | Nep | APR2023 | 1 | Low Risk |
| 14 | EQ016 | Newzealand | Low | ADVISORY | 15APR2024 | 16APR2024 | 5.9 | 14 | 33 | New | APR2024 | 1 | Low Risk |
| 15 | EQ016 | Newzealand | Low | ADVISORY | 15APR2024 | 16APR2024 | 5.9 | 14 | 33 | New | APR2024 | 1 | Low Risk |
| 16 | EQ011 | Peru | Moderate | WATCH | 28NOV2023 | 29NOV2023 | 6.4 | 15 | 42 | Per | NOV2023 | 1 | Moderate Risk |
| 17 | EQ015 | Philippines | Moderate | WATCH | 30MAR2024 | 31MAR2024 | 6.2 | 18 | 40 | Phi | MAR2024 | 1 | Moderate Risk |
| 18 | EQ015 | Philippines | Moderate | WATCH | 30MAR2024 | 31MAR2024 | 6.2 | 18 | 40 | Phi | MAR2024 | 1 | Moderate Risk |
| 19 | EQ006 | Turkey | Severe | WARNING | 01JUN2023 | 02JUN2023 | 6.8 | 18 | 55 | Tur | JUN2023 | 1 | Moderate Risk |
| 20 | EQ007 | Usa | Low | ADVISORY | 10JUL2023 | 11JUL2023 | 5.5 | 8 | 25 | Usa | JUL2023 | 1 | Low Risk |
proc sort data=country_summary; by Country; run;
proc print data=country_summary;
run;
OUTPUT:
| Obs | Country | Total_Events | Avg_Magnitude | Avg_Depth |
|---|---|---|---|---|
| 1 | Afghanistan | 1 | 6.70 | 28.00 |
| 2 | Chile | 1 | 6.10 | 10.00 |
| 3 | China | 1 | 7.50 | 35.00 |
| 4 | Greece | 1 | 5.80 | 12.00 |
| 5 | India | 1 | 6.50 | 15.00 |
| 6 | Indonesia | 1 | 7.20 | 25.00 |
| 7 | Iran | 1 | 6.90 | 22.00 |
| 8 | Italy | 1 | 5.70 | 10.00 |
| 9 | Japan | 1 | 7.80 | 30.00 |
| 10 | Mexico | 1 | 6.30 | 20.00 |
| 11 | Nepal | 1 | 5.90 | 12.00 |
| 12 | Newzealand | 1 | 5.90 | 14.00 |
| 13 | Peru | 1 | 6.40 | 15.00 |
| 14 | Philippines | 1 | 6.20 | 18.00 |
| 15 | Turkey | 1 | 6.80 | 18.00 |
| 16 | Usa | 1 | 5.50 | 8.00 |
data merged_data;
merge earthquakes_risk
country_summary;
by Country;
run;
proc print data=merged_data;
run;
OUTPUT:
| Obs | Earthquake_ID | Country | Damage_Level | Alert_Type | Event_Date | Report_Date | Magnitude | Depth_km | Duration_Seconds | Country_Code | Event_Month | Days_To_Report | Seismic_Risk | Total_Events | Avg_Magnitude | Avg_Depth |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | EQ014 | Afghanistan | Severe | WARNING | 18FEB2024 | 19FEB2024 | 6.7 | 28 | 58 | Afg | FEB2024 | 1 | Moderate Risk | 1 | 6.70 | 28.00 |
| 2 | EQ014 | Afghanistan | Severe | WARNING | 18FEB2024 | 19FEB2024 | 6.7 | 28 | 58 | Afg | FEB2024 | 1 | Moderate Risk | 1 | 6.70 | 28.00 |
| 3 | EQ003 | Chile | Moderate | ADVISORY | 20MAR2023 | 21MAR2023 | 6.1 | 10 | 38 | Chi | MAR2023 | 1 | Moderate Risk | 1 | 6.10 | 10.00 |
| 4 | EQ012 | China | Severe | WARNING | 09DEC2023 | 10DEC2023 | 7.5 | 35 | 80 | Chi | DEC2023 | 1 | High Risk | 1 | 7.50 | 35.00 |
| 5 | EQ013 | Greece | Low | ADVISORY | 02JAN2024 | 03JAN2024 | 5.8 | 12 | 30 | Gre | JAN2024 | 1 | Low Risk | 1 | 5.80 | 12.00 |
| 6 | EQ013 | Greece | Low | ADVISORY | 02JAN2024 | 03JAN2024 | 5.8 | 12 | 30 | Gre | JAN2024 | 1 | Low Risk | 1 | 5.80 | 12.00 |
| 7 | EQ001 | India | Moderate | WATCH | 01JAN2023 | 02JAN2023 | 6.5 | 15 | 45 | Ind | JAN2023 | 1 | Moderate Risk | 1 | 6.50 | 15.00 |
| 8 | EQ005 | Indonesia | Severe | WARNING | 15MAY2023 | 16MAY2023 | 7.2 | 25 | 65 | Ind | MAY2023 | 1 | High Risk | 1 | 7.20 | 25.00 |
| 9 | EQ010 | Iran | Severe | WARNING | 14OCT2023 | 15OCT2023 | 6.9 | 22 | 60 | Ira | OCT2023 | 1 | Moderate Risk | 1 | 6.90 | 22.00 |
| 10 | EQ009 | Italy | Low | ADVISORY | 03SEP2023 | 04SEP2023 | 5.7 | 10 | 28 | Ita | SEP2023 | 1 | Low Risk | 1 | 5.70 | 10.00 |
| 11 | EQ002 | Japan | Severe | WARNING | 12FEB2023 | 13FEB2023 | 7.8 | 30 | 70 | Jap | FEB2023 | 1 | High Risk | 1 | 7.80 | 30.00 |
| 12 | EQ008 | Mexico | Moderate | WATCH | 22AUG2023 | 23AUG2023 | 6.3 | 20 | 48 | Mex | AUG2023 | 1 | Moderate Risk | 1 | 6.30 | 20.00 |
| 13 | EQ004 | Nepal | Low | ADVISORY | 05APR2023 | 06APR2023 | 5.9 | 12 | 32 | Nep | APR2023 | 1 | Low Risk | 1 | 5.90 | 12.00 |
| 14 | EQ016 | Newzealand | Low | ADVISORY | 15APR2024 | 16APR2024 | 5.9 | 14 | 33 | New | APR2024 | 1 | Low Risk | 1 | 5.90 | 14.00 |
| 15 | EQ016 | Newzealand | Low | ADVISORY | 15APR2024 | 16APR2024 | 5.9 | 14 | 33 | New | APR2024 | 1 | Low Risk | 1 | 5.90 | 14.00 |
| 16 | EQ011 | Peru | Moderate | WATCH | 28NOV2023 | 29NOV2023 | 6.4 | 15 | 42 | Per | NOV2023 | 1 | Moderate Risk | 1 | 6.40 | 15.00 |
| 17 | EQ015 | Philippines | Moderate | WATCH | 30MAR2024 | 31MAR2024 | 6.2 | 18 | 40 | Phi | MAR2024 | 1 | Moderate Risk | 1 | 6.20 | 18.00 |
| 18 | EQ015 | Philippines | Moderate | WATCH | 30MAR2024 | 31MAR2024 | 6.2 | 18 | 40 | Phi | MAR2024 | 1 | Moderate Risk | 1 | 6.20 | 18.00 |
| 19 | EQ006 | Turkey | Severe | WARNING | 01JUN2023 | 02JUN2023 | 6.8 | 18 | 55 | Tur | JUN2023 | 1 | Moderate Risk | 1 | 6.80 | 18.00 |
| 20 | EQ007 | Usa | Low | ADVISORY | 10JUL2023 | 11JUL2023 | 5.5 | 8 | 25 | Usa | JUL2023 | 1 | Low Risk | 1 | 5.50 | 8.00 |
13. PROC COPY (Library Management)
libname backup "path";
LOG:
NOTE: Libref BACKUP was successfully assigned as follows:
proc copy in=work out=backup;
select earthquakes_risk country_summary;
run;
LOG:
14.Delete Specific Datasets
proc datasets library=backup nolist;
delete earthquakes_risk country_summary;
quit;
LOG:
15. What We Are Learning (Interview Perspective)
Here demonstrating:
·
Real-world
dataset modeling
·
Production-quality
DATA step programming
·
Advanced
function usage
·
Macro-driven
classification
·
Statistical
interpretation
·
Visualization
competency
·
Enterprise
dataset movement
·
Strong
foundation for disaster analytics roles
16. Practical Use Cases
·
Government disaster response units
·
Early warning systems
·
Insurance risk modeling
·
Urban infrastructure planning
·
Research and academic studies
17. Why This Project Is Strong for Interviews
Interviewers immediately see:
·
Logical thinking
·
Data engineering skills
·
Statistical understanding
·
Automation capability
·
Clean, readable, maintainable SAS code
18. Conclusion
This Global
Earthquake Analytics SAS Project is a complete, professional, interview-ready solution that
integrates DATA step mastery, PROC SQL,
statistical procedures, macros, date intelligence, and visualization.
If you can explain and write this level of SAS code, you are well above entry-level and moving
confidently toward mid-to-senior SAS
programmer roles.
About the Author:
SAS Learning Hub is a data analytics and SAS programming platform focused on clinical, financial, and real-world data analysis. The content is created by professionals with academic training in Pharmaceutics and hands-on experience in Base SAS, PROC SQL, Macros, SDTM, and ADaM, providing practical and industry-relevant SAS learning resources.
Disclaimer:
The datasets and analysis in this article are created for educational and demonstration purposes only. They do not represent real EarthQuake data.
Our Mission:
This blog provides industry-focused SAS programming tutorials and analytics projects covering finance, healthcare, and technology.
This project is suitable for:
SAS Programmer Interviews
SAS Programmer Job Seekers
SAS Analysts
Comments
Post a Comment