Saturday, 15 November 2025

310.INTERNATIONAL SPACE MISSIONS ANALYSIS USING PROC SQL | PROC MEANS | PROC UNIVARIATE | PROC SGPLOT | MACRO-BASED SUCCESS RATE COMPUTATION

INTERNATIONAL SPACE MISSIONS ANALYSIS USING PROC SQL | PROC MEANS | PROC UNIVARIATE | PROC SGPLOT | MACRO-BASED SUCCESS RATE COMPUTATION

options nocenter validvarname=any nodate nonumber;

1) Create Space Missions Dataset

data work.space_missions;

    length Mission_ID $8 Country $20 Agency $30 Mission_Type $20 Outcome $12;

    infile datalines dlm=',' dsd truncover;

    input Mission_ID :$8.

          Country    :$20.

          Agency     :$30.

          Launch_Year

          Mission_Type :$20.

          Outcome      :$12.;

    datalines;

M001,USA,NASA,1998,Orbiter,Success

M002,Russia,Roscosmos,2000,Orbiter,Partial

M003,India,ISRO,2008,Orbiter,Success

M004,China,CNSA,2013,Lander,Success

M005,ESA,ESA,2014,Orbiter,Failure

M006,Japan,JAXA,2010,Probe,Success

M007,USA,SpaceX,2018,Orbiter,Success

M008,India,ISRO,2019,Orbiter,Failure

M009,Russia,Roscosmos,2016,Probe,Partial

M010,China,CNSA,2020,Orbiter,Success

M011,France,CNES,2002,Probe,Success

M012,SouthKorea,KARI,2021,Orbiter,Partial

;

run;

proc print data=work.space_missions;

run;

OUTPUT:

ObsMission_IDCountryAgencyMission_TypeOutcomeLaunch_Year
1M001USANASAOrbiterSuccess1998
2M002RussiaRoscosmosOrbiterPartial2000
3M003IndiaISROOrbiterSuccess2008
4M004ChinaCNSALanderSuccess2013
5M005ESAESAOrbiterFailure2014
6M006JapanJAXAProbeSuccess2010
7M007USASpaceXOrbiterSuccess2018
8M008IndiaISROOrbiterFailure2019
9M009RussiaRoscosmosProbePartial2016
10M010ChinaCNSAOrbiterSuccess2020
11M011FranceCNESProbeSuccess2002
12M012SouthKoreaKARIOrbiterPartial2021


2) Create a formatted outcome flag numeric: 1=Success, 0=NotSuccess 

data work.space_missions_flag;

    set work.space_missions;

    if upcase(strip(Outcome)) = 'SUCCESS' then Success_Flag = 1;

    else Success_Flag = 0;

run;

proc print data=work.space_missions_flag noobs label;

    title "International Space Missions - dataset (with Success_Flag)";

    var Mission_ID Country Agency Launch_Year Mission_Type Outcome Success_Flag;

run;

OUTPUT:

International Space Missions - dataset (with Success_Flag)

Mission_IDCountryAgencyLaunch_YearMission_TypeOutcomeSuccess_Flag
M001USANASA1998OrbiterSuccess1
M002RussiaRoscosmos2000OrbiterPartial0
M003IndiaISRO2008OrbiterSuccess1
M004ChinaCNSA2013LanderSuccess1
M005ESAESA2014OrbiterFailure0
M006JapanJAXA2010ProbeSuccess1
M007USASpaceX2018OrbiterSuccess1
M008IndiaISRO2019OrbiterFailure0
M009RussiaRoscosmos2016ProbePartial0
M010ChinaCNSA2020OrbiterSuccess1
M011FranceCNES2002ProbeSuccess1
M012SouthKoreaKARI2021OrbiterPartial0

3) List missions launched after 2010 

proc sql;

    title "Missions Launched After 2010";

    select Mission_ID, Agency, Country, Launch_Year, Mission_Type, Outcome

    from work.space_missions

    where Launch_Year > 2010

    order by Launch_Year;

quit;

OUTPUT:

Missions Launched After 2010

Mission_IDAgencyCountryLaunch_YearMission_TypeOutcome
M004CNSAChina2013LanderSuccess
M005ESAESA2014OrbiterFailure
M009RoscosmosRussia2016ProbePartial
M007SpaceXUSA2018OrbiterSuccess
M008ISROIndia2019OrbiterFailure
M010CNSAChina2020OrbiterSuccess
M012KARISouthKorea2021OrbiterPartial

4) Count of missions by Outcome 

proc sql;

    title "Count of Missions by Outcome";

    select Outcome, count(*) as Count

    from work.space_missions

    group by Outcome;

quit;

OUTPUT:

Count of Missions by Outcome

OutcomeCount
Failure2
Partial3
Success7

5) Numeric summary by Agency 

proc means data=work.space_missions n mean median min max std vardef=DF;

    class Agency;

    var Launch_Year;

    title "Numeric Summary (Launch_Year) by Agency - PROC MEANS";

run;

OUTPUT:

Numeric Summary (Launch_Year) by Agency - PROC MEANS

The MEANS Procedure

Analysis Variable : Launch_Year
AgencyN ObsNMeanMedianMinimumMaximumStd Dev
CNES112002.002002.002002.002002.00.
CNSA222016.502016.502013.002020.004.9497475
ESA112014.002014.002014.002014.00.
ISRO222013.502013.502008.002019.007.7781746
JAXA112010.002010.002010.002010.00.
KARI112021.002021.002021.002021.00.
NASA111998.001998.001998.001998.00.
Roscosmos222008.002008.002000.002016.0011.3137085
SpaceX112018.002018.002018.002018.00.

6) Distribution diagnostics (skewness, kurtosis, extreme values) 

proc univariate data=work.space_missions cibasic;

    var Launch_Year;

    title "Launch Year Distribution - PROC UNIVARIATE";

    histogram Launch_Year / normal;

    inset mean median std / position=ne;

run;

OUTPUT:

Launch Year Distribution - PROC UNIVARIATE

The UNIVARIATE Procedure

Variable: Launch_Year

Moments
N12Sum Weights12
Mean2011.58333Sum Observations24139
Std Deviation8.027887Variance64.4469697
Skewness-0.5870186Kurtosis-1.0485987
Uncorrected SS48558319Corrected SS708.916667
Coeff Variation0.39908299Std Error Mean2.31745136
Basic Statistical Measures
LocationVariability
Mean2011.583Std Deviation8.02789
Median2013.500Variance64.44697
Mode.Range23.00000
  Interquartile Range13.50000
Basic Confidence Limits Assuming Normality
ParameterEstimate95% Confidence Limits
Mean201220062017
Std Deviation8.027895.6869213.63037
Variance64.4469732.34102185.78706
Tests for Location: Mu0=0
TestStatisticp Value
Student's tt868.0153Pr > |t|<.0001
SignM6Pr >= |M|0.0005
Signed RankS39Pr >= |S|0.0005
Quantiles (Definition 5)
LevelQuantile
100% Max2021.0
99%2021.0
95%2021.0
90%2020.0
75% Q32018.5
50% Median2013.5
25% Q12005.0
10%2000.0
5%1998.0
1%1998.0
0% Min1998.0
Extreme Observations
LowestHighest
ValueObsValueObs
1998120169
2000220187
20021120198
20083202010
20106202112

Launch Year Distribution - PROC UNIVARIATE

The UNIVARIATE Procedure

Histogram for Launch_Year

Launch Year Distribution - PROC UNIVARIATE

The UNIVARIATE Procedure

Fitted Normal Distribution for Launch_Year

Parameters for Normal Distribution
ParameterSymbolEstimate
MeanMu2011.583
Std DevSigma8.027887
Goodness-of-Fit Tests for Normal Distribution
TestStatisticp Value
Kolmogorov-SmirnovD0.15337026Pr > D>0.150
Cramer-von MisesW-Sq0.06082002Pr > W-Sq>0.250
Anderson-DarlingA-Sq0.40999932Pr > A-Sq>0.250
Quantiles for Normal Distribution
PercentQuantile
ObservedEstimated
1.01998.001992.91
5.01998.001998.38
10.02000.002001.30
25.02005.002006.17
50.02013.502011.58
75.02018.502017.00
90.02020.002021.87
95.02021.002024.79
99.02021.002030.26

7) Bar chart: count of missions by Agency colored by Outcome (stacked)

proc sgplot data=work.space_missions;

    title "Count of Missions by Agency and Outcome (stacked)";

    vbar Agency / group=Outcome datalabel;

    xaxis display=(nolabel);

    yaxis label="Number of Missions";

OUTPUT:

The SGPlot Procedure


8) Bar chart: success rate by Mission_Type 

proc sql;

    create table work.type_success as

    select Mission_Type,

           sum(case when upcase(Outcome) = 'SUCCESS' then 1 else 0 end) as Successes,

           count(*) as Total_Missions,

           calculated Successes / calculated Total_Missions as Success_Rate format=percent8.2

    from work.space_missions

    group by Mission_Type;

quit;

proc print data=work.type_success;

run;

OUTPUT:

ObsMission_TypeSuccessesTotal_MissionsSuccess_Rate
1Lander11100.0%
2Orbiter4850.00%
3Probe2366.67%

proc sgplot data=work.type_success;

    title "Success Rate by Mission Type";

    vbar Mission_Type / response=Success_Rate stat=sum datalabel;

    yaxis label='Success Rate' values=(0 to 1 by 0.25) grid;

run;

OUTPUT:

The SGPlot Procedure

9) Macro to compute success rates by arbitrary grouping variable

%success_rate macro:

    Parameters:

      - data: dataset name (lib.dataset) to analyze

      - group: variable to group by (unquoted)

      - outcomevar: the Outcome variable name (default Outcome)

      - successvalue: the value of outcome considered a success (default SUCCESS)

      - outds: optional name for the output summary table (default work.success_summary)


%macro success_rate(data=work.space_missions, group=Agency, outcomevar=Outcome, successvalue=SUCCESS, outds=work.success_summary);

    %local ds lib mem;

    /* parse libname.member if provided */

    %if %index(&data,.) %then %do;

        %let lib = %scan(&data,1,.);

        %let mem = %scan(&data,2,.);

    %end;

    %else %do;

        %let lib = work;

        %let mem = &data;

    %end;


    /* Use PROC SQL to compute successes, totals, and percent */

    proc sql;

        create table &outds as

        select &group as Group_Value length=50,

               sum(case when upcase(strip(&outcomevar)) = upcase("&successvalue") then 1 else 0 end) as Successes,

               count(*) as Total,

               calculated Successes / calculated Total as Success_Rate format=percent8.2

        from &data

        group by &group

        order by Success_Rate desc;

    quit;


    title "Success Rate Summary by &group";

    proc print data=&outds noobs label;

        var Group_Value Successes Total Success_Rate;

        label Group_Value="&group"

              Successes="Successful Missions"

              Total="Total Missions"

              Success_Rate="Success Rate";

    run;

%mend success_rate;


%success_rate(data=work.space_missions, group=Agency);

OUTPUT:

Success Rate Summary by Agency

AgencySuccessful MissionsTotal MissionsSuccess Rate
SpaceX11100.0%
JAXA11100.0%
CNES11100.0%
NASA11100.0%
CNSA22100.0%
ISRO1250.00%
ESA010.00%
KARI010.00%
Roscosmos020.00%

%success_rate(data=work.space_missions, group=Country);
OUTPUT:

Success Rate Summary by Country

CountrySuccessful MissionsTotal MissionsSuccess Rate
France11100.0%
Japan11100.0%
China22100.0%
USA22100.0%
India1250.00%
SouthKorea010.00%
Russia020.00%
ESA010.00%

%success_rate(data=work.space_missions, group=Mission_Type, successvalue=Success);

OUTPUT:

Success Rate Summary by Mission_Type

Mission_TypeSuccessful MissionsTotal MissionsSuccess Rate
Lander11100.0%
Probe2366.67%
Orbiter4850.00%

10) Use the macro output to create a plot of success rates by Agency 

proc sgplot data=work.success_summary;

    title "Success Rate by Agency (from macro output)";

    vbar Group_Value / response=Success_Rate stat=sum datalabel;

    xaxis label='Agency' fitpolicy=rotate;

    yaxis label='Success Rate' values=(0 to 1 by 0.2);

run;

OUTPUT:
The SGPlot Procedure






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