SPACE STATIONS PERFORMANCE ANALYSIS USING DATA STEP | PROC SQL | PROC MEANS | PROC SGPLOT | MACROS | FUNCTIONS | PROC APPEND | MERGE STATEMENT | PROC TRANSPOSE
option nocenter;
1.SPACE STATIONS DATASET CREATION WITH DATE FORMATS
data work.space_stations;
length Station_Name $25 Country $15;
format Year_Launched date9.;
input Station_Name $ Country $ Orbit_Height Crew_Capacity Year_Launched :date9.
Duration;
datalines;
ISS USA 408 7 20NOV1998 30
Tiangong China 390 6 29APR2021 15
Mir Russia 400 6 19FEB1986 15
Skylab USA 435 3 14MAY1973 6
Salyut1 Russia 200 3 19APR1971 1
Salyut6 Russia 350 3 29SEP1977 4
Salyut7 Russia 350 4 19APR1982 4
Tiangong2 China 393 3 15SEP2016 2
Almaz Russia 250 3 03APR1973 2
Freedom USA 410 8 01JAN1995 20
ShenzhouLab China 380 4 01JAN2030 10
OrbitalHub ESA 420 6 01JAN2035 25
;
run;
proc print data=work.space_stations;
run;
OUTPUT:
| Obs | Station_Name | Country | Year_Launched | Orbit_Height | Crew_Capacity | Duration |
|---|---|---|---|---|---|---|
| 1 | ISS | USA | 20NOV1998 | 408 | 7 | 30 |
| 2 | Tiangong | China | 29APR2021 | 390 | 6 | 15 |
| 3 | Mir | Russia | 19FEB1986 | 400 | 6 | 15 |
| 4 | Skylab | USA | 14MAY1973 | 435 | 3 | 6 |
| 5 | Salyut1 | Russia | 19APR1971 | 200 | 3 | 1 |
| 6 | Salyut6 | Russia | 29SEP1977 | 350 | 3 | 4 |
| 7 | Salyut7 | Russia | 19APR1982 | 350 | 4 | 4 |
| 8 | Tiangong2 | China | 15SEP2016 | 393 | 3 | 2 |
| 9 | Almaz | Russia | 03APR1973 | 250 | 3 | 2 |
| 10 | Freedom | USA | 01JAN1995 | 410 | 8 | 20 |
| 11 | ShenzhouLab | China | 01JAN2030 | 380 | 4 | 10 |
| 12 | OrbitalHub | ESA | 01JAN2035 | 420 | 6 | 25 |
2.DATE CALCULATIONS USING INTCK AND INTNX
Years since launch (experience metric)
data work.space_age;
set work.space_stations;
Years_In_Orbit = intck('year', Year_Launched, today());
Next_Maintenance = intnx('year', Year_Launched, 5, 'same');
format Next_Maintenance date9.;
run;
proc print data=work.space_age;
run;
OUTPUT:
| Obs | Station_Name | Country | Year_Launched | Orbit_Height | Crew_Capacity | Duration | Years_In_Orbit | Next_Maintenance |
|---|---|---|---|---|---|---|---|---|
| 1 | ISS | USA | 20NOV1998 | 408 | 7 | 30 | 27 | 20NOV2003 |
| 2 | Tiangong | China | 29APR2021 | 390 | 6 | 15 | 4 | 29APR2026 |
| 3 | Mir | Russia | 19FEB1986 | 400 | 6 | 15 | 39 | 19FEB1991 |
| 4 | Skylab | USA | 14MAY1973 | 435 | 3 | 6 | 52 | 14MAY1978 |
| 5 | Salyut1 | Russia | 19APR1971 | 200 | 3 | 1 | 54 | 19APR1976 |
| 6 | Salyut6 | Russia | 29SEP1977 | 350 | 3 | 4 | 48 | 29SEP1982 |
| 7 | Salyut7 | Russia | 19APR1982 | 350 | 4 | 4 | 43 | 19APR1987 |
| 8 | Tiangong2 | China | 15SEP2016 | 393 | 3 | 2 | 9 | 15SEP2021 |
| 9 | Almaz | Russia | 03APR1973 | 250 | 3 | 2 | 52 | 03APR1978 |
| 10 | Freedom | USA | 01JAN1995 | 410 | 8 | 20 | 30 | 01JAN2000 |
| 11 | ShenzhouLab | China | 01JAN2030 | 380 | 4 | 10 | -5 | 01JAN2035 |
| 12 | OrbitalHub | ESA | 01JAN2035 | 420 | 6 | 25 | -10 | 01JAN2040 |
3.PROC SQL – DATA SUMMARIZATION
proc sql;
create table work.sql_summary as
select Country,
count(*) as Station_Count,
avg(Orbit_Height) as Avg_Orbit,
avg(Crew_Capacity) as Avg_Crew
from work.space_stations
group by Country;
quit;
proc print data=work.sql_summary;
run;
OUTPUT:
| Obs | Country | Station_Count | Avg_Orbit | Avg_Crew |
|---|---|---|---|---|
| 1 | China | 3 | 387.667 | 4.33333 |
| 2 | ESA | 1 | 420.000 | 6.00000 |
| 3 | Russia | 5 | 310.000 | 3.80000 |
| 4 | USA | 3 | 417.667 | 6.00000 |
4.PROC MEANS – DESCRIPTIVE STATISTICS
proc means data=work.space_stations min max mean;
var Orbit_Height Crew_Capacity Duration;
run;
OUTPUT:
The MEANS Procedure
| Variable | Minimum | Maximum | Mean |
|---|---|---|---|
Orbit_Height Crew_Capacity Duration | 200.0000000 3.0000000 1.0000000 | 435.0000000 8.0000000 30.0000000 | 365.5000000 4.6666667 11.1666667 |
5.MACRO FOR PERFORMANCE GROUPING
%macro performance_group(in=, out=);
data &out;
set ∈
length Performance $10;
if Crew_Capacity >= 6 then Performance = 'HIGH';
else if Crew_Capacity >= 4 then Performance = 'MEDIUM';
else Performance = 'LOW';
run;
proc print data=&out;
run;
%mend;
%performance_group(in=work.space_stations, out=work.space_perf);
OUTPUT:
| Obs | Station_Name | Country | Year_Launched | Orbit_Height | Crew_Capacity | Duration | Performance |
|---|---|---|---|---|---|---|---|
| 1 | ISS | USA | 20NOV1998 | 408 | 7 | 30 | HIGH |
| 2 | Tiangong | China | 29APR2021 | 390 | 6 | 15 | HIGH |
| 3 | Mir | Russia | 19FEB1986 | 400 | 6 | 15 | HIGH |
| 4 | Skylab | USA | 14MAY1973 | 435 | 3 | 6 | LOW |
| 5 | Salyut1 | Russia | 19APR1971 | 200 | 3 | 1 | LOW |
| 6 | Salyut6 | Russia | 29SEP1977 | 350 | 3 | 4 | LOW |
| 7 | Salyut7 | Russia | 19APR1982 | 350 | 4 | 4 | MEDIUM |
| 8 | Tiangong2 | China | 15SEP2016 | 393 | 3 | 2 | LOW |
| 9 | Almaz | Russia | 03APR1973 | 250 | 3 | 2 | LOW |
| 10 | Freedom | USA | 01JAN1995 | 410 | 8 | 20 | HIGH |
| 11 | ShenzhouLab | China | 01JAN2030 | 380 | 4 | 10 | MEDIUM |
| 12 | OrbitalHub | ESA | 01JAN2035 | 420 | 6 | 25 | HIGH |
6.PROC SGPLOT – VISUAL ANALYSIS
Orbit Height vs Crew Capacity
proc sgplot data=work.space_perf;
scatter x=Orbit_Height y=Crew_Capacity / datalabel=Station_Name;
title "Orbit Height vs Crew Capacity of Space Stations";
run;
OUTPUT:
7.DATA APPEND – ADDING FUTURE STATIONS
data work.future_stations;
length Station_Name $25 Country $15;
format Year_Launched date9.;
input Station_Name $ Country $ Orbit_Height Crew_Capacity Year_Launched :date9. Duration;
datalines;
LunarGateway USA 480 4 01JAN2028 12
MarsTransit USA 600 6 01JAN2038 20
;
run;
proc print data=work.future_stations;
run;
OUTPUT:
| Obs | Station_Name | Country | Year_Launched | Orbit_Height | Crew_Capacity | Duration |
|---|---|---|---|---|---|---|
| 1 | LunarGateway | USA | 01JAN2028 | 480 | 4 | 12 |
| 2 | MarsTransit | USA | 01JAN2038 | 600 | 6 | 20 |
Appending
proc append base=work.space_stations
data=work.future_stations force;
run;
proc print data=work.space_stations;
run;
OUTPUT:
| Obs | Station_Name | Country | Year_Launched | Orbit_Height | Crew_Capacity | Duration |
|---|---|---|---|---|---|---|
| 1 | ISS | USA | 20NOV1998 | 408 | 7 | 30 |
| 2 | Tiangong | China | 29APR2021 | 390 | 6 | 15 |
| 3 | Mir | Russia | 19FEB1986 | 400 | 6 | 15 |
| 4 | Skylab | USA | 14MAY1973 | 435 | 3 | 6 |
| 5 | Salyut1 | Russia | 19APR1971 | 200 | 3 | 1 |
| 6 | Salyut6 | Russia | 29SEP1977 | 350 | 3 | 4 |
| 7 | Salyut7 | Russia | 19APR1982 | 350 | 4 | 4 |
| 8 | Tiangong2 | China | 15SEP2016 | 393 | 3 | 2 |
| 9 | Almaz | Russia | 03APR1973 | 250 | 3 | 2 |
| 10 | Freedom | USA | 01JAN1995 | 410 | 8 | 20 |
| 11 | ShenzhouLab | China | 01JAN2030 | 380 | 4 | 10 |
| 12 | OrbitalHub | ESA | 01JAN2035 | 420 | 6 | 25 |
| 13 | LunarGateway | USA | 01JAN2028 | 480 | 4 | 12 |
| 14 | MarsTransit | USA | 01JAN2038 | 600 | 6 | 20 |
8.DATA MERGE – COMBINING METADATA
data work.country_info;
length Country $15 Agency $20;
input Country $ Agency $;
datalines;
USA NASA
Russia ROSCOSMOS
China CNSA
ESA ESA
;
run;
proc print data=work.country_info;
run;
OUTPUT:
| Obs | Country | Agency |
|---|---|---|
| 1 | USA | NASA |
| 2 | Russia | ROSCOSMOS |
| 3 | China | CNSA |
| 4 | ESA | ESA |
proc sort data=work.space_stations; by Country; run;
proc print data=work.space_stations;
run;
OUTPUT:
| Obs | Station_Name | Country | Year_Launched | Orbit_Height | Crew_Capacity | Duration |
|---|---|---|---|---|---|---|
| 1 | Tiangong | China | 29APR2021 | 390 | 6 | 15 |
| 2 | Tiangong2 | China | 15SEP2016 | 393 | 3 | 2 |
| 3 | ShenzhouLab | China | 01JAN2030 | 380 | 4 | 10 |
| 4 | OrbitalHub | ESA | 01JAN2035 | 420 | 6 | 25 |
| 5 | Mir | Russia | 19FEB1986 | 400 | 6 | 15 |
| 6 | Salyut1 | Russia | 19APR1971 | 200 | 3 | 1 |
| 7 | Salyut6 | Russia | 29SEP1977 | 350 | 3 | 4 |
| 8 | Salyut7 | Russia | 19APR1982 | 350 | 4 | 4 |
| 9 | Almaz | Russia | 03APR1973 | 250 | 3 | 2 |
| 10 | ISS | USA | 20NOV1998 | 408 | 7 | 30 |
| 11 | Skylab | USA | 14MAY1973 | 435 | 3 | 6 |
| 12 | Freedom | USA | 01JAN1995 | 410 | 8 | 20 |
| 13 | LunarGateway | USA | 01JAN2028 | 480 | 4 | 12 |
| 14 | MarsTransit | USA | 01JAN2038 | 600 | 6 | 20 |
proc sort data=work.country_info; by Country; run;
proc print data=work.country_info;
run;
OUTPUT:
| Obs | Country | Agency |
|---|---|---|
| 1 | China | CNSA |
| 2 | ESA | ESA |
| 3 | Russia | ROSCOSMOS |
| 4 | USA | NASA |
data work.station_full;
merge work.space_stations(in=a)
work.country_info(in=b);
by Country;
if a;
run;
proc print data=work.station_full;
run;
OUTPUT:
| Obs | Station_Name | Country | Year_Launched | Orbit_Height | Crew_Capacity | Duration | Agency |
|---|---|---|---|---|---|---|---|
| 1 | Tiangong | China | 29APR2021 | 390 | 6 | 15 | CNSA |
| 2 | Tiangong2 | China | 15SEP2016 | 393 | 3 | 2 | CNSA |
| 3 | ShenzhouLab | China | 01JAN2030 | 380 | 4 | 10 | CNSA |
| 4 | OrbitalHub | ESA | 01JAN2035 | 420 | 6 | 25 | ESA |
| 5 | Mir | Russia | 19FEB1986 | 400 | 6 | 15 | ROSCOSMOS |
| 6 | Salyut1 | Russia | 19APR1971 | 200 | 3 | 1 | ROSCOSMOS |
| 7 | Salyut6 | Russia | 29SEP1977 | 350 | 3 | 4 | ROSCOSMOS |
| 8 | Salyut7 | Russia | 19APR1982 | 350 | 4 | 4 | ROSCOSMOS |
| 9 | Almaz | Russia | 03APR1973 | 250 | 3 | 2 | ROSCOSMOS |
| 10 | ISS | USA | 20NOV1998 | 408 | 7 | 30 | NASA |
| 11 | Skylab | USA | 14MAY1973 | 435 | 3 | 6 | NASA |
| 12 | Freedom | USA | 01JAN1995 | 410 | 8 | 20 | NASA |
| 13 | LunarGateway | USA | 01JAN2028 | 480 | 4 | 12 | NASA |
| 14 | MarsTransit | USA | 01JAN2038 | 600 | 6 | 20 | NASA |
9.PROC TRANSPOSE – STRUCTURAL RESHAPING
proc transpose data=work.space_stations
out=work.transposed_duration
prefix=Duration_;
by Country;
var Duration;
run;
proc print data=work.transposed_duration;
run;
OUTPUT:
| Obs | Country | _NAME_ | Duration_1 | Duration_2 | Duration_3 | Duration_4 | Duration_5 |
|---|---|---|---|---|---|---|---|
| 1 | China | Duration | 15 | 2 | 10 | . | . |
| 2 | ESA | Duration | 25 | . | . | . | . |
| 3 | Russia | Duration | 15 | 1 | 4 | 4 | 2 |
| 4 | USA | Duration | 30 | 6 | 20 | 12 | 20 |
10.PROC MEANS
proc means data=work.space_station;
var Orbit_Height Crew_Capacity;
run;
/* Note: In practice above there is an Invalid in this code Find it,Correct it and Use it /*
The MEANS Procedure
| Variable | N | Mean | Std Dev | Minimum | Maximum |
|---|---|---|---|---|---|
Orbit_Height Crew_Capacity | 14 14 | 390.4285714 4.7142857 | 94.0357659 1.7288756 | 200.0000000 3.0000000 | 600.0000000 8.0000000 |
11.PROC MEANS
proc means forest_merged;
var Rainfall Area;
run;
DATA= MISSED IN THE CODE
proc means DATA= forest_merged;
var Rainfall Area;
run;
/* Note: In practice above there is an Invalid in this code Find it,Correct it and Use it /*
OUTPUT:
The MEANS Procedure
| Variable | N | Mean | Std Dev | Minimum | Maximum |
|---|---|---|---|---|---|
Rainfall Area | 13 13 | 2461.54 1386798.31 | 1436.16 2637717.45 | 600.0000000 88.0000000 | 5000.00 8000000.00 |
No comments:
Post a Comment