416.Can We Design, Debug, Detect Fraud, and Build an ADaM-Ready Autonomous Drone Flight Analytics System Using Advanced SAS Programming Techniques?
Autonomous Drone Flight Analytics System with Fraud Detection and ADaM Integration
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
HERE IN THIS PROJECT WE USED THESE SAS STATEMENTS —DATA | SET | MERGE | INPUT | DATALINES | IF | DO | END | BY | OUTPUT | PROC SORT | PROC SQL | PROC APPEND | PROC TRANSPOSE | PROC MEANS | PROC FREQ | PROC SUMMARY | PROC DATASETS | RUN | QUIT | %MACRO | %MEND
Introduction
In real-world analytics environments, building a
dataset is only the beginning. A production-level system must support:
·
Data ingestion from operational sources
·
Data validation and cleaning
·
Error debugging
·
Business rule enforcement
·
Fraud detection logic
·
Date derivations and time intelligence
·
Data reshaping and transformation
·
Dataset merging and lifecycle management
·
Analysis-ready dataset preparation
·
Reporting and traceability
This project combines two major domains:
1.
Operational Drone
Analytics Engineering
2.
ADaM (Analysis Data
Model) Structured Analysis Framework
A complete autonomous drone monitoring system
where raw operational data is transformed into a fraud-aware, analysis-ready
structure similar to how ADaM datasets are built in clinical research.
Table of Contents
1.
Project Overview
2.
Business Context
3.
Operational Data Engineering Layer
4. Intentional Error Simulation
5. Transition to ADaM Principles
6. ADSL_DRONE
(Subject-Level Design)
7. ADFLIGHT
(Parameter-Level Design)
8. Traceability
& Analysis Flags
9. Enterprise-Level
Validation Strategy
10. 25
Key Project Insights
11. Business
Interpretation
12. Conclusion
Project Overview
This
project builds an autonomous drone flight analytics system that combines data
cleaning, validation, fraud detection, and ADaM-ready structuring. Raw
operational drone data is checked for errors such as invalid percentages,
abnormal battery usage, and impossible flight durations. Business rules and
fraud logic are applied to flag suspicious records. Finally, the cleaned data
is transformed into structured, analysis-ready datasets for reporting and
decision-making.
Business Context
Autonomous drones are deployed in:
·
Surveillance missions
·
Medical supply delivery
·
Agricultural spraying
·
Defense operations
·
Logistics transportation
Each drone performs multiple missions across
different regions, under different operators, with varying payloads and flight
durations.
From a business risk perspective, management
wants to detect:
·
Battery usage manipulation
·
Artificially inflated success rates
·
Unrealistic 100% performance records
·
Impossible flight durations
·
Suppressed navigation errors
·
Suspicious zero-duration flights
·
Data entry manipulation
The operational team collects raw data
containing:
·
Drone_ID
·
Mission_Type
·
Flight_Time
·
Battery_Usage
·
Navigation_Errors
·
Payload_Weight
·
Success_Rate (%)
·
Launch_Date
·
Landing_Date
·
Region
·
Operator_Name
However, raw data is rarely clean. It often
contains:
·
Out-of-range percentages
·
Negative counts
·
Date inconsistencies
·
Formatting mismatches
·
Duplicate records
·
Suspicious operational patterns
This is where engineering discipline meets
analytical governance.
Operational Data Engineering Layer
The first layer of the system focuses on:
Data
Ingestion
Collecting drone flight logs from operational
systems.
Data Cleaning
Standardizing case formats, trimming spaces,
correcting invalid values.
Error Debugging
Detecting:
·
Battery usage > 100%
·
Success rate > 100%
·
Negative navigation errors
·
Landing date earlier than launch date
Business Rule Validation
·
Percentages are between 0 and 100
·
Flight time is positive
·
Dates follow chronological order
· Payload weight is within engineering tolerance
Intentional Error Simulation
To build a robust system, we intentionally
simulate errors such as:
·
Battery usage recorded as 110%
·
Success rate recorded as 105%
·
Negative navigation error count
·
Same-day launch and landing for long missions
·
Perfect 100% performance with zero errors
·
Unrealistically high flight time with minimal
battery usage
1. Create Raw Dataset (With Intentional Errors)
data drone_raw;
input Drone_ID $ Mission_Type:$18. Flight_Time Battery_Usage Navigation_Errors
Payload_Weight Success_Rate Launch_Month Launch_Day Launch_Year
Landing_Month Landing_Day Landing_Year Region $ Operator_Name $;
Launch_Date = mdy(Launch_Month,Launch_Day,Launch_Year);
Landing_Date = mdy(Landing_Month,Landing_Day,Landing_Year);
format Launch_Date Landing_Date date9.;
datalines;
D001 surveillance 120 80 2 5 98 1 15 2025 1 15 2025 south ramesh
D002 delivery 200 110 0 8 105 2 10 2025 2 10 2025 north suresh
D003 agriculture 90 60 5 10 85 3 5 2025 3 6 2025 east kumar
D004 defense 300 95 -1 12 99 4 20 2025 4 20 2025 west rajesh
D005 surveillance 150 75 3 6 101 5 11 2025 5 11 2025 south anil
D006 delivery 220 85 1 7 96 6 1 2025 6 1 2025 north pradeep
D007 agriculture 130 55 4 9 88 7 19 2025 7 20 2025 east sandeep
D008 defense 400 120 0 15 100 8 22 2025 8 22 2025 west manoj
D009 delivery 50 20 10 3 60 9 10 2025 9 10 2025 north ajay
D010 surveillance 170 70 2 5 97 10 15 2025 10 15 2025 south mahesh
D011 agriculture 95 65 6 8 84 11 12 2025 11 13 2025 east naresh
D012 defense 280 100 0 14 102 12 25 2025 12 25 2025 west rakesh
D013 delivery 180 90 3 7 93 1 5 2025 1 6 2025 north vinod
D014 surveillance 210 85 2 6 99 2 14 2025 2 14 2025 south arun
D015 defense 350 115 1 13 101 3 28 2025 3 28 2025 west lokesh
;
run;
proc print data=drone_raw;
run;
OUTPUT:
| Obs | Drone_ID | Mission_Type | Flight_Time | Battery_Usage | Navigation_Errors | Payload_Weight | Success_Rate | Launch_Month | Launch_Day | Launch_Year | Landing_Month | Landing_Day | Landing_Year | Region | Operator_Name | Launch_Date | Landing_Date |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | D001 | surveillance | 120 | 80 | 2 | 5 | 98 | 1 | 15 | 2025 | 1 | 15 | 2025 | south | ramesh | 15JAN2025 | 15JAN2025 |
| 2 | D002 | delivery | 200 | 110 | 0 | 8 | 105 | 2 | 10 | 2025 | 2 | 10 | 2025 | north | suresh | 10FEB2025 | 10FEB2025 |
| 3 | D003 | agriculture | 90 | 60 | 5 | 10 | 85 | 3 | 5 | 2025 | 3 | 6 | 2025 | east | kumar | 05MAR2025 | 06MAR2025 |
| 4 | D004 | defense | 300 | 95 | -1 | 12 | 99 | 4 | 20 | 2025 | 4 | 20 | 2025 | west | rajesh | 20APR2025 | 20APR2025 |
| 5 | D005 | surveillance | 150 | 75 | 3 | 6 | 101 | 5 | 11 | 2025 | 5 | 11 | 2025 | south | anil | 11MAY2025 | 11MAY2025 |
| 6 | D006 | delivery | 220 | 85 | 1 | 7 | 96 | 6 | 1 | 2025 | 6 | 1 | 2025 | north | pradeep | 01JUN2025 | 01JUN2025 |
| 7 | D007 | agriculture | 130 | 55 | 4 | 9 | 88 | 7 | 19 | 2025 | 7 | 20 | 2025 | east | sandeep | 19JUL2025 | 20JUL2025 |
| 8 | D008 | defense | 400 | 120 | 0 | 15 | 100 | 8 | 22 | 2025 | 8 | 22 | 2025 | west | manoj | 22AUG2025 | 22AUG2025 |
| 9 | D009 | delivery | 50 | 20 | 10 | 3 | 60 | 9 | 10 | 2025 | 9 | 10 | 2025 | north | ajay | 10SEP2025 | 10SEP2025 |
| 10 | D010 | surveillance | 170 | 70 | 2 | 5 | 97 | 10 | 15 | 2025 | 10 | 15 | 2025 | south | mahesh | 15OCT2025 | 15OCT2025 |
| 11 | D011 | agriculture | 95 | 65 | 6 | 8 | 84 | 11 | 12 | 2025 | 11 | 13 | 2025 | east | naresh | 12NOV2025 | 13NOV2025 |
| 12 | D012 | defense | 280 | 100 | 0 | 14 | 102 | 12 | 25 | 2025 | 12 | 25 | 2025 | west | rakesh | 25DEC2025 | 25DEC2025 |
| 13 | D013 | delivery | 180 | 90 | 3 | 7 | 93 | 1 | 5 | 2025 | 1 | 6 | 2025 | north | vinod | 05JAN2025 | 06JAN2025 |
| 14 | D014 | surveillance | 210 | 85 | 2 | 6 | 99 | 2 | 14 | 2025 | 2 | 14 | 2025 | south | arun | 14FEB2025 | 14FEB2025 |
| 15 | D015 | defense | 350 | 115 | 1 | 13 | 101 | 3 | 28 | 2025 | 3 | 28 | 2025 | west | lokesh | 28MAR2025 | 28MAR2025 |
What Are The Errors?
·
Battery_Usage > 100 (D002, D008, D015)
·
Success_Rate > 100 (D002, D005, D012, D015)
·
Negative Navigation_Errors (D004)
·
Landing_Date = Launch_Date (No duration)
·
Extra spaces not handled
·
Operator names not standardized
2. Corrected Dataset Full Version
data drone_clean;
set drone_raw;
Drone_ID = strip(upcase(Drone_ID));
Mission_Type = propcase(strip(Mission_Type));
Region = upcase(strip(Region));
Operator_Name = propcase(strip(Operator_Name));
if Battery_Usage > 100 then Battery_Usage = 100;
if Battery_Usage < 0 then Battery_Usage = 0;
if Success_Rate > 100 then Success_Rate = 100;
if Success_Rate < 0 then Success_Rate = 0;
if Navigation_Errors < 0 then Navigation_Errors = 0;
Flight_Duration_Days = intck('day',Launch_Date,Landing_Date);
Expected_Landing = intnx('day',Launch_Date,1);
format Expected_Landing date9.;
length Utilization_Class $8.;
if Flight_Time > 300 then Utilization_Class="High";
else if Flight_Time >150 then Utilization_Class="Medium";
else Utilization_Class="Low";
Fraud_Flag=0;
run;
proc print data=drone_clean;
run;
OUTPUT:
| Obs | Drone_ID | Mission_Type | Flight_Time | Battery_Usage | Navigation_Errors | Payload_Weight | Success_Rate | Launch_Month | Launch_Day | Launch_Year | Landing_Month | Landing_Day | Landing_Year | Region | Operator_Name | Launch_Date | Landing_Date | Flight_Duration_Days | Expected_Landing | Utilization_Class | Fraud_Flag |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | D001 | Surveillance | 120 | 80 | 2 | 5 | 98 | 1 | 15 | 2025 | 1 | 15 | 2025 | SOUTH | Ramesh | 15JAN2025 | 15JAN2025 | 0 | 16JAN2025 | Low | 0 |
| 2 | D002 | Delivery | 200 | 100 | 0 | 8 | 100 | 2 | 10 | 2025 | 2 | 10 | 2025 | NORTH | Suresh | 10FEB2025 | 10FEB2025 | 0 | 11FEB2025 | Medium | 0 |
| 3 | D003 | Agriculture | 90 | 60 | 5 | 10 | 85 | 3 | 5 | 2025 | 3 | 6 | 2025 | EAST | Kumar | 05MAR2025 | 06MAR2025 | 1 | 06MAR2025 | Low | 0 |
| 4 | D004 | Defense | 300 | 95 | 0 | 12 | 99 | 4 | 20 | 2025 | 4 | 20 | 2025 | WEST | Rajesh | 20APR2025 | 20APR2025 | 0 | 21APR2025 | Medium | 0 |
| 5 | D005 | Surveillance | 150 | 75 | 3 | 6 | 100 | 5 | 11 | 2025 | 5 | 11 | 2025 | SOUTH | Anil | 11MAY2025 | 11MAY2025 | 0 | 12MAY2025 | Low | 0 |
| 6 | D006 | Delivery | 220 | 85 | 1 | 7 | 96 | 6 | 1 | 2025 | 6 | 1 | 2025 | NORTH | Pradeep | 01JUN2025 | 01JUN2025 | 0 | 02JUN2025 | Medium | 0 |
| 7 | D007 | Agriculture | 130 | 55 | 4 | 9 | 88 | 7 | 19 | 2025 | 7 | 20 | 2025 | EAST | Sandeep | 19JUL2025 | 20JUL2025 | 1 | 20JUL2025 | Low | 0 |
| 8 | D008 | Defense | 400 | 100 | 0 | 15 | 100 | 8 | 22 | 2025 | 8 | 22 | 2025 | WEST | Manoj | 22AUG2025 | 22AUG2025 | 0 | 23AUG2025 | High | 0 |
| 9 | D009 | Delivery | 50 | 20 | 10 | 3 | 60 | 9 | 10 | 2025 | 9 | 10 | 2025 | NORTH | Ajay | 10SEP2025 | 10SEP2025 | 0 | 11SEP2025 | Low | 0 |
| 10 | D010 | Surveillance | 170 | 70 | 2 | 5 | 97 | 10 | 15 | 2025 | 10 | 15 | 2025 | SOUTH | Mahesh | 15OCT2025 | 15OCT2025 | 0 | 16OCT2025 | Medium | 0 |
| 11 | D011 | Agriculture | 95 | 65 | 6 | 8 | 84 | 11 | 12 | 2025 | 11 | 13 | 2025 | EAST | Naresh | 12NOV2025 | 13NOV2025 | 1 | 13NOV2025 | Low | 0 |
| 12 | D012 | Defense | 280 | 100 | 0 | 14 | 100 | 12 | 25 | 2025 | 12 | 25 | 2025 | WEST | Rakesh | 25DEC2025 | 25DEC2025 | 0 | 26DEC2025 | Medium | 0 |
| 13 | D013 | Delivery | 180 | 90 | 3 | 7 | 93 | 1 | 5 | 2025 | 1 | 6 | 2025 | NORTH | Vinod | 05JAN2025 | 06JAN2025 | 1 | 06JAN2025 | Medium | 0 |
| 14 | D014 | Surveillance | 210 | 85 | 2 | 6 | 99 | 2 | 14 | 2025 | 2 | 14 | 2025 | SOUTH | Arun | 14FEB2025 | 14FEB2025 | 0 | 15FEB2025 | Medium | 0 |
| 15 | D015 | Defense | 350 | 100 | 1 | 13 | 100 | 3 | 28 | 2025 | 3 | 28 | 2025 | WEST | Lokesh | 28MAR2025 | 28MAR2025 | 0 | 29MAR2025 | High | 0 |
SET
drone_raw;
Reads existing dataset.
STRIP
Removes leading and trailing spaces.
UPCASE
Converts to uppercase.
PROPCASE
Makes first letter capital.
IF
Battery_Usage > 100
Business rule validation.
INTCK
Calculates date difference.
INTNX
Adds interval to date.
FORMAT
Applies readable date format.
3. Fraud Detection Macro
%macro fraud_check;
data drone_final;
set drone_clean;
if Battery_Usage > 95 and Flight_Time < 60 then Fraud_Flag=1;
if Navigation_Errors=0 and Success_Rate=100 then Fraud_Flag=1;
if Flight_Duration_Days=0 then Fraud_Flag=1;
run;
proc print data=drone_final;
run;
%mend;
%fraud_check;
OUTPUT:
| Obs | Drone_ID | Mission_Type | Flight_Time | Battery_Usage | Navigation_Errors | Payload_Weight | Success_Rate | Launch_Month | Launch_Day | Launch_Year | Landing_Month | Landing_Day | Landing_Year | Region | Operator_Name | Launch_Date | Landing_Date | Flight_Duration_Days | Expected_Landing | Utilization_Class | Fraud_Flag |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | D001 | Surveillance | 120 | 80 | 2 | 5 | 98 | 1 | 15 | 2025 | 1 | 15 | 2025 | SOUTH | Ramesh | 15JAN2025 | 15JAN2025 | 0 | 16JAN2025 | Low | 1 |
| 2 | D002 | Delivery | 200 | 100 | 0 | 8 | 100 | 2 | 10 | 2025 | 2 | 10 | 2025 | NORTH | Suresh | 10FEB2025 | 10FEB2025 | 0 | 11FEB2025 | Medium | 1 |
| 3 | D003 | Agriculture | 90 | 60 | 5 | 10 | 85 | 3 | 5 | 2025 | 3 | 6 | 2025 | EAST | Kumar | 05MAR2025 | 06MAR2025 | 1 | 06MAR2025 | Low | 0 |
| 4 | D004 | Defense | 300 | 95 | 0 | 12 | 99 | 4 | 20 | 2025 | 4 | 20 | 2025 | WEST | Rajesh | 20APR2025 | 20APR2025 | 0 | 21APR2025 | Medium | 1 |
| 5 | D005 | Surveillance | 150 | 75 | 3 | 6 | 100 | 5 | 11 | 2025 | 5 | 11 | 2025 | SOUTH | Anil | 11MAY2025 | 11MAY2025 | 0 | 12MAY2025 | Low | 1 |
| 6 | D006 | Delivery | 220 | 85 | 1 | 7 | 96 | 6 | 1 | 2025 | 6 | 1 | 2025 | NORTH | Pradeep | 01JUN2025 | 01JUN2025 | 0 | 02JUN2025 | Medium | 1 |
| 7 | D007 | Agriculture | 130 | 55 | 4 | 9 | 88 | 7 | 19 | 2025 | 7 | 20 | 2025 | EAST | Sandeep | 19JUL2025 | 20JUL2025 | 1 | 20JUL2025 | Low | 0 |
| 8 | D008 | Defense | 400 | 100 | 0 | 15 | 100 | 8 | 22 | 2025 | 8 | 22 | 2025 | WEST | Manoj | 22AUG2025 | 22AUG2025 | 0 | 23AUG2025 | High | 1 |
| 9 | D009 | Delivery | 50 | 20 | 10 | 3 | 60 | 9 | 10 | 2025 | 9 | 10 | 2025 | NORTH | Ajay | 10SEP2025 | 10SEP2025 | 0 | 11SEP2025 | Low | 1 |
| 10 | D010 | Surveillance | 170 | 70 | 2 | 5 | 97 | 10 | 15 | 2025 | 10 | 15 | 2025 | SOUTH | Mahesh | 15OCT2025 | 15OCT2025 | 0 | 16OCT2025 | Medium | 1 |
| 11 | D011 | Agriculture | 95 | 65 | 6 | 8 | 84 | 11 | 12 | 2025 | 11 | 13 | 2025 | EAST | Naresh | 12NOV2025 | 13NOV2025 | 1 | 13NOV2025 | Low | 0 |
| 12 | D012 | Defense | 280 | 100 | 0 | 14 | 100 | 12 | 25 | 2025 | 12 | 25 | 2025 | WEST | Rakesh | 25DEC2025 | 25DEC2025 | 0 | 26DEC2025 | Medium | 1 |
| 13 | D013 | Delivery | 180 | 90 | 3 | 7 | 93 | 1 | 5 | 2025 | 1 | 6 | 2025 | NORTH | Vinod | 05JAN2025 | 06JAN2025 | 1 | 06JAN2025 | Medium | 0 |
| 14 | D014 | Surveillance | 210 | 85 | 2 | 6 | 99 | 2 | 14 | 2025 | 2 | 14 | 2025 | SOUTH | Arun | 14FEB2025 | 14FEB2025 | 0 | 15FEB2025 | Medium | 1 |
| 15 | D015 | Defense | 350 | 100 | 1 | 13 | 100 | 3 | 28 | 2025 | 3 | 28 | 2025 | WEST | Lokesh | 28MAR2025 | 28MAR2025 | 0 | 29MAR2025 | High | 1 |
·
Reusable logic
·
Centralized validation
·
Easy updates
·
Production ready
Fraud Detection Framework
Fraud detection logic is built around business
intelligence rules such as:
·
High battery usage + low flight time
·
Zero navigation errors + perfect success rate
·
Long-duration missions with minimal payload
·
Identical repeated performance metrics
·
Zero-duration flights
Fraud flags are designed at:
·
Flight level
·
Drone (subject) level
This ensures multi-level risk visibility.
Fraud logic must be:
·
Modular
·
Reusable
·
Documented
·
Auditable
4. Region Classification Dataset
data region_info;
input Region $ Zone $;
datalines;
NORTH Zone1
SOUTH Zone2
EAST Zone3
WEST Zone4
;
run;
proc print data=region_info;
run;
OUTPUT:
| Obs | Region | Zone |
|---|---|---|
| 1 | NORTH | Zone1 |
| 2 | SOUTH | Zone2 |
| 3 | EAST | Zone3 |
| 4 | WEST | Zone4 |
5. Merge
proc sort data=drone_final; by Region; run;
proc print data=drone_final;
run;
OUTPUT:
| Obs | Drone_ID | Mission_Type | Flight_Time | Battery_Usage | Navigation_Errors | Payload_Weight | Success_Rate | Launch_Month | Launch_Day | Launch_Year | Landing_Month | Landing_Day | Landing_Year | Region | Operator_Name | Launch_Date | Landing_Date | Flight_Duration_Days | Expected_Landing | Utilization_Class | Fraud_Flag |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | D003 | Agriculture | 90 | 60 | 5 | 10 | 85 | 3 | 5 | 2025 | 3 | 6 | 2025 | EAST | Kumar | 05MAR2025 | 06MAR2025 | 1 | 06MAR2025 | Low | 0 |
| 2 | D007 | Agriculture | 130 | 55 | 4 | 9 | 88 | 7 | 19 | 2025 | 7 | 20 | 2025 | EAST | Sandeep | 19JUL2025 | 20JUL2025 | 1 | 20JUL2025 | Low | 0 |
| 3 | D011 | Agriculture | 95 | 65 | 6 | 8 | 84 | 11 | 12 | 2025 | 11 | 13 | 2025 | EAST | Naresh | 12NOV2025 | 13NOV2025 | 1 | 13NOV2025 | Low | 0 |
| 4 | D002 | Delivery | 200 | 100 | 0 | 8 | 100 | 2 | 10 | 2025 | 2 | 10 | 2025 | NORTH | Suresh | 10FEB2025 | 10FEB2025 | 0 | 11FEB2025 | Medium | 1 |
| 5 | D006 | Delivery | 220 | 85 | 1 | 7 | 96 | 6 | 1 | 2025 | 6 | 1 | 2025 | NORTH | Pradeep | 01JUN2025 | 01JUN2025 | 0 | 02JUN2025 | Medium | 1 |
| 6 | D009 | Delivery | 50 | 20 | 10 | 3 | 60 | 9 | 10 | 2025 | 9 | 10 | 2025 | NORTH | Ajay | 10SEP2025 | 10SEP2025 | 0 | 11SEP2025 | Low | 1 |
| 7 | D013 | Delivery | 180 | 90 | 3 | 7 | 93 | 1 | 5 | 2025 | 1 | 6 | 2025 | NORTH | Vinod | 05JAN2025 | 06JAN2025 | 1 | 06JAN2025 | Medium | 0 |
| 8 | D001 | Surveillance | 120 | 80 | 2 | 5 | 98 | 1 | 15 | 2025 | 1 | 15 | 2025 | SOUTH | Ramesh | 15JAN2025 | 15JAN2025 | 0 | 16JAN2025 | Low | 1 |
| 9 | D005 | Surveillance | 150 | 75 | 3 | 6 | 100 | 5 | 11 | 2025 | 5 | 11 | 2025 | SOUTH | Anil | 11MAY2025 | 11MAY2025 | 0 | 12MAY2025 | Low | 1 |
| 10 | D010 | Surveillance | 170 | 70 | 2 | 5 | 97 | 10 | 15 | 2025 | 10 | 15 | 2025 | SOUTH | Mahesh | 15OCT2025 | 15OCT2025 | 0 | 16OCT2025 | Medium | 1 |
| 11 | D014 | Surveillance | 210 | 85 | 2 | 6 | 99 | 2 | 14 | 2025 | 2 | 14 | 2025 | SOUTH | Arun | 14FEB2025 | 14FEB2025 | 0 | 15FEB2025 | Medium | 1 |
| 12 | D004 | Defense | 300 | 95 | 0 | 12 | 99 | 4 | 20 | 2025 | 4 | 20 | 2025 | WEST | Rajesh | 20APR2025 | 20APR2025 | 0 | 21APR2025 | Medium | 1 |
| 13 | D008 | Defense | 400 | 100 | 0 | 15 | 100 | 8 | 22 | 2025 | 8 | 22 | 2025 | WEST | Manoj | 22AUG2025 | 22AUG2025 | 0 | 23AUG2025 | High | 1 |
| 14 | D012 | Defense | 280 | 100 | 0 | 14 | 100 | 12 | 25 | 2025 | 12 | 25 | 2025 | WEST | Rakesh | 25DEC2025 | 25DEC2025 | 0 | 26DEC2025 | Medium | 1 |
| 15 | D015 | Defense | 350 | 100 | 1 | 13 | 100 | 3 | 28 | 2025 | 3 | 28 | 2025 | WEST | Lokesh | 28MAR2025 | 28MAR2025 | 0 | 29MAR2025 | High | 1 |
proc sort data=region_info; by Region; run;
proc print data=region_info;
run;
OUTPUT:
| Obs | Region | Zone |
|---|---|---|
| 1 | EAST | Zone3 |
| 2 | NORTH | Zone1 |
| 3 | SOUTH | Zone2 |
| 4 | WEST | Zone4 |
data drone_merged;
merge drone_final region_info;
by Region;
run;
proc print data=drone_merged;
run;
OUTPUT:
| Obs | Drone_ID | Mission_Type | Flight_Time | Battery_Usage | Navigation_Errors | Payload_Weight | Success_Rate | Launch_Month | Launch_Day | Launch_Year | Landing_Month | Landing_Day | Landing_Year | Region | Operator_Name | Launch_Date | Landing_Date | Flight_Duration_Days | Expected_Landing | Utilization_Class | Fraud_Flag | Zone |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | D003 | Agriculture | 90 | 60 | 5 | 10 | 85 | 3 | 5 | 2025 | 3 | 6 | 2025 | EAST | Kumar | 05MAR2025 | 06MAR2025 | 1 | 06MAR2025 | Low | 0 | Zone3 |
| 2 | D007 | Agriculture | 130 | 55 | 4 | 9 | 88 | 7 | 19 | 2025 | 7 | 20 | 2025 | EAST | Sandeep | 19JUL2025 | 20JUL2025 | 1 | 20JUL2025 | Low | 0 | Zone3 |
| 3 | D011 | Agriculture | 95 | 65 | 6 | 8 | 84 | 11 | 12 | 2025 | 11 | 13 | 2025 | EAST | Naresh | 12NOV2025 | 13NOV2025 | 1 | 13NOV2025 | Low | 0 | Zone3 |
| 4 | D002 | Delivery | 200 | 100 | 0 | 8 | 100 | 2 | 10 | 2025 | 2 | 10 | 2025 | NORTH | Suresh | 10FEB2025 | 10FEB2025 | 0 | 11FEB2025 | Medium | 1 | Zone1 |
| 5 | D006 | Delivery | 220 | 85 | 1 | 7 | 96 | 6 | 1 | 2025 | 6 | 1 | 2025 | NORTH | Pradeep | 01JUN2025 | 01JUN2025 | 0 | 02JUN2025 | Medium | 1 | Zone1 |
| 6 | D009 | Delivery | 50 | 20 | 10 | 3 | 60 | 9 | 10 | 2025 | 9 | 10 | 2025 | NORTH | Ajay | 10SEP2025 | 10SEP2025 | 0 | 11SEP2025 | Low | 1 | Zone1 |
| 7 | D013 | Delivery | 180 | 90 | 3 | 7 | 93 | 1 | 5 | 2025 | 1 | 6 | 2025 | NORTH | Vinod | 05JAN2025 | 06JAN2025 | 1 | 06JAN2025 | Medium | 0 | Zone1 |
| 8 | D001 | Surveillance | 120 | 80 | 2 | 5 | 98 | 1 | 15 | 2025 | 1 | 15 | 2025 | SOUTH | Ramesh | 15JAN2025 | 15JAN2025 | 0 | 16JAN2025 | Low | 1 | Zone2 |
| 9 | D005 | Surveillance | 150 | 75 | 3 | 6 | 100 | 5 | 11 | 2025 | 5 | 11 | 2025 | SOUTH | Anil | 11MAY2025 | 11MAY2025 | 0 | 12MAY2025 | Low | 1 | Zone2 |
| 10 | D010 | Surveillance | 170 | 70 | 2 | 5 | 97 | 10 | 15 | 2025 | 10 | 15 | 2025 | SOUTH | Mahesh | 15OCT2025 | 15OCT2025 | 0 | 16OCT2025 | Medium | 1 | Zone2 |
| 11 | D014 | Surveillance | 210 | 85 | 2 | 6 | 99 | 2 | 14 | 2025 | 2 | 14 | 2025 | SOUTH | Arun | 14FEB2025 | 14FEB2025 | 0 | 15FEB2025 | Medium | 1 | Zone2 |
| 12 | D004 | Defense | 300 | 95 | 0 | 12 | 99 | 4 | 20 | 2025 | 4 | 20 | 2025 | WEST | Rajesh | 20APR2025 | 20APR2025 | 0 | 21APR2025 | Medium | 1 | Zone4 |
| 13 | D008 | Defense | 400 | 100 | 0 | 15 | 100 | 8 | 22 | 2025 | 8 | 22 | 2025 | WEST | Manoj | 22AUG2025 | 22AUG2025 | 0 | 23AUG2025 | High | 1 | Zone4 |
| 14 | D012 | Defense | 280 | 100 | 0 | 14 | 100 | 12 | 25 | 2025 | 12 | 25 | 2025 | WEST | Rakesh | 25DEC2025 | 25DEC2025 | 0 | 26DEC2025 | Medium | 1 | Zone4 |
| 15 | D015 | Defense | 350 | 100 | 1 | 13 | 100 | 3 | 28 | 2025 | 3 | 28 | 2025 | WEST | Lokesh | 28MAR2025 | 28MAR2025 | 0 | 29MAR2025 | High | 1 | Zone4 |
6. PROC APPEND
proc append base=drone_merged
data=drone_final force;
run;
proc print data=drone_merged;
run;
OUTPUT:
| Obs | Drone_ID | Mission_Type | Flight_Time | Battery_Usage | Navigation_Errors | Payload_Weight | Success_Rate | Launch_Month | Launch_Day | Launch_Year | Landing_Month | Landing_Day | Landing_Year | Region | Operator_Name | Launch_Date | Landing_Date | Flight_Duration_Days | Expected_Landing | Utilization_Class | Fraud_Flag | Zone |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | D003 | Agriculture | 90 | 60 | 5 | 10 | 85 | 3 | 5 | 2025 | 3 | 6 | 2025 | EAST | Kumar | 05MAR2025 | 06MAR2025 | 1 | 06MAR2025 | Low | 0 | Zone3 |
| 2 | D007 | Agriculture | 130 | 55 | 4 | 9 | 88 | 7 | 19 | 2025 | 7 | 20 | 2025 | EAST | Sandeep | 19JUL2025 | 20JUL2025 | 1 | 20JUL2025 | Low | 0 | Zone3 |
| 3 | D011 | Agriculture | 95 | 65 | 6 | 8 | 84 | 11 | 12 | 2025 | 11 | 13 | 2025 | EAST | Naresh | 12NOV2025 | 13NOV2025 | 1 | 13NOV2025 | Low | 0 | Zone3 |
| 4 | D002 | Delivery | 200 | 100 | 0 | 8 | 100 | 2 | 10 | 2025 | 2 | 10 | 2025 | NORTH | Suresh | 10FEB2025 | 10FEB2025 | 0 | 11FEB2025 | Medium | 1 | Zone1 |
| 5 | D006 | Delivery | 220 | 85 | 1 | 7 | 96 | 6 | 1 | 2025 | 6 | 1 | 2025 | NORTH | Pradeep | 01JUN2025 | 01JUN2025 | 0 | 02JUN2025 | Medium | 1 | Zone1 |
| 6 | D009 | Delivery | 50 | 20 | 10 | 3 | 60 | 9 | 10 | 2025 | 9 | 10 | 2025 | NORTH | Ajay | 10SEP2025 | 10SEP2025 | 0 | 11SEP2025 | Low | 1 | Zone1 |
| 7 | D013 | Delivery | 180 | 90 | 3 | 7 | 93 | 1 | 5 | 2025 | 1 | 6 | 2025 | NORTH | Vinod | 05JAN2025 | 06JAN2025 | 1 | 06JAN2025 | Medium | 0 | Zone1 |
| 8 | D001 | Surveillance | 120 | 80 | 2 | 5 | 98 | 1 | 15 | 2025 | 1 | 15 | 2025 | SOUTH | Ramesh | 15JAN2025 | 15JAN2025 | 0 | 16JAN2025 | Low | 1 | Zone2 |
| 9 | D005 | Surveillance | 150 | 75 | 3 | 6 | 100 | 5 | 11 | 2025 | 5 | 11 | 2025 | SOUTH | Anil | 11MAY2025 | 11MAY2025 | 0 | 12MAY2025 | Low | 1 | Zone2 |
| 10 | D010 | Surveillance | 170 | 70 | 2 | 5 | 97 | 10 | 15 | 2025 | 10 | 15 | 2025 | SOUTH | Mahesh | 15OCT2025 | 15OCT2025 | 0 | 16OCT2025 | Medium | 1 | Zone2 |
| 11 | D014 | Surveillance | 210 | 85 | 2 | 6 | 99 | 2 | 14 | 2025 | 2 | 14 | 2025 | SOUTH | Arun | 14FEB2025 | 14FEB2025 | 0 | 15FEB2025 | Medium | 1 | Zone2 |
| 12 | D004 | Defense | 300 | 95 | 0 | 12 | 99 | 4 | 20 | 2025 | 4 | 20 | 2025 | WEST | Rajesh | 20APR2025 | 20APR2025 | 0 | 21APR2025 | Medium | 1 | Zone4 |
| 13 | D008 | Defense | 400 | 100 | 0 | 15 | 100 | 8 | 22 | 2025 | 8 | 22 | 2025 | WEST | Manoj | 22AUG2025 | 22AUG2025 | 0 | 23AUG2025 | High | 1 | Zone4 |
| 14 | D012 | Defense | 280 | 100 | 0 | 14 | 100 | 12 | 25 | 2025 | 12 | 25 | 2025 | WEST | Rakesh | 25DEC2025 | 25DEC2025 | 0 | 26DEC2025 | Medium | 1 | Zone4 |
| 15 | D015 | Defense | 350 | 100 | 1 | 13 | 100 | 3 | 28 | 2025 | 3 | 28 | 2025 | WEST | Lokesh | 28MAR2025 | 28MAR2025 | 0 | 29MAR2025 | High | 1 | Zone4 |
| 16 | D003 | Agriculture | 90 | 60 | 5 | 10 | 85 | 3 | 5 | 2025 | 3 | 6 | 2025 | EAST | Kumar | 05MAR2025 | 06MAR2025 | 1 | 06MAR2025 | Low | 0 | |
| 17 | D007 | Agriculture | 130 | 55 | 4 | 9 | 88 | 7 | 19 | 2025 | 7 | 20 | 2025 | EAST | Sandeep | 19JUL2025 | 20JUL2025 | 1 | 20JUL2025 | Low | 0 | |
| 18 | D011 | Agriculture | 95 | 65 | 6 | 8 | 84 | 11 | 12 | 2025 | 11 | 13 | 2025 | EAST | Naresh | 12NOV2025 | 13NOV2025 | 1 | 13NOV2025 | Low | 0 | |
| 19 | D002 | Delivery | 200 | 100 | 0 | 8 | 100 | 2 | 10 | 2025 | 2 | 10 | 2025 | NORTH | Suresh | 10FEB2025 | 10FEB2025 | 0 | 11FEB2025 | Medium | 1 | |
| 20 | D006 | Delivery | 220 | 85 | 1 | 7 | 96 | 6 | 1 | 2025 | 6 | 1 | 2025 | NORTH | Pradeep | 01JUN2025 | 01JUN2025 | 0 | 02JUN2025 | Medium | 1 | |
| 21 | D009 | Delivery | 50 | 20 | 10 | 3 | 60 | 9 | 10 | 2025 | 9 | 10 | 2025 | NORTH | Ajay | 10SEP2025 | 10SEP2025 | 0 | 11SEP2025 | Low | 1 | |
| 22 | D013 | Delivery | 180 | 90 | 3 | 7 | 93 | 1 | 5 | 2025 | 1 | 6 | 2025 | NORTH | Vinod | 05JAN2025 | 06JAN2025 | 1 | 06JAN2025 | Medium | 0 | |
| 23 | D001 | Surveillance | 120 | 80 | 2 | 5 | 98 | 1 | 15 | 2025 | 1 | 15 | 2025 | SOUTH | Ramesh | 15JAN2025 | 15JAN2025 | 0 | 16JAN2025 | Low | 1 | |
| 24 | D005 | Surveillance | 150 | 75 | 3 | 6 | 100 | 5 | 11 | 2025 | 5 | 11 | 2025 | SOUTH | Anil | 11MAY2025 | 11MAY2025 | 0 | 12MAY2025 | Low | 1 | |
| 25 | D010 | Surveillance | 170 | 70 | 2 | 5 | 97 | 10 | 15 | 2025 | 10 | 15 | 2025 | SOUTH | Mahesh | 15OCT2025 | 15OCT2025 | 0 | 16OCT2025 | Medium | 1 | |
| 26 | D014 | Surveillance | 210 | 85 | 2 | 6 | 99 | 2 | 14 | 2025 | 2 | 14 | 2025 | SOUTH | Arun | 14FEB2025 | 14FEB2025 | 0 | 15FEB2025 | Medium | 1 | |
| 27 | D004 | Defense | 300 | 95 | 0 | 12 | 99 | 4 | 20 | 2025 | 4 | 20 | 2025 | WEST | Rajesh | 20APR2025 | 20APR2025 | 0 | 21APR2025 | Medium | 1 | |
| 28 | D008 | Defense | 400 | 100 | 0 | 15 | 100 | 8 | 22 | 2025 | 8 | 22 | 2025 | WEST | Manoj | 22AUG2025 | 22AUG2025 | 0 | 23AUG2025 | High | 1 | |
| 29 | D012 | Defense | 280 | 100 | 0 | 14 | 100 | 12 | 25 | 2025 | 12 | 25 | 2025 | WEST | Rakesh | 25DEC2025 | 25DEC2025 | 0 | 26DEC2025 | Medium | 1 | |
| 30 | D015 | Defense | 350 | 100 | 1 | 13 | 100 | 3 | 28 | 2025 | 3 | 28 | 2025 | WEST | Lokesh | 28MAR2025 | 28MAR2025 | 0 | 29MAR2025 | High | 1 |
7. PROC TRANSPOSE
proc sort data=drone_final; by Drone_ID; run;
proc print data=drone_final;
run;
OUTPUT:
| Obs | Drone_ID | Mission_Type | Flight_Time | Battery_Usage | Navigation_Errors | Payload_Weight | Success_Rate | Launch_Month | Launch_Day | Launch_Year | Landing_Month | Landing_Day | Landing_Year | Region | Operator_Name | Launch_Date | Landing_Date | Flight_Duration_Days | Expected_Landing | Utilization_Class | Fraud_Flag |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | D001 | Surveillance | 120 | 80 | 2 | 5 | 98 | 1 | 15 | 2025 | 1 | 15 | 2025 | SOUTH | Ramesh | 15JAN2025 | 15JAN2025 | 0 | 16JAN2025 | Low | 1 |
| 2 | D002 | Delivery | 200 | 100 | 0 | 8 | 100 | 2 | 10 | 2025 | 2 | 10 | 2025 | NORTH | Suresh | 10FEB2025 | 10FEB2025 | 0 | 11FEB2025 | Medium | 1 |
| 3 | D003 | Agriculture | 90 | 60 | 5 | 10 | 85 | 3 | 5 | 2025 | 3 | 6 | 2025 | EAST | Kumar | 05MAR2025 | 06MAR2025 | 1 | 06MAR2025 | Low | 0 |
| 4 | D004 | Defense | 300 | 95 | 0 | 12 | 99 | 4 | 20 | 2025 | 4 | 20 | 2025 | WEST | Rajesh | 20APR2025 | 20APR2025 | 0 | 21APR2025 | Medium | 1 |
| 5 | D005 | Surveillance | 150 | 75 | 3 | 6 | 100 | 5 | 11 | 2025 | 5 | 11 | 2025 | SOUTH | Anil | 11MAY2025 | 11MAY2025 | 0 | 12MAY2025 | Low | 1 |
| 6 | D006 | Delivery | 220 | 85 | 1 | 7 | 96 | 6 | 1 | 2025 | 6 | 1 | 2025 | NORTH | Pradeep | 01JUN2025 | 01JUN2025 | 0 | 02JUN2025 | Medium | 1 |
| 7 | D007 | Agriculture | 130 | 55 | 4 | 9 | 88 | 7 | 19 | 2025 | 7 | 20 | 2025 | EAST | Sandeep | 19JUL2025 | 20JUL2025 | 1 | 20JUL2025 | Low | 0 |
| 8 | D008 | Defense | 400 | 100 | 0 | 15 | 100 | 8 | 22 | 2025 | 8 | 22 | 2025 | WEST | Manoj | 22AUG2025 | 22AUG2025 | 0 | 23AUG2025 | High | 1 |
| 9 | D009 | Delivery | 50 | 20 | 10 | 3 | 60 | 9 | 10 | 2025 | 9 | 10 | 2025 | NORTH | Ajay | 10SEP2025 | 10SEP2025 | 0 | 11SEP2025 | Low | 1 |
| 10 | D010 | Surveillance | 170 | 70 | 2 | 5 | 97 | 10 | 15 | 2025 | 10 | 15 | 2025 | SOUTH | Mahesh | 15OCT2025 | 15OCT2025 | 0 | 16OCT2025 | Medium | 1 |
| 11 | D011 | Agriculture | 95 | 65 | 6 | 8 | 84 | 11 | 12 | 2025 | 11 | 13 | 2025 | EAST | Naresh | 12NOV2025 | 13NOV2025 | 1 | 13NOV2025 | Low | 0 |
| 12 | D012 | Defense | 280 | 100 | 0 | 14 | 100 | 12 | 25 | 2025 | 12 | 25 | 2025 | WEST | Rakesh | 25DEC2025 | 25DEC2025 | 0 | 26DEC2025 | Medium | 1 |
| 13 | D013 | Delivery | 180 | 90 | 3 | 7 | 93 | 1 | 5 | 2025 | 1 | 6 | 2025 | NORTH | Vinod | 05JAN2025 | 06JAN2025 | 1 | 06JAN2025 | Medium | 0 |
| 14 | D014 | Surveillance | 210 | 85 | 2 | 6 | 99 | 2 | 14 | 2025 | 2 | 14 | 2025 | SOUTH | Arun | 14FEB2025 | 14FEB2025 | 0 | 15FEB2025 | Medium | 1 |
| 15 | D015 | Defense | 350 | 100 | 1 | 13 | 100 | 3 | 28 | 2025 | 3 | 28 | 2025 | WEST | Lokesh | 28MAR2025 | 28MAR2025 | 0 | 29MAR2025 | High | 1 |
proc transpose data=drone_final out=drone_trans;
by Drone_ID;
var Flight_Time Battery_Usage Success_Rate;
run;
proc print data=drone_trans;
run;
OUTPUT:
| Obs | Drone_ID | _NAME_ | COL1 |
|---|---|---|---|
| 1 | D001 | Flight_Time | 120 |
| 2 | D001 | Battery_Usage | 80 |
| 3 | D001 | Success_Rate | 98 |
| 4 | D002 | Flight_Time | 200 |
| 5 | D002 | Battery_Usage | 100 |
| 6 | D002 | Success_Rate | 100 |
| 7 | D003 | Flight_Time | 90 |
| 8 | D003 | Battery_Usage | 60 |
| 9 | D003 | Success_Rate | 85 |
| 10 | D004 | Flight_Time | 300 |
| 11 | D004 | Battery_Usage | 95 |
| 12 | D004 | Success_Rate | 99 |
| 13 | D005 | Flight_Time | 150 |
| 14 | D005 | Battery_Usage | 75 |
| 15 | D005 | Success_Rate | 100 |
| 16 | D006 | Flight_Time | 220 |
| 17 | D006 | Battery_Usage | 85 |
| 18 | D006 | Success_Rate | 96 |
| 19 | D007 | Flight_Time | 130 |
| 20 | D007 | Battery_Usage | 55 |
| 21 | D007 | Success_Rate | 88 |
| 22 | D008 | Flight_Time | 400 |
| 23 | D008 | Battery_Usage | 100 |
| 24 | D008 | Success_Rate | 100 |
| 25 | D009 | Flight_Time | 50 |
| 26 | D009 | Battery_Usage | 20 |
| 27 | D009 | Success_Rate | 60 |
| 28 | D010 | Flight_Time | 170 |
| 29 | D010 | Battery_Usage | 70 |
| 30 | D010 | Success_Rate | 97 |
| 31 | D011 | Flight_Time | 95 |
| 32 | D011 | Battery_Usage | 65 |
| 33 | D011 | Success_Rate | 84 |
| 34 | D012 | Flight_Time | 280 |
| 35 | D012 | Battery_Usage | 100 |
| 36 | D012 | Success_Rate | 100 |
| 37 | D013 | Flight_Time | 180 |
| 38 | D013 | Battery_Usage | 90 |
| 39 | D013 | Success_Rate | 93 |
| 40 | D014 | Flight_Time | 210 |
| 41 | D014 | Battery_Usage | 85 |
| 42 | D014 | Success_Rate | 99 |
| 43 | D015 | Flight_Time | 350 |
| 44 | D015 | Battery_Usage | 100 |
| 45 | D015 | Success_Rate | 100 |
8. COALESCE
data drone_coalesce;
set drone_final;
Adjusted_Success = coalesce(Success_Rate,0);
run;
proc print data=drone_coalesce;
run;
OUTPUT:
| Obs | Drone_ID | Mission_Type | Flight_Time | Battery_Usage | Navigation_Errors | Payload_Weight | Success_Rate | Launch_Month | Launch_Day | Launch_Year | Landing_Month | Landing_Day | Landing_Year | Region | Operator_Name | Launch_Date | Landing_Date | Flight_Duration_Days | Expected_Landing | Utilization_Class | Fraud_Flag | Adjusted_Success |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | D001 | Surveillance | 120 | 80 | 2 | 5 | 98 | 1 | 15 | 2025 | 1 | 15 | 2025 | SOUTH | Ramesh | 15JAN2025 | 15JAN2025 | 0 | 16JAN2025 | Low | 1 | 98 |
| 2 | D002 | Delivery | 200 | 100 | 0 | 8 | 100 | 2 | 10 | 2025 | 2 | 10 | 2025 | NORTH | Suresh | 10FEB2025 | 10FEB2025 | 0 | 11FEB2025 | Medium | 1 | 100 |
| 3 | D003 | Agriculture | 90 | 60 | 5 | 10 | 85 | 3 | 5 | 2025 | 3 | 6 | 2025 | EAST | Kumar | 05MAR2025 | 06MAR2025 | 1 | 06MAR2025 | Low | 0 | 85 |
| 4 | D004 | Defense | 300 | 95 | 0 | 12 | 99 | 4 | 20 | 2025 | 4 | 20 | 2025 | WEST | Rajesh | 20APR2025 | 20APR2025 | 0 | 21APR2025 | Medium | 1 | 99 |
| 5 | D005 | Surveillance | 150 | 75 | 3 | 6 | 100 | 5 | 11 | 2025 | 5 | 11 | 2025 | SOUTH | Anil | 11MAY2025 | 11MAY2025 | 0 | 12MAY2025 | Low | 1 | 100 |
| 6 | D006 | Delivery | 220 | 85 | 1 | 7 | 96 | 6 | 1 | 2025 | 6 | 1 | 2025 | NORTH | Pradeep | 01JUN2025 | 01JUN2025 | 0 | 02JUN2025 | Medium | 1 | 96 |
| 7 | D007 | Agriculture | 130 | 55 | 4 | 9 | 88 | 7 | 19 | 2025 | 7 | 20 | 2025 | EAST | Sandeep | 19JUL2025 | 20JUL2025 | 1 | 20JUL2025 | Low | 0 | 88 |
| 8 | D008 | Defense | 400 | 100 | 0 | 15 | 100 | 8 | 22 | 2025 | 8 | 22 | 2025 | WEST | Manoj | 22AUG2025 | 22AUG2025 | 0 | 23AUG2025 | High | 1 | 100 |
| 9 | D009 | Delivery | 50 | 20 | 10 | 3 | 60 | 9 | 10 | 2025 | 9 | 10 | 2025 | NORTH | Ajay | 10SEP2025 | 10SEP2025 | 0 | 11SEP2025 | Low | 1 | 60 |
| 10 | D010 | Surveillance | 170 | 70 | 2 | 5 | 97 | 10 | 15 | 2025 | 10 | 15 | 2025 | SOUTH | Mahesh | 15OCT2025 | 15OCT2025 | 0 | 16OCT2025 | Medium | 1 | 97 |
| 11 | D011 | Agriculture | 95 | 65 | 6 | 8 | 84 | 11 | 12 | 2025 | 11 | 13 | 2025 | EAST | Naresh | 12NOV2025 | 13NOV2025 | 1 | 13NOV2025 | Low | 0 | 84 |
| 12 | D012 | Defense | 280 | 100 | 0 | 14 | 100 | 12 | 25 | 2025 | 12 | 25 | 2025 | WEST | Rakesh | 25DEC2025 | 25DEC2025 | 0 | 26DEC2025 | Medium | 1 | 100 |
| 13 | D013 | Delivery | 180 | 90 | 3 | 7 | 93 | 1 | 5 | 2025 | 1 | 6 | 2025 | NORTH | Vinod | 05JAN2025 | 06JAN2025 | 1 | 06JAN2025 | Medium | 0 | 93 |
| 14 | D014 | Surveillance | 210 | 85 | 2 | 6 | 99 | 2 | 14 | 2025 | 2 | 14 | 2025 | SOUTH | Arun | 14FEB2025 | 14FEB2025 | 0 | 15FEB2025 | Medium | 1 | 99 |
| 15 | D015 | Defense | 350 | 100 | 1 | 13 | 100 | 3 | 28 | 2025 | 3 | 28 | 2025 | WEST | Lokesh | 28MAR2025 | 28MAR2025 | 0 | 29MAR2025 | High | 1 | 100 |
9. PROC DATASETS DELETE
proc datasets library=work nolist;
delete drone_raw drone_clean;
quit;
LOG:
ADAM STARTS:
1. Source Dataset (Operational Data)
data drone_operational;
input Drone_ID $ Mission_Type:$18. Flight_Time Battery_Usage Navigation_Errors
Payload_Weight Success_Rate Launch_Date :date9.
Landing_Date :date9. Region $ Operator_Name $;
format Launch_Date Landing_Date date9.;
datalines;
D001 Surveillance 120 80 2 5 98 15JAN2025 16JAN2025 SOUTH Ramesh
D002 Delivery 200 95 0 8 100 10FEB2025 10FEB2025 NORTH Suresh
D003 Agriculture 90 60 5 10 85 05MAR2025 06MAR2025 EAST Kumar
D004 Defense 300 95 0 12 99 20APR2025 20APR2025 WEST Rajesh
D005 Surveillance 150 75 3 6 97 11MAY2025 11MAY2025 SOUTH Anil
D006 Delivery 220 85 1 7 96 01JUN2025 02JUN2025 NORTH Pradeep
D007 Agriculture 130 55 4 9 88 19JUL2025 20JUL2025 EAST Sandeep
D008 Defense 400 100 0 15 100 22AUG2025 22AUG2025 WEST Manoj
D009 Delivery 50 20 10 3 60 10SEP2025 10SEP2025 NORTH Ajay
D010 Surveillance 170 70 2 5 97 15OCT2025 16OCT2025 SOUTH Mahesh
D011 Agriculture 95 65 6 8 84 12NOV2025 13NOV2025 EAST Naresh
D012 Defense 280 100 0 14 100 25DEC2025 25DEC2025 WEST Rakesh
D013 Delivery 180 90 3 7 93 05JAN2025 06JAN2025 NORTH Vinod
D014 Surveillance 210 85 2 6 99 14FEB2025 15FEB2025 SOUTH Arun
D015 Defense 350 100 1 13 100 28MAR2025 28MAR2025 WEST Lokesh
;
run;
proc print data=drone_operational;
run;
OUTPUT:
| Obs | Drone_ID | Mission_Type | Flight_Time | Battery_Usage | Navigation_Errors | Payload_Weight | Success_Rate | Launch_Date | Landing_Date | Region | Operator_Name |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | D001 | Surveillance | 120 | 80 | 2 | 5 | 98 | 15JAN2025 | 16JAN2025 | SOUTH | Ramesh |
| 2 | D002 | Delivery | 200 | 95 | 0 | 8 | 100 | 10FEB2025 | 10FEB2025 | NORTH | Suresh |
| 3 | D003 | Agriculture | 90 | 60 | 5 | 10 | 85 | 05MAR2025 | 06MAR2025 | EAST | Kumar |
| 4 | D004 | Defense | 300 | 95 | 0 | 12 | 99 | 20APR2025 | 20APR2025 | WEST | Rajesh |
| 5 | D005 | Surveillance | 150 | 75 | 3 | 6 | 97 | 11MAY2025 | 11MAY2025 | SOUTH | Anil |
| 6 | D006 | Delivery | 220 | 85 | 1 | 7 | 96 | 01JUN2025 | 02JUN2025 | NORTH | Pradeep |
| 7 | D007 | Agriculture | 130 | 55 | 4 | 9 | 88 | 19JUL2025 | 20JUL2025 | EAST | Sandeep |
| 8 | D008 | Defense | 400 | 100 | 0 | 15 | 100 | 22AUG2025 | 22AUG2025 | WEST | Manoj |
| 9 | D009 | Delivery | 50 | 20 | 10 | 3 | 60 | 10SEP2025 | 10SEP2025 | NORTH | Ajay |
| 10 | D010 | Surveillance | 170 | 70 | 2 | 5 | 97 | 15OCT2025 | 16OCT2025 | SOUTH | Mahesh |
| 11 | D011 | Agriculture | 95 | 65 | 6 | 8 | 84 | 12NOV2025 | 13NOV2025 | EAST | Naresh |
| 12 | D012 | Defense | 280 | 100 | 0 | 14 | 100 | 25DEC2025 | 25DEC2025 | WEST | Rakesh |
| 13 | D013 | Delivery | 180 | 90 | 3 | 7 | 93 | 05JAN2025 | 06JAN2025 | NORTH | Vinod |
| 14 | D014 | Surveillance | 210 | 85 | 2 | 6 | 99 | 14FEB2025 | 15FEB2025 | SOUTH | Arun |
| 15 | D015 | Defense | 350 | 100 | 1 | 13 | 100 | 28MAR2025 | 28MAR2025 | WEST | Lokesh |
2. Create ADSL_DRONE (Subject-Level Dataset)
Concept:
One record per Drone_ID.
Derived variables:
·
TRT01P → Primary mission category
·
TOT_FLIGHT_TIME
·
AVG_SUCCESS_RATE
·
MAX_BATTERY_USAGE
·
FRAUD_ANYFL
proc sql;
create table ADSL_DRONE as
select
Drone_ID as USUBJID,
upcase(Region) as REGION,
propcase(Mission_Type) as TRT01P,
sum(Flight_Time) as TOTFLTIME,
mean(Success_Rate) as AVGSUCC,
max(Battery_Usage) as MAXBAT,
count(*) as TOTFLIGHTS
from drone_operational
group by Drone_ID, Region, Mission_Type;
quit;
proc print data=ADSL_DRONE;
run;
OUTPUT:
| Obs | USUBJID | REGION | TRT01P | TOTFLTIME | AVGSUCC | MAXBAT | TOTFLIGHTS |
|---|---|---|---|---|---|---|---|
| 1 | D001 | SOUTH | Surveillance | 120 | 98 | 80 | 1 |
| 2 | D002 | NORTH | Delivery | 200 | 100 | 95 | 1 |
| 3 | D003 | EAST | Agriculture | 90 | 85 | 60 | 1 |
| 4 | D004 | WEST | Defense | 300 | 99 | 95 | 1 |
| 5 | D005 | SOUTH | Surveillance | 150 | 97 | 75 | 1 |
| 6 | D006 | NORTH | Delivery | 220 | 96 | 85 | 1 |
| 7 | D007 | EAST | Agriculture | 130 | 88 | 55 | 1 |
| 8 | D008 | WEST | Defense | 400 | 100 | 100 | 1 |
| 9 | D009 | NORTH | Delivery | 50 | 60 | 20 | 1 |
| 10 | D010 | SOUTH | Surveillance | 170 | 97 | 70 | 1 |
| 11 | D011 | EAST | Agriculture | 95 | 84 | 65 | 1 |
| 12 | D012 | WEST | Defense | 280 | 100 | 100 | 1 |
| 13 | D013 | NORTH | Delivery | 180 | 93 | 90 | 1 |
| 14 | D014 | SOUTH | Surveillance | 210 | 99 | 85 | 1 |
| 15 | D015 | WEST | Defense | 350 | 100 | 100 | 1 |
USUBJID
ADaM requires unique subject ID.
TRT01P
Treatment variable equivalent → Mission type.
TOTFLTIME
Total exposure (like treatment duration).
AVGSUCC
Mean success rate.
MAXBAT
Worst-case battery utilization.
3. Add Fraud Flag to ADSL
data ADSL_DRONE;
set ADSL_DRONE;
if MAXBAT=100 and AVGSUCC=100 then FRAUD_ANYFL="Y";
else FRAUD_ANYFL="N";
run;
proc print data=ADSL_DRONE;
run;
OUTPUT:
| Obs | USUBJID | REGION | TRT01P | TOTFLTIME | AVGSUCC | MAXBAT | TOTFLIGHTS | FRAUD_ANYFL |
|---|---|---|---|---|---|---|---|---|
| 1 | D001 | SOUTH | Surveillance | 120 | 98 | 80 | 1 | N |
| 2 | D002 | NORTH | Delivery | 200 | 100 | 95 | 1 | N |
| 3 | D003 | EAST | Agriculture | 90 | 85 | 60 | 1 | N |
| 4 | D004 | WEST | Defense | 300 | 99 | 95 | 1 | N |
| 5 | D005 | SOUTH | Surveillance | 150 | 97 | 75 | 1 | N |
| 6 | D006 | NORTH | Delivery | 220 | 96 | 85 | 1 | N |
| 7 | D007 | EAST | Agriculture | 130 | 88 | 55 | 1 | N |
| 8 | D008 | WEST | Defense | 400 | 100 | 100 | 1 | Y |
| 9 | D009 | NORTH | Delivery | 50 | 60 | 20 | 1 | N |
| 10 | D010 | SOUTH | Surveillance | 170 | 97 | 70 | 1 | N |
| 11 | D011 | EAST | Agriculture | 95 | 84 | 65 | 1 | N |
| 12 | D012 | WEST | Defense | 280 | 100 | 100 | 1 | Y |
| 13 | D013 | NORTH | Delivery | 180 | 93 | 90 | 1 | N |
| 14 | D014 | SOUTH | Surveillance | 210 | 99 | 85 | 1 | N |
| 15 | D015 | WEST | Defense | 350 | 100 | 100 | 1 | Y |
4. Create ADFLIGHT (Flight-Level ADaM Dataset)
· Structure similar to ADVS.
data ADFLIGHT;
set drone_operational;
USUBJID = Drone_ID;
PARAMCD="FLTTIME";
PARAM="Flight Time (Minutes)";
AVAL=Flight_Time;
AVALC=strip(put(Flight_Time,8.));
ADT=Launch_Date;
ADY=intck('day',min(Launch_Date),Launch_Date)+1;
ANLFL="Y";
output;
PARAMCD="BATUSE";
PARAM="Battery Usage (%)";
AVAL=Battery_Usage;
AVALC=strip(put(Battery_Usage,8.));
output;
PARAMCD="SUCRATE";
PARAM="Success Rate (%)";
AVAL=Success_Rate;
AVALC=strip(put(Success_Rate,8.));
output;
keep USUBJID PARAMCD PARAM AVAL AVALC ADT ADY ANLFL;
run;
proc print data=ADFLIGHT;
run;
OUTPUT:
| Obs | USUBJID | PARAMCD | PARAM | AVAL | AVALC | ADT | ADY | ANLFL |
|---|---|---|---|---|---|---|---|---|
| 1 | D001 | FLTTIME | Flight Time (Minutes) | 120 | 120 | 23756 | 1 | Y |
| 2 | D001 | BATUSE | Battery Usage (%) | 80 | 80 | 23756 | 1 | Y |
| 3 | D001 | SUCRATE | Success Rate (%) | 98 | 98 | 23756 | 1 | Y |
| 4 | D002 | FLTTIME | Flight Time (Minutes) | 200 | 200 | 23782 | 1 | Y |
| 5 | D002 | BATUSE | Battery Usage (%) | 95 | 95 | 23782 | 1 | Y |
| 6 | D002 | SUCRATE | Success Rate (%) | 100 | 100 | 23782 | 1 | Y |
| 7 | D003 | FLTTIME | Flight Time (Minutes) | 90 | 90 | 23805 | 1 | Y |
| 8 | D003 | BATUSE | Battery Usage (%) | 60 | 60 | 23805 | 1 | Y |
| 9 | D003 | SUCRATE | Success Rate (%) | 85 | 85 | 23805 | 1 | Y |
| 10 | D004 | FLTTIME | Flight Time (Minutes) | 300 | 300 | 23851 | 1 | Y |
| 11 | D004 | BATUSE | Battery Usage (%) | 95 | 95 | 23851 | 1 | Y |
| 12 | D004 | SUCRATE | Success Rate (%) | 99 | 99 | 23851 | 1 | Y |
| 13 | D005 | FLTTIME | Flight Time (Minutes) | 150 | 150 | 23872 | 1 | Y |
| 14 | D005 | BATUSE | Battery Usage (%) | 75 | 75 | 23872 | 1 | Y |
| 15 | D005 | SUCRATE | Success Rate (%) | 97 | 97 | 23872 | 1 | Y |
| 16 | D006 | FLTTIME | Flight Time (Minutes) | 220 | 220 | 23893 | 1 | Y |
| 17 | D006 | BATUSE | Battery Usage (%) | 85 | 85 | 23893 | 1 | Y |
| 18 | D006 | SUCRATE | Success Rate (%) | 96 | 96 | 23893 | 1 | Y |
| 19 | D007 | FLTTIME | Flight Time (Minutes) | 130 | 130 | 23941 | 1 | Y |
| 20 | D007 | BATUSE | Battery Usage (%) | 55 | 55 | 23941 | 1 | Y |
| 21 | D007 | SUCRATE | Success Rate (%) | 88 | 88 | 23941 | 1 | Y |
| 22 | D008 | FLTTIME | Flight Time (Minutes) | 400 | 400 | 23975 | 1 | Y |
| 23 | D008 | BATUSE | Battery Usage (%) | 100 | 100 | 23975 | 1 | Y |
| 24 | D008 | SUCRATE | Success Rate (%) | 100 | 100 | 23975 | 1 | Y |
| 25 | D009 | FLTTIME | Flight Time (Minutes) | 50 | 50 | 23994 | 1 | Y |
| 26 | D009 | BATUSE | Battery Usage (%) | 20 | 20 | 23994 | 1 | Y |
| 27 | D009 | SUCRATE | Success Rate (%) | 60 | 60 | 23994 | 1 | Y |
| 28 | D010 | FLTTIME | Flight Time (Minutes) | 170 | 170 | 24029 | 1 | Y |
| 29 | D010 | BATUSE | Battery Usage (%) | 70 | 70 | 24029 | 1 | Y |
| 30 | D010 | SUCRATE | Success Rate (%) | 97 | 97 | 24029 | 1 | Y |
| 31 | D011 | FLTTIME | Flight Time (Minutes) | 95 | 95 | 24057 | 1 | Y |
| 32 | D011 | BATUSE | Battery Usage (%) | 65 | 65 | 24057 | 1 | Y |
| 33 | D011 | SUCRATE | Success Rate (%) | 84 | 84 | 24057 | 1 | Y |
| 34 | D012 | FLTTIME | Flight Time (Minutes) | 280 | 280 | 24100 | 1 | Y |
| 35 | D012 | BATUSE | Battery Usage (%) | 100 | 100 | 24100 | 1 | Y |
| 36 | D012 | SUCRATE | Success Rate (%) | 100 | 100 | 24100 | 1 | Y |
| 37 | D013 | FLTTIME | Flight Time (Minutes) | 180 | 180 | 23746 | 1 | Y |
| 38 | D013 | BATUSE | Battery Usage (%) | 90 | 90 | 23746 | 1 | Y |
| 39 | D013 | SUCRATE | Success Rate (%) | 93 | 93 | 23746 | 1 | Y |
| 40 | D014 | FLTTIME | Flight Time (Minutes) | 210 | 210 | 23786 | 1 | Y |
| 41 | D014 | BATUSE | Battery Usage (%) | 85 | 85 | 23786 | 1 | Y |
| 42 | D014 | SUCRATE | Success Rate (%) | 99 | 99 | 23786 | 1 | Y |
| 43 | D015 | FLTTIME | Flight Time (Minutes) | 350 | 350 | 23828 | 1 | Y |
| 44 | D015 | BATUSE | Battery Usage (%) | 100 | 100 | 23828 | 1 | Y |
| 45 | D015 | SUCRATE | Success Rate (%) | 100 | 100 | 23828 | 1 | Y |
Why Multiple Output?
ADaM
analysis datasets are parameter-level structured.
Each
flight generates multiple parameter records:
- Flight Time
- Battery Usage
- Success Rate
5. Derive Additional Analysis Variables
data ADFLIGHT;
set ADFLIGHT;
if AVAL >= 300 and PARAMCD="FLTTIME" then HIGHFL="Y";
else HIGHFL="N";
if PARAMCD="SUCRATE" and AVAL=100 then PERFECTFL="Y";
else PERFECTFL="N";
run;
proc print data=ADFLIGHT;
run;
OUTPUT:
| Obs | USUBJID | PARAMCD | PARAM | AVAL | AVALC | ADT | ADY | ANLFL | HIGHFL | PERFECTFL |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | D001 | FLTTIME | Flight Time (Minutes) | 120 | 120 | 23756 | 1 | Y | N | N |
| 2 | D001 | BATUSE | Battery Usage (%) | 80 | 80 | 23756 | 1 | Y | N | N |
| 3 | D001 | SUCRATE | Success Rate (%) | 98 | 98 | 23756 | 1 | Y | N | N |
| 4 | D002 | FLTTIME | Flight Time (Minutes) | 200 | 200 | 23782 | 1 | Y | N | N |
| 5 | D002 | BATUSE | Battery Usage (%) | 95 | 95 | 23782 | 1 | Y | N | N |
| 6 | D002 | SUCRATE | Success Rate (%) | 100 | 100 | 23782 | 1 | Y | N | Y |
| 7 | D003 | FLTTIME | Flight Time (Minutes) | 90 | 90 | 23805 | 1 | Y | N | N |
| 8 | D003 | BATUSE | Battery Usage (%) | 60 | 60 | 23805 | 1 | Y | N | N |
| 9 | D003 | SUCRATE | Success Rate (%) | 85 | 85 | 23805 | 1 | Y | N | N |
| 10 | D004 | FLTTIME | Flight Time (Minutes) | 300 | 300 | 23851 | 1 | Y | Y | N |
| 11 | D004 | BATUSE | Battery Usage (%) | 95 | 95 | 23851 | 1 | Y | N | N |
| 12 | D004 | SUCRATE | Success Rate (%) | 99 | 99 | 23851 | 1 | Y | N | N |
| 13 | D005 | FLTTIME | Flight Time (Minutes) | 150 | 150 | 23872 | 1 | Y | N | N |
| 14 | D005 | BATUSE | Battery Usage (%) | 75 | 75 | 23872 | 1 | Y | N | N |
| 15 | D005 | SUCRATE | Success Rate (%) | 97 | 97 | 23872 | 1 | Y | N | N |
| 16 | D006 | FLTTIME | Flight Time (Minutes) | 220 | 220 | 23893 | 1 | Y | N | N |
| 17 | D006 | BATUSE | Battery Usage (%) | 85 | 85 | 23893 | 1 | Y | N | N |
| 18 | D006 | SUCRATE | Success Rate (%) | 96 | 96 | 23893 | 1 | Y | N | N |
| 19 | D007 | FLTTIME | Flight Time (Minutes) | 130 | 130 | 23941 | 1 | Y | N | N |
| 20 | D007 | BATUSE | Battery Usage (%) | 55 | 55 | 23941 | 1 | Y | N | N |
| 21 | D007 | SUCRATE | Success Rate (%) | 88 | 88 | 23941 | 1 | Y | N | N |
| 22 | D008 | FLTTIME | Flight Time (Minutes) | 400 | 400 | 23975 | 1 | Y | Y | N |
| 23 | D008 | BATUSE | Battery Usage (%) | 100 | 100 | 23975 | 1 | Y | N | N |
| 24 | D008 | SUCRATE | Success Rate (%) | 100 | 100 | 23975 | 1 | Y | N | Y |
| 25 | D009 | FLTTIME | Flight Time (Minutes) | 50 | 50 | 23994 | 1 | Y | N | N |
| 26 | D009 | BATUSE | Battery Usage (%) | 20 | 20 | 23994 | 1 | Y | N | N |
| 27 | D009 | SUCRATE | Success Rate (%) | 60 | 60 | 23994 | 1 | Y | N | N |
| 28 | D010 | FLTTIME | Flight Time (Minutes) | 170 | 170 | 24029 | 1 | Y | N | N |
| 29 | D010 | BATUSE | Battery Usage (%) | 70 | 70 | 24029 | 1 | Y | N | N |
| 30 | D010 | SUCRATE | Success Rate (%) | 97 | 97 | 24029 | 1 | Y | N | N |
| 31 | D011 | FLTTIME | Flight Time (Minutes) | 95 | 95 | 24057 | 1 | Y | N | N |
| 32 | D011 | BATUSE | Battery Usage (%) | 65 | 65 | 24057 | 1 | Y | N | N |
| 33 | D011 | SUCRATE | Success Rate (%) | 84 | 84 | 24057 | 1 | Y | N | N |
| 34 | D012 | FLTTIME | Flight Time (Minutes) | 280 | 280 | 24100 | 1 | Y | N | N |
| 35 | D012 | BATUSE | Battery Usage (%) | 100 | 100 | 24100 | 1 | Y | N | N |
| 36 | D012 | SUCRATE | Success Rate (%) | 100 | 100 | 24100 | 1 | Y | N | Y |
| 37 | D013 | FLTTIME | Flight Time (Minutes) | 180 | 180 | 23746 | 1 | Y | N | N |
| 38 | D013 | BATUSE | Battery Usage (%) | 90 | 90 | 23746 | 1 | Y | N | N |
| 39 | D013 | SUCRATE | Success Rate (%) | 93 | 93 | 23746 | 1 | Y | N | N |
| 40 | D014 | FLTTIME | Flight Time (Minutes) | 210 | 210 | 23786 | 1 | Y | N | N |
| 41 | D014 | BATUSE | Battery Usage (%) | 85 | 85 | 23786 | 1 | Y | N | N |
| 42 | D014 | SUCRATE | Success Rate (%) | 99 | 99 | 23786 | 1 | Y | N | N |
| 43 | D015 | FLTTIME | Flight Time (Minutes) | 350 | 350 | 23828 | 1 | Y | Y | N |
| 44 | D015 | BATUSE | Battery Usage (%) | 100 | 100 | 23828 | 1 | Y | N | N |
| 45 | D015 | SUCRATE | Success Rate (%) | 100 | 100 | 23828 | 1 | Y | N | Y |
6. Utilization Classification
data ADFLIGHT;
set ADFLIGHT;
if PARAMCD="FLTTIME" then do;
length UTILCLASS $8.;
if AVAL>300 then UTILCLASS="High";
else if AVAL>150 then UTILCLASS="Medium";
else UTILCLASS="Low";
end;
run;
proc print data=ADFLIGHT;
run;
OUTPUT:
| Obs | USUBJID | PARAMCD | PARAM | AVAL | AVALC | ADT | ADY | ANLFL | HIGHFL | PERFECTFL | UTILCLASS |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | D001 | FLTTIME | Flight Time (Minutes) | 120 | 120 | 23756 | 1 | Y | N | N | Low |
| 2 | D001 | BATUSE | Battery Usage (%) | 80 | 80 | 23756 | 1 | Y | N | N | |
| 3 | D001 | SUCRATE | Success Rate (%) | 98 | 98 | 23756 | 1 | Y | N | N | |
| 4 | D002 | FLTTIME | Flight Time (Minutes) | 200 | 200 | 23782 | 1 | Y | N | N | Medium |
| 5 | D002 | BATUSE | Battery Usage (%) | 95 | 95 | 23782 | 1 | Y | N | N | |
| 6 | D002 | SUCRATE | Success Rate (%) | 100 | 100 | 23782 | 1 | Y | N | Y | |
| 7 | D003 | FLTTIME | Flight Time (Minutes) | 90 | 90 | 23805 | 1 | Y | N | N | Low |
| 8 | D003 | BATUSE | Battery Usage (%) | 60 | 60 | 23805 | 1 | Y | N | N | |
| 9 | D003 | SUCRATE | Success Rate (%) | 85 | 85 | 23805 | 1 | Y | N | N | |
| 10 | D004 | FLTTIME | Flight Time (Minutes) | 300 | 300 | 23851 | 1 | Y | Y | N | Medium |
| 11 | D004 | BATUSE | Battery Usage (%) | 95 | 95 | 23851 | 1 | Y | N | N | |
| 12 | D004 | SUCRATE | Success Rate (%) | 99 | 99 | 23851 | 1 | Y | N | N | |
| 13 | D005 | FLTTIME | Flight Time (Minutes) | 150 | 150 | 23872 | 1 | Y | N | N | Low |
| 14 | D005 | BATUSE | Battery Usage (%) | 75 | 75 | 23872 | 1 | Y | N | N | |
| 15 | D005 | SUCRATE | Success Rate (%) | 97 | 97 | 23872 | 1 | Y | N | N | |
| 16 | D006 | FLTTIME | Flight Time (Minutes) | 220 | 220 | 23893 | 1 | Y | N | N | Medium |
| 17 | D006 | BATUSE | Battery Usage (%) | 85 | 85 | 23893 | 1 | Y | N | N | |
| 18 | D006 | SUCRATE | Success Rate (%) | 96 | 96 | 23893 | 1 | Y | N | N | |
| 19 | D007 | FLTTIME | Flight Time (Minutes) | 130 | 130 | 23941 | 1 | Y | N | N | Low |
| 20 | D007 | BATUSE | Battery Usage (%) | 55 | 55 | 23941 | 1 | Y | N | N | |
| 21 | D007 | SUCRATE | Success Rate (%) | 88 | 88 | 23941 | 1 | Y | N | N | |
| 22 | D008 | FLTTIME | Flight Time (Minutes) | 400 | 400 | 23975 | 1 | Y | Y | N | High |
| 23 | D008 | BATUSE | Battery Usage (%) | 100 | 100 | 23975 | 1 | Y | N | N | |
| 24 | D008 | SUCRATE | Success Rate (%) | 100 | 100 | 23975 | 1 | Y | N | Y | |
| 25 | D009 | FLTTIME | Flight Time (Minutes) | 50 | 50 | 23994 | 1 | Y | N | N | Low |
| 26 | D009 | BATUSE | Battery Usage (%) | 20 | 20 | 23994 | 1 | Y | N | N | |
| 27 | D009 | SUCRATE | Success Rate (%) | 60 | 60 | 23994 | 1 | Y | N | N | |
| 28 | D010 | FLTTIME | Flight Time (Minutes) | 170 | 170 | 24029 | 1 | Y | N | N | Medium |
| 29 | D010 | BATUSE | Battery Usage (%) | 70 | 70 | 24029 | 1 | Y | N | N | |
| 30 | D010 | SUCRATE | Success Rate (%) | 97 | 97 | 24029 | 1 | Y | N | N | |
| 31 | D011 | FLTTIME | Flight Time (Minutes) | 95 | 95 | 24057 | 1 | Y | N | N | Low |
| 32 | D011 | BATUSE | Battery Usage (%) | 65 | 65 | 24057 | 1 | Y | N | N | |
| 33 | D011 | SUCRATE | Success Rate (%) | 84 | 84 | 24057 | 1 | Y | N | N | |
| 34 | D012 | FLTTIME | Flight Time (Minutes) | 280 | 280 | 24100 | 1 | Y | N | N | Medium |
| 35 | D012 | BATUSE | Battery Usage (%) | 100 | 100 | 24100 | 1 | Y | N | N | |
| 36 | D012 | SUCRATE | Success Rate (%) | 100 | 100 | 24100 | 1 | Y | N | Y | |
| 37 | D013 | FLTTIME | Flight Time (Minutes) | 180 | 180 | 23746 | 1 | Y | N | N | Medium |
| 38 | D013 | BATUSE | Battery Usage (%) | 90 | 90 | 23746 | 1 | Y | N | N | |
| 39 | D013 | SUCRATE | Success Rate (%) | 93 | 93 | 23746 | 1 | Y | N | N | |
| 40 | D014 | FLTTIME | Flight Time (Minutes) | 210 | 210 | 23786 | 1 | Y | N | N | Medium |
| 41 | D014 | BATUSE | Battery Usage (%) | 85 | 85 | 23786 | 1 | Y | N | N | |
| 42 | D014 | SUCRATE | Success Rate (%) | 99 | 99 | 23786 | 1 | Y | N | N | |
| 43 | D015 | FLTTIME | Flight Time (Minutes) | 350 | 350 | 23828 | 1 | Y | Y | N | High |
| 44 | D015 | BATUSE | Battery Usage (%) | 100 | 100 | 23828 | 1 | Y | N | N | |
| 45 | D015 | SUCRATE | Success Rate (%) | 100 | 100 | 23828 | 1 | Y | N | Y |
7. Merge ADSL into ADFLIGHT
proc sort data=ADSL_DRONE; by USUBJID; run;
proc print data=ADSL_DRONE;
run;
OUTPUT:
| Obs | USUBJID | REGION | TRT01P | TOTFLTIME | AVGSUCC | MAXBAT | TOTFLIGHTS | FRAUD_ANYFL |
|---|---|---|---|---|---|---|---|---|
| 1 | D001 | SOUTH | Surveillance | 120 | 98 | 80 | 1 | N |
| 2 | D002 | NORTH | Delivery | 200 | 100 | 95 | 1 | N |
| 3 | D003 | EAST | Agriculture | 90 | 85 | 60 | 1 | N |
| 4 | D004 | WEST | Defense | 300 | 99 | 95 | 1 | N |
| 5 | D005 | SOUTH | Surveillance | 150 | 97 | 75 | 1 | N |
| 6 | D006 | NORTH | Delivery | 220 | 96 | 85 | 1 | N |
| 7 | D007 | EAST | Agriculture | 130 | 88 | 55 | 1 | N |
| 8 | D008 | WEST | Defense | 400 | 100 | 100 | 1 | Y |
| 9 | D009 | NORTH | Delivery | 50 | 60 | 20 | 1 | N |
| 10 | D010 | SOUTH | Surveillance | 170 | 97 | 70 | 1 | N |
| 11 | D011 | EAST | Agriculture | 95 | 84 | 65 | 1 | N |
| 12 | D012 | WEST | Defense | 280 | 100 | 100 | 1 | Y |
| 13 | D013 | NORTH | Delivery | 180 | 93 | 90 | 1 | N |
| 14 | D014 | SOUTH | Surveillance | 210 | 99 | 85 | 1 | N |
| 15 | D015 | WEST | Defense | 350 | 100 | 100 | 1 | Y |
proc sort data=ADFLIGHT; by USUBJID; run;
proc print data=ADFLIGHT;
run;
OUTPUT:
| Obs | USUBJID | PARAMCD | PARAM | AVAL | AVALC | ADT | ADY | ANLFL | HIGHFL | PERFECTFL | UTILCLASS |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | D001 | FLTTIME | Flight Time (Minutes) | 120 | 120 | 23756 | 1 | Y | N | N | Low |
| 2 | D001 | BATUSE | Battery Usage (%) | 80 | 80 | 23756 | 1 | Y | N | N | |
| 3 | D001 | SUCRATE | Success Rate (%) | 98 | 98 | 23756 | 1 | Y | N | N | |
| 4 | D002 | FLTTIME | Flight Time (Minutes) | 200 | 200 | 23782 | 1 | Y | N | N | Medium |
| 5 | D002 | BATUSE | Battery Usage (%) | 95 | 95 | 23782 | 1 | Y | N | N | |
| 6 | D002 | SUCRATE | Success Rate (%) | 100 | 100 | 23782 | 1 | Y | N | Y | |
| 7 | D003 | FLTTIME | Flight Time (Minutes) | 90 | 90 | 23805 | 1 | Y | N | N | Low |
| 8 | D003 | BATUSE | Battery Usage (%) | 60 | 60 | 23805 | 1 | Y | N | N | |
| 9 | D003 | SUCRATE | Success Rate (%) | 85 | 85 | 23805 | 1 | Y | N | N | |
| 10 | D004 | FLTTIME | Flight Time (Minutes) | 300 | 300 | 23851 | 1 | Y | Y | N | Medium |
| 11 | D004 | BATUSE | Battery Usage (%) | 95 | 95 | 23851 | 1 | Y | N | N | |
| 12 | D004 | SUCRATE | Success Rate (%) | 99 | 99 | 23851 | 1 | Y | N | N | |
| 13 | D005 | FLTTIME | Flight Time (Minutes) | 150 | 150 | 23872 | 1 | Y | N | N | Low |
| 14 | D005 | BATUSE | Battery Usage (%) | 75 | 75 | 23872 | 1 | Y | N | N | |
| 15 | D005 | SUCRATE | Success Rate (%) | 97 | 97 | 23872 | 1 | Y | N | N | |
| 16 | D006 | FLTTIME | Flight Time (Minutes) | 220 | 220 | 23893 | 1 | Y | N | N | Medium |
| 17 | D006 | BATUSE | Battery Usage (%) | 85 | 85 | 23893 | 1 | Y | N | N | |
| 18 | D006 | SUCRATE | Success Rate (%) | 96 | 96 | 23893 | 1 | Y | N | N | |
| 19 | D007 | FLTTIME | Flight Time (Minutes) | 130 | 130 | 23941 | 1 | Y | N | N | Low |
| 20 | D007 | BATUSE | Battery Usage (%) | 55 | 55 | 23941 | 1 | Y | N | N | |
| 21 | D007 | SUCRATE | Success Rate (%) | 88 | 88 | 23941 | 1 | Y | N | N | |
| 22 | D008 | FLTTIME | Flight Time (Minutes) | 400 | 400 | 23975 | 1 | Y | Y | N | High |
| 23 | D008 | BATUSE | Battery Usage (%) | 100 | 100 | 23975 | 1 | Y | N | N | |
| 24 | D008 | SUCRATE | Success Rate (%) | 100 | 100 | 23975 | 1 | Y | N | Y | |
| 25 | D009 | FLTTIME | Flight Time (Minutes) | 50 | 50 | 23994 | 1 | Y | N | N | Low |
| 26 | D009 | BATUSE | Battery Usage (%) | 20 | 20 | 23994 | 1 | Y | N | N | |
| 27 | D009 | SUCRATE | Success Rate (%) | 60 | 60 | 23994 | 1 | Y | N | N | |
| 28 | D010 | FLTTIME | Flight Time (Minutes) | 170 | 170 | 24029 | 1 | Y | N | N | Medium |
| 29 | D010 | BATUSE | Battery Usage (%) | 70 | 70 | 24029 | 1 | Y | N | N | |
| 30 | D010 | SUCRATE | Success Rate (%) | 97 | 97 | 24029 | 1 | Y | N | N | |
| 31 | D011 | FLTTIME | Flight Time (Minutes) | 95 | 95 | 24057 | 1 | Y | N | N | Low |
| 32 | D011 | BATUSE | Battery Usage (%) | 65 | 65 | 24057 | 1 | Y | N | N | |
| 33 | D011 | SUCRATE | Success Rate (%) | 84 | 84 | 24057 | 1 | Y | N | N | |
| 34 | D012 | FLTTIME | Flight Time (Minutes) | 280 | 280 | 24100 | 1 | Y | N | N | Medium |
| 35 | D012 | BATUSE | Battery Usage (%) | 100 | 100 | 24100 | 1 | Y | N | N | |
| 36 | D012 | SUCRATE | Success Rate (%) | 100 | 100 | 24100 | 1 | Y | N | Y | |
| 37 | D013 | FLTTIME | Flight Time (Minutes) | 180 | 180 | 23746 | 1 | Y | N | N | Medium |
| 38 | D013 | BATUSE | Battery Usage (%) | 90 | 90 | 23746 | 1 | Y | N | N | |
| 39 | D013 | SUCRATE | Success Rate (%) | 93 | 93 | 23746 | 1 | Y | N | N | |
| 40 | D014 | FLTTIME | Flight Time (Minutes) | 210 | 210 | 23786 | 1 | Y | N | N | Medium |
| 41 | D014 | BATUSE | Battery Usage (%) | 85 | 85 | 23786 | 1 | Y | N | N | |
| 42 | D014 | SUCRATE | Success Rate (%) | 99 | 99 | 23786 | 1 | Y | N | N | |
| 43 | D015 | FLTTIME | Flight Time (Minutes) | 350 | 350 | 23828 | 1 | Y | Y | N | High |
| 44 | D015 | BATUSE | Battery Usage (%) | 100 | 100 | 23828 | 1 | Y | N | N | |
| 45 | D015 | SUCRATE | Success Rate (%) | 100 | 100 | 23828 | 1 | Y | N | Y |
data ADFLIGHT_FINAL;
merge ADFLIGHT ADSL_DRONE(keep=USUBJID FRAUD_ANYFL);
by USUBJID;
run;
proc print data=ADFLIGHT_FINAL;
run;
OUTPUT:
| Obs | USUBJID | PARAMCD | PARAM | AVAL | AVALC | ADT | ADY | ANLFL | HIGHFL | PERFECTFL | UTILCLASS | FRAUD_ANYFL |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | D001 | FLTTIME | Flight Time (Minutes) | 120 | 120 | 23756 | 1 | Y | N | N | Low | N |
| 2 | D001 | BATUSE | Battery Usage (%) | 80 | 80 | 23756 | 1 | Y | N | N | N | |
| 3 | D001 | SUCRATE | Success Rate (%) | 98 | 98 | 23756 | 1 | Y | N | N | N | |
| 4 | D002 | FLTTIME | Flight Time (Minutes) | 200 | 200 | 23782 | 1 | Y | N | N | Medium | N |
| 5 | D002 | BATUSE | Battery Usage (%) | 95 | 95 | 23782 | 1 | Y | N | N | N | |
| 6 | D002 | SUCRATE | Success Rate (%) | 100 | 100 | 23782 | 1 | Y | N | Y | N | |
| 7 | D003 | FLTTIME | Flight Time (Minutes) | 90 | 90 | 23805 | 1 | Y | N | N | Low | N |
| 8 | D003 | BATUSE | Battery Usage (%) | 60 | 60 | 23805 | 1 | Y | N | N | N | |
| 9 | D003 | SUCRATE | Success Rate (%) | 85 | 85 | 23805 | 1 | Y | N | N | N | |
| 10 | D004 | FLTTIME | Flight Time (Minutes) | 300 | 300 | 23851 | 1 | Y | Y | N | Medium | N |
| 11 | D004 | BATUSE | Battery Usage (%) | 95 | 95 | 23851 | 1 | Y | N | N | N | |
| 12 | D004 | SUCRATE | Success Rate (%) | 99 | 99 | 23851 | 1 | Y | N | N | N | |
| 13 | D005 | FLTTIME | Flight Time (Minutes) | 150 | 150 | 23872 | 1 | Y | N | N | Low | N |
| 14 | D005 | BATUSE | Battery Usage (%) | 75 | 75 | 23872 | 1 | Y | N | N | N | |
| 15 | D005 | SUCRATE | Success Rate (%) | 97 | 97 | 23872 | 1 | Y | N | N | N | |
| 16 | D006 | FLTTIME | Flight Time (Minutes) | 220 | 220 | 23893 | 1 | Y | N | N | Medium | N |
| 17 | D006 | BATUSE | Battery Usage (%) | 85 | 85 | 23893 | 1 | Y | N | N | N | |
| 18 | D006 | SUCRATE | Success Rate (%) | 96 | 96 | 23893 | 1 | Y | N | N | N | |
| 19 | D007 | FLTTIME | Flight Time (Minutes) | 130 | 130 | 23941 | 1 | Y | N | N | Low | N |
| 20 | D007 | BATUSE | Battery Usage (%) | 55 | 55 | 23941 | 1 | Y | N | N | N | |
| 21 | D007 | SUCRATE | Success Rate (%) | 88 | 88 | 23941 | 1 | Y | N | N | N | |
| 22 | D008 | FLTTIME | Flight Time (Minutes) | 400 | 400 | 23975 | 1 | Y | Y | N | High | Y |
| 23 | D008 | BATUSE | Battery Usage (%) | 100 | 100 | 23975 | 1 | Y | N | N | Y | |
| 24 | D008 | SUCRATE | Success Rate (%) | 100 | 100 | 23975 | 1 | Y | N | Y | Y | |
| 25 | D009 | FLTTIME | Flight Time (Minutes) | 50 | 50 | 23994 | 1 | Y | N | N | Low | N |
| 26 | D009 | BATUSE | Battery Usage (%) | 20 | 20 | 23994 | 1 | Y | N | N | N | |
| 27 | D009 | SUCRATE | Success Rate (%) | 60 | 60 | 23994 | 1 | Y | N | N | N | |
| 28 | D010 | FLTTIME | Flight Time (Minutes) | 170 | 170 | 24029 | 1 | Y | N | N | Medium | N |
| 29 | D010 | BATUSE | Battery Usage (%) | 70 | 70 | 24029 | 1 | Y | N | N | N | |
| 30 | D010 | SUCRATE | Success Rate (%) | 97 | 97 | 24029 | 1 | Y | N | N | N | |
| 31 | D011 | FLTTIME | Flight Time (Minutes) | 95 | 95 | 24057 | 1 | Y | N | N | Low | N |
| 32 | D011 | BATUSE | Battery Usage (%) | 65 | 65 | 24057 | 1 | Y | N | N | N | |
| 33 | D011 | SUCRATE | Success Rate (%) | 84 | 84 | 24057 | 1 | Y | N | N | N | |
| 34 | D012 | FLTTIME | Flight Time (Minutes) | 280 | 280 | 24100 | 1 | Y | N | N | Medium | Y |
| 35 | D012 | BATUSE | Battery Usage (%) | 100 | 100 | 24100 | 1 | Y | N | N | Y | |
| 36 | D012 | SUCRATE | Success Rate (%) | 100 | 100 | 24100 | 1 | Y | N | Y | Y | |
| 37 | D013 | FLTTIME | Flight Time (Minutes) | 180 | 180 | 23746 | 1 | Y | N | N | Medium | N |
| 38 | D013 | BATUSE | Battery Usage (%) | 90 | 90 | 23746 | 1 | Y | N | N | N | |
| 39 | D013 | SUCRATE | Success Rate (%) | 93 | 93 | 23746 | 1 | Y | N | N | N | |
| 40 | D014 | FLTTIME | Flight Time (Minutes) | 210 | 210 | 23786 | 1 | Y | N | N | Medium | N |
| 41 | D014 | BATUSE | Battery Usage (%) | 85 | 85 | 23786 | 1 | Y | N | N | N | |
| 42 | D014 | SUCRATE | Success Rate (%) | 99 | 99 | 23786 | 1 | Y | N | N | N | |
| 43 | D015 | FLTTIME | Flight Time (Minutes) | 350 | 350 | 23828 | 1 | Y | Y | N | High | Y |
| 44 | D015 | BATUSE | Battery Usage (%) | 100 | 100 | 23828 | 1 | Y | N | N | Y | |
| 45 | D015 | SUCRATE | Success Rate (%) | 100 | 100 | 23828 | 1 | Y | N | Y | Y |
Final ADaM Structure
ADSL_DRONE
|
Variable |
Purpose |
|
USUBJID |
Unique
Drone |
|
REGION |
Region |
|
TRT01P |
Mission |
|
TOTFLTIME |
Total
flight exposure |
|
AVGSUCC |
Mean
success |
|
MAXBAT |
Max
battery |
|
TOTFLIGHTS |
Total
missions |
|
FRAUD_ANYFL |
Subject-level
fraud flag |
ADFLIGHT_FINAL
|
Variable |
Purpose |
|
USUBJID |
Drone
ID |
|
PARAMCD |
Parameter
Code |
|
PARAM |
Parameter
Description |
|
AVAL |
Numeric
value |
|
AVALC |
Character
value |
|
ADT |
Analysis
Date |
|
ADY |
Analysis
Day |
|
ANLFL |
Analysis
Flag |
|
HIGHFL |
High
Flight Flag |
|
PERFECTFL |
Perfect
Success Flag |
|
UTILCLASS |
Utilization
Class |
|
FRAUD_ANYFL |
Drone-level
fraud |
Transition to ADaM Principles
After operational validation and fraud
detection, the system transitions into an analysis-ready structured framework inspired by ADaM principles.
ADaM philosophy includes:
·
One record per subject (Drone)
·
One record per parameter per visit (Flight)
·
Clear traceability
·
Derived variables documented
·
Analysis flags defined
·
Numeric analysis values standardized
This ensures:
·
Statistical readiness
·
Reproducibility
·
Transparency
·
Audit support
ADSL_DRONE (Subject-Level Design)
In this framework:
Each Drone_ID becomes a subject (USUBJID).
Subject-level variables include:
·
Total Flight Time
·
Average Success Rate
·
Maximum Battery Usage
·
Total Flights
·
Region
·
Primary Mission
·
Subject-Level Fraud Flag
This mirrors ADSL in clinical trials, where
subject-level exposure and summary metrics are derived.
The purpose:
·
Enable summary reporting
·
Enable grouping by region
·
Support aggregated risk scoring
ADFLIGHT (Parameter-Level Design)
Each flight generates multiple parameter
records:
·
Flight Time
·
Battery Usage
·
Success Rate
Each parameter record includes:
·
Parameter Code (PARAMCD)
·
Parameter Description (PARAM)
·
Numeric Analysis Value (AVAL)
·
Analysis Date (ADT)
·
Analysis Day (ADY)
·
Analysis Flag (ANLFL)
·
Fraud Flag
This structure enables:
·
Time-based modeling
·
Threshold analysis
·
Cross-parameter comparisons
·
Reporting consistency
Traceability & Analysis Flags
Traceability ensures:
·
Every derived variable can be traced to source
fields
·
Fraud logic is documented
·
Date derivations are reproducible
·
Summary values reconcile with raw totals
Analysis flags define:
·
Which records are analysis-ready
·
Which values are considered valid
·
Which flights triggered fraud detection
Traceability = Audit confidence.
25 Key Project Insights
1.
Raw operational data is rarely reliable.
2.
Validation must precede modeling.
3.
Date derivation adds analytical depth.
4.
Fraud logic must reflect business reality.
5.
Perfect performance is statistically suspicious.
6.
Zero-duration missions indicate manipulation.
7.
High battery with low time signals anomaly.
8.
Modular logic supports scalability.
9.
Structured datasets improve reporting.
10. Subject-level
summaries enable trend tracking.
11. Parameter-level
design improves flexibility.
12. Traceability
prevents audit failures.
13. Data
reshaping enables statistical modeling.
14. Dataset
governance prevents duplication errors.
15. Case
standardization avoids merge mismatches.
16. Automated
fraud flags reduce manual review.
17. Threshold
validation enforces engineering limits.
18. Derived
metrics improve decision-making.
19. Longitudinal
data reveals hidden patterns.
20. ADaM
principles apply beyond clinical trials.
21. Clear
documentation enhances credibility.
22. Business
logic must align with engineering logic.
23. Clean
data increases model reliability.
24. Multi-level
fraud detection improves control.
25. Production
systems require both engineering and analytics discipline.
Business Interpretation
From a risk perspective:
·
High battery usage + low flight duration =
possible manipulation
·
Perfect success rate + zero errors =
statistically improbable
·
Long missions with zero navigation errors = risk
indicator
·
Same-day launch and landing for multi-hour
missions = suspicious
When fraud detection is embedded within
structured analytics:
·
Operational oversight improves
·
Risk scoring becomes systematic
·
Regional performance can be audited
·
Management receives credible reports
This system bridges operations and governance.
Conclusion:
This project demonstrates how a complete autonomous drone flight analytics
system can be designed with both operational control and analytical rigor. We
moved beyond simple dataset creation and built a structured framework that
includes data ingestion, validation, debugging, fraud detection logic, and
structured transformation. By applying business rules, temporal derivations,
and anomaly detection principles, we ensured that unreliable or manipulated
records are identified early in the process.
The integration of ADaM-inspired subject-level
and parameter-level structures further enhances traceability, audit readiness,
and reporting flexibility. Fraud flags at both flight and drone levels provide
multi-layered risk visibility. This combined engineering and analytical
approach reflects real-world enterprise standards, where data governance,
reproducibility, and business intelligence must work together.
Ultimately,
the system shows how advanced SAS programming techniques can transform raw
operational drone logs into a controlled, analysis-ready, fraud-aware platform
suitable for production-level decision-making.
SAS INTERVIEW QUESTIONS
·
How does SAS handle missing numeric values in comparisons?
·
What is the difference between WHERE and IF statement?
·
What is RETAIN statement used for?
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
About the Author:
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
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 DRONE FLIGHT data.
Our Mission:
This blog provides industry-focused SAS programming tutorials and analytics projects covering finance, healthcare, and technology.
This project is suitable for:
· Students learning SAS
· Data analysts building portfolios
· Professionals preparing for SAS interviews
· Bloggers writing about analytics
· Clinical SAS Programmer
· Research Data Analyst
· Regulatory Data Validator
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Comments
Post a Comment