Monday, 12 January 2026

368.GLOBAL NATURAL DISASTER IMPACT DATA ANALYSIS USING SAS | PROC SQL | PROC MEANS | PROC UNIVARIATE | PROC SGPLOT | PROC TRANSPOSE | PROC APPEND | MACROS | DATE FUNCTIONS (INTCK-INTNX-MDY) | MERGE | SET

GLOBAL NATURAL DISASTER IMPACT DATA ANALYSIS USING SAS | PROC SQL | PROC MEANS | PROC UNIVARIATE | PROC SGPLOT | PROC TRANSPOSE | PROC APPEND | MACROS | DATE FUNCTIONS (INTCK-INTNX-MDY) | MERGE | SET

 options nocenter;

1. DATASET CREATION

data disasters_raw;

    format Disaster_Date Recovery_Date date9.;

    input Disaster_ID Disaster_Type:$12. Country $ Casualties Cost_Million Severity

          Disaster_Date : date9. Recovery_Date : date9.;

    datalines;

1 Earthquake India 8500 4200 9 01JAN2023 01JAN2024

2 Flood India 1200 1100 6 10FEB2023 10AUG2023

3 Cyclone USA 950 2200 7 05MAR2023 05DEC2023

4 Wildfire Australia 600 1800 8 12APR2023 12JAN2024

5 Drought Kenya 2000 950 5 01MAY2023 01MAY2024

6 Tsunami Japan 12000 9000 10 15JUN2023 15JUN2024

7 Landslide Nepal 450 600 6 20JUL2023 20NOV2023

8 Flood China 5000 3500 8 02AUG2023 02FEB2024

9 Hurricane Mexico 1100 2400 7 15SEP2023 15MAR2024

10 Earthquake Turkey 10000 7500 9 10OCT2023 10OCT2024

11 Tornado USA 300 400 4 01NOV2023 01FEB2024

12 Wildfire Canada 800 1500 7 15NOV2023 15MAY2024

13 Flood Bangladesh 4000 2800 8 01DEC2023 01JUN2024

14 Volcano Indonesia 600 1200 6 15DEC2023 15JUL2024

15 Drought Ethiopia 2500 1300 5 01JAN2024 01JAN2025

;

run;

proc print data=disasters_raw;

run;

OUTPUT:

ObsDisaster_DateRecovery_DateDisaster_IDDisaster_TypeCountryCasualtiesCost_MillionSeverity
101JAN202301JAN20241EarthquakeIndia850042009
210FEB202310AUG20232FloodIndia120011006
305MAR202305DEC20233CycloneUSA95022007
412APR202312JAN20244WildfireAustrali60018008
501MAY202301MAY20245DroughtKenya20009505
615JUN202315JUN20246TsunamiJapan12000900010
720JUL202320NOV20237LandslideNepal4506006
802AUG202302FEB20248FloodChina500035008
915SEP202315MAR20249HurricaneMexico110024007
1010OCT202310OCT202410EarthquakeTurkey1000075009
1101NOV202301FEB202411TornadoUSA3004004
1215NOV202315MAY202412WildfireCanada80015007
1301DEC202301JUN202413FloodBanglade400028008
1415DEC202315JUL202414VolcanoIndonesi60012006
1501JAN202401JAN202515DroughtEthiopia250013005

Why These Variables Matter:

Variable

Why it is needed

Disaster_Type

Groups risk types (earthquake vs flood vs wildfire)

Country

Regional impact analysis

Casualties

Human loss measurement

Cost_Million

Economic impact

Severity

Disaster strength

Recovery_Time

Rehabilitation burden

Risk_Level

Derived macro-driven classification

 

2. DATE HANDLING — INTCK, INTNX, MDY

data disasters_dates;

    set disasters_raw;

    Recovery_Time = intck('month', Disaster_Date, Recovery_Date);

    Next_Review = intnx('month', Disaster_Date, 3);

    format Next_Review date9.;

run;

proc print data=disasters_dates;

run;

OUTPUT:

ObsDisaster_DateRecovery_DateDisaster_IDDisaster_TypeCountryCasualtiesCost_MillionSeverityRecovery_TimeNext_Review
101JAN202301JAN20241EarthquakeIndia8500420091201APR2023
210FEB202310AUG20232FloodIndia120011006601MAY2023
305MAR202305DEC20233CycloneUSA95022007901JUN2023
412APR202312JAN20244WildfireAustrali60018008901JUL2023
501MAY202301MAY20245DroughtKenya200095051201AUG2023
615JUN202315JUN20246TsunamiJapan120009000101201SEP2023
720JUL202320NOV20237LandslideNepal4506006401OCT2023
802AUG202302FEB20248FloodChina500035008601NOV2023
915SEP202315MAR20249HurricaneMexico110024007601DEC2023
1010OCT202310OCT202410EarthquakeTurkey10000750091201JAN2024
1101NOV202301FEB202411TornadoUSA3004004301FEB2024
1215NOV202315MAY202412WildfireCanada80015007601FEB2024
1301DEC202301JUN202413FloodBanglade400028008601MAR2024
1415DEC202315JUL202414VolcanoIndonesi60012006701MAR2024
1501JAN202401JAN202515DroughtEthiopia2500130051201APR2024

Why INTCK,INTNX,MDY Used:

In disaster analytics, time is as critical as cost.

·       INTCK → how long did rebuilding take

·       INTNX → future review scheduling

·       MDY → standardized disaster dating

This mimics how clinical trials use RFSTDTC, RFENDTC, AVAL dates.


3. MACRO – SEVERITY CLASSIFICATION

%macro classify_severity;

data disasters_classified;

    length Risk_Level $9.;

    set disasters_dates;

    if Severity >= 9 then Risk_Level = "EXTREME";

    else if Severity >= 7 then Risk_Level = "HIGH";

    else if Severity >= 5 then Risk_Level = "MODERATE";

    else Risk_Level = "LOW";

run;

proc print data=disasters_classified;

run;

%mend;


%classify_severity;

OUTPUT:

ObsRisk_LevelDisaster_DateRecovery_DateDisaster_IDDisaster_TypeCountryCasualtiesCost_MillionSeverityRecovery_TimeNext_Review
1EXTREME01JAN202301JAN20241EarthquakeIndia8500420091201APR2023
2MODERATE10FEB202310AUG20232FloodIndia120011006601MAY2023
3HIGH05MAR202305DEC20233CycloneUSA95022007901JUN2023
4HIGH12APR202312JAN20244WildfireAustrali60018008901JUL2023
5MODERATE01MAY202301MAY20245DroughtKenya200095051201AUG2023
6EXTREME15JUN202315JUN20246TsunamiJapan120009000101201SEP2023
7MODERATE20JUL202320NOV20237LandslideNepal4506006401OCT2023
8HIGH02AUG202302FEB20248FloodChina500035008601NOV2023
9HIGH15SEP202315MAR20249HurricaneMexico110024007601DEC2023
10EXTREME10OCT202310OCT202410EarthquakeTurkey10000750091201JAN2024
11LOW01NOV202301FEB202411TornadoUSA3004004301FEB2024
12HIGH15NOV202315MAY202412WildfireCanada80015007601FEB2024
13HIGH01DEC202301JUN202413FloodBanglade400028008601MAR2024
14MODERATE15DEC202315JUL202414VolcanoIndonesi60012006701MAR2024
15MODERATE01JAN202401JAN202515DroughtEthiopia2500130051201APR2024


4. PROC SQL – ANALYTICAL SUMMARIES

proc sql;

    create table country_cost as

    select Country,

           count(*) as Disaster_Count,

           sum(Cost_Million) as Total_Cost,

           sum(Casualties) as Total_Casualties

    from disasters_classified

    group by Country;

quit;

proc print data=country_cost;

run;

OUTPUT:

ObsCountryDisaster_CountTotal_CostTotal_Casualties
1Australi11800600
2Banglade128004000
3Canada11500800
4China135005000
5Ethiopia113002500
6India253009700
7Indonesi11200600
8Japan1900012000
9Kenya19502000
10Mexico124001100
11Nepal1600450
12Turkey1750010000
13USA226001250

Why Proc SQL Is Used:

SQL allows relational analytics:

  • Country level cost
  • Risk-wise burden
  • Disaster frequency

This is exactly how safety summaries are done in ADaM.


5. PROC MEANS – STATISTICAL SUMMARY

proc means data=disasters_classified mean max min sum;

    var Casualties Cost_Million Recovery_Time;

run;

OUTPUT:

The MEANS Procedure

VariableMeanMaximumMinimumSum
Casualties
Cost_Million
Recovery_Time
3333.33
2696.67
8.1333333
12000.00
9000.00
12.0000000
300.0000000
400.0000000
3.0000000
50000.00
40450.00
122.0000000

6. PROC UNIVARIATE – DISTRIBUTION ANALYSIS

proc univariate data=disasters_classified;

    var Casualties Cost_Million;

    histogram Casualties Cost_Million;

run;

OUTPUT:

The UNIVARIATE Procedure

Variable: Casualties

Moments
N15Sum Weights15
Mean3333.33333Sum Observations50000
Std Deviation3836.27734Variance14717023.8
Skewness1.37773304Kurtosis0.65781048
Uncorrected SS372705000Corrected SS206038333
Coeff Variation115.08832Std Error Mean990.522549
Basic Statistical Measures
LocationVariability
Mean3333.333Std Deviation3836
Median1200.000Variance14717024
Mode600.000Range11700
  Interquartile Range4400
Tests for Location: Mu0=0
TestStatisticp Value
Student's tt3.365227Pr > |t|0.0046
SignM7.5Pr >= |M|<.0001
Signed RankS60Pr >= |S|<.0001
Quantiles (Definition 5)
LevelQuantile
100% Max12000
99%12000
95%12000
90%10000
75% Q35000
50% Median1200
25% Q1600
10%450
5%300
1%300
0% Min300
Extreme Observations
LowestHighest
ValueObsValueObs
30011400013
450750008
6001485001
60041000010
80012120006

The UNIVARIATE Procedure

Histogram for Casualties

The UNIVARIATE Procedure

Variable: Cost_Million

Moments
N15Sum Weights15
Mean2696.66667Sum Observations40450
Std Deviation2503.60217Variance6268023.81
Skewness1.71106246Kurtosis2.35911263
Uncorrected SS196832500Corrected SS87752333.3
Coeff Variation92.8406242Std Error Mean646.4273
Basic Statistical Measures
LocationVariability
Mean2696.667Std Deviation2504
Median1800.000Variance6268024
Mode.Range8600
  Interquartile Range2400
Tests for Location: Mu0=0
TestStatisticp Value
Student's tt4.171647Pr > |t|0.0009
SignM7.5Pr >= |M|<.0001
Signed RankS60Pr >= |S|<.0001
Quantiles (Definition 5)
LevelQuantile
100% Max9000
99%9000
95%9000
90%7500
75% Q33500
50% Median1800
25% Q11100
10%600
5%400
1%400
0% Min400
Extreme Observations
LowestHighest
ValueObsValueObs
40011280013
600735008
950542001
11002750010
12001490006

The UNIVARIATE Procedure

Histogram for Cost_Million

Why Proc Means And Univariate:

These identify:
·       Outlier disasters
·       Worst cost events
·       Casualty distributions
In pharma, this equals lab and AE distribution checks

7. PROC SGPLOT – VISUAL ANALYTICS

proc sgplot data=disasters_classified;

    vbar Disaster_Type / response=Casualties stat=sum;

run;

OUTPUT:

The SGPlot Procedure


proc sgplot data=disasters_classified;

    vbar Country / response=Cost_Million stat=sum;

run;

OUTPUT:

The SGPlot Procedure


8. PROC TRANSPOSE

proc transpose data=disasters_classified out=disaster_transposed;

    by Country NotSorted;

    id Disaster_Type;

    var Cost_Million;

run;

proc print data=disaster_transposed;

run;

OUTPUT:

ObsCountry_NAME_EarthquakeFloodCycloneWildfireDroughtTsunamiLandslideHurricaneTornadoVolcano
1IndiaCost_Million42001100........
2USACost_Million..2200.......
3AustraliCost_Million...1800......
4KenyaCost_Million....950.....
5JapanCost_Million.....9000....
6NepalCost_Million......600...
7ChinaCost_Million.3500........
8MexicoCost_Million.......2400..
9TurkeyCost_Million7500.........
10USACost_Million........400.
11CanadaCost_Million...1500......
12BangladeCost_Million.2800........
13IndonesiCost_Million.........1200
14EthiopiaCost_Million....1300.....


9. DATA MERGE

proc sort data=disasters_classified;

 by Country;

run;

proc print data=disasters_classified;

run;

OUTPUT:

ObsRisk_LevelDisaster_DateRecovery_DateDisaster_IDDisaster_TypeCountryCasualtiesCost_MillionSeverityRecovery_TimeNext_Review
1HIGH12APR202312JAN20244WildfireAustrali60018008901JUL2023
2HIGH01DEC202301JUN202413FloodBanglade400028008601MAR2024
3HIGH15NOV202315MAY202412WildfireCanada80015007601FEB2024
4HIGH02AUG202302FEB20248FloodChina500035008601NOV2023
5MODERATE01JAN202401JAN202515DroughtEthiopia2500130051201APR2024
6EXTREME01JAN202301JAN20241EarthquakeIndia8500420091201APR2023
7MODERATE10FEB202310AUG20232FloodIndia120011006601MAY2023
8MODERATE15DEC202315JUL202414VolcanoIndonesi60012006701MAR2024
9EXTREME15JUN202315JUN20246TsunamiJapan120009000101201SEP2023
10MODERATE01MAY202301MAY20245DroughtKenya200095051201AUG2023
11HIGH15SEP202315MAR20249HurricaneMexico110024007601DEC2023
12MODERATE20JUL202320NOV20237LandslideNepal4506006401OCT2023
13EXTREME10OCT202310OCT202410EarthquakeTurkey10000750091201JAN2024
14HIGH05MAR202305DEC20233CycloneUSA95022007901JUN2023
15LOW01NOV202301FEB202411TornadoUSA3004004301FEB2024


proc sort data=country_cost;

 by Country;

run;

proc print data=country_cost;

run;

OUTPUT:

ObsCountryDisaster_CountTotal_CostTotal_Casualties
1Australi11800600
2Banglade128004000
3Canada11500800
4China135005000
5Ethiopia113002500
6India253009700
7Indonesi11200600
8Japan1900012000
9Kenya19502000
10Mexico124001100
11Nepal1600450
12Turkey1750010000
13USA226001250


data merged_data;

    merge disasters_classified 

          country_cost;

    by Country;

run;

proc print data=merged_data;

run;

OUTPUT:

ObsRisk_LevelDisaster_DateRecovery_DateDisaster_IDDisaster_TypeCountryCasualtiesCost_MillionSeverityRecovery_TimeNext_ReviewDisaster_CountTotal_CostTotal_Casualties
1HIGH12APR202312JAN20244WildfireAustrali60018008901JUL202311800600
2HIGH01DEC202301JUN202413FloodBanglade400028008601MAR2024128004000
3HIGH15NOV202315MAY202412WildfireCanada80015007601FEB202411500800
4HIGH02AUG202302FEB20248FloodChina500035008601NOV2023135005000
5MODERATE01JAN202401JAN202515DroughtEthiopia2500130051201APR2024113002500
6EXTREME01JAN202301JAN20241EarthquakeIndia8500420091201APR2023253009700
7MODERATE10FEB202310AUG20232FloodIndia120011006601MAY2023253009700
8MODERATE15DEC202315JUL202414VolcanoIndonesi60012006701MAR202411200600
9EXTREME15JUN202315JUN20246TsunamiJapan120009000101201SEP20231900012000
10MODERATE01MAY202301MAY20245DroughtKenya200095051201AUG202319502000
11HIGH15SEP202315MAR20249HurricaneMexico110024007601DEC2023124001100
12MODERATE20JUL202320NOV20237LandslideNepal4506006401OCT20231600450
13EXTREME10OCT202310OCT202410EarthquakeTurkey10000750091201JAN20241750010000
14HIGH05MAR202305DEC20233CycloneUSA95022007901JUN2023226001250
15LOW01NOV202301FEB202411TornadoUSA3004004301FEB2024226001250


10. PROC APPEND

data new_disasters;

    input Disaster_ID Disaster_Type:$12. Country $ Casualties Cost_Million Severity 

          Disaster_Date : date9. Recovery_Date : date9.;

    datalines;

16 Flood SriLanka 900 750 6 10JAN2024 10JUL2024

17 Earthquake Peru 4500 3200 8 01FEB2024 01FEB2025

;

run;

proc print data=new_disasters;

run;

OUTPUT:

ObsDisaster_IDDisaster_TypeCountryCasualtiesCost_MillionSeverityDisaster_DateRecovery_Date
116FloodSriLanka90075062338523567
217EarthquakePeru4500320082340723773


proc append base=disasters_raw 

            data=new_disasters force;

run;

proc print data=disasters_raw;

run;

OUTPUT:

ObsDisaster_DateRecovery_DateDisaster_IDDisaster_TypeCountryCasualtiesCost_MillionSeverity
101JAN202301JAN20241EarthquakeIndia850042009
210FEB202310AUG20232FloodIndia120011006
305MAR202305DEC20233CycloneUSA95022007
412APR202312JAN20244WildfireAustrali60018008
501MAY202301MAY20245DroughtKenya20009505
615JUN202315JUN20246TsunamiJapan12000900010
720JUL202320NOV20237LandslideNepal4506006
802AUG202302FEB20248FloodChina500035008
915SEP202315MAR20249HurricaneMexico110024007
1010OCT202310OCT202410EarthquakeTurkey1000075009
1101NOV202301FEB202411TornadoUSA3004004
1215NOV202315MAY202412WildfireCanada80015007
1301DEC202301JUN202413FloodBanglade400028008
1415DEC202315JUL202414VolcanoIndonesi60012006
1501JAN202401JAN202515DroughtEthiopia250013005
1610JAN202410JUL202416FloodSriLanka9007506
1701FEB202401FEB202517EarthquakePeru450032008


11. SET Statement

data full_disasters;

    set disasters_classified 

        new_disasters;

run;

proc print data=full_disasters;

run;

OUTPUT:

ObsRisk_LevelDisaster_DateRecovery_DateDisaster_IDDisaster_TypeCountryCasualtiesCost_MillionSeverityRecovery_TimeNext_Review
1HIGH12APR202312JAN20244WildfireAustrali60018008901JUL2023
2HIGH01DEC202301JUN202413FloodBanglade400028008601MAR2024
3HIGH15NOV202315MAY202412WildfireCanada80015007601FEB2024
4HIGH02AUG202302FEB20248FloodChina500035008601NOV2023
5MODERATE01JAN202401JAN202515DroughtEthiopia2500130051201APR2024
6EXTREME01JAN202301JAN20241EarthquakeIndia8500420091201APR2023
7MODERATE10FEB202310AUG20232FloodIndia120011006601MAY2023
8MODERATE15DEC202315JUL202414VolcanoIndonesi60012006701MAR2024
9EXTREME15JUN202315JUN20246TsunamiJapan120009000101201SEP2023
10MODERATE01MAY202301MAY20245DroughtKenya200095051201AUG2023
11HIGH15SEP202315MAR20249HurricaneMexico110024007601DEC2023
12MODERATE20JUL202320NOV20237LandslideNepal4506006401OCT2023
13EXTREME10OCT202310OCT202410EarthquakeTurkey10000750091201JAN2024
14HIGH05MAR202305DEC20233CycloneUSA95022007901JUN2023
15LOW01NOV202301FEB202411TornadoUSA3004004301FEB2024
16 10JAN202410JUL202416FloodSriLanka9007506..
17 01FEB202401FEB202517EarthquakePeru450032008..


Why TRANSPOSE, MERGE, APPEND, SET:

These replicate:

·       SDTM → ADaM reshaping

·       Incremental updates

·       Database refresh cycles

Just like you do in ADSL, ADAE, ADLB.

12. ADVANCED SQL — RISK-WISE COST

proc sql;

    select Risk_Level,

           sum(Cost_Million) as Total_Cost,

           avg(Casualties) as Avg_Casualties

    from disasters_classified

    group by Risk_Level;

quit;

OUTPUT:

Risk_LevelTotal_CostAvg_Casualties
EXTREME2070010166.67
HIGH142002075
LOW400300
MODERATE51501350

13. TIME-BASED ANALYSIS

proc sql;

    select Disaster_Type,

           avg(Recovery_Time) as Avg_Recovery_Months

    from disasters_classified

    group by Disaster_Type;

quit;

OUTPUT:
Disaster_TypeAvg_Recovery_Months
Cyclone9
Drought12
Earthquake12
Flood6
Hurricane6
Landslide4
Tornado3
Tsunami12
Volcano7
Wildfire7.5



To Visit My Previous Electronic Data Analysis:Click Here
To Visit My Previous IPS Toppers Dataset:Click Here
To Visit My Previous Global Money Loan Trends Dataset:Click Here
To Visit My Previous Statewise Population Analysis:Click Here



Follow Us On : 


 


--->FOLLOW OUR BLOG FOR MORE INFORMATION.

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



No comments:

Post a Comment