Veröffentlicht am :
ETL CREATION_INTERNE

Generierung von Testdaten für Prozesssimulation

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Das Skript läuft in mehreren Schritten ab. Zuerst wird eine Tabelle 'Test_Matrix' mit grundlegenden Parametern für drei Lieferanten über 12 Monate erstellt. Anschließend wird diese Tabelle zu einer Tabelle 'RECORDS' erweitert, um einzelne Testeinheiten zu simulieren. Der Hauptschritt in der Tabelle 'Import_This' generiert detaillierte Testdaten (Widerstand, Verzögerung, Defekte) unter Verwendung von Zufallszahlengenerierungsfunktionen (RANNOR, RANPOI), um eine statistische Verteilung zu simulieren. Schließlich bereinigt das Skript die Zwischentabellen, exportiert das Endergebnis in eine CSV-Datei und importiert es zur Überprüfung erneut.
Datenanalyse

Type : CREATION_INTERNE


Alle Daten werden synthetisch innerhalb des Skripts generiert. Es werden keine externen Datenquellen gelesen. Die Generierung beginnt mit einer DO-Schleife, um eine Parametertabelle zu erstellen, die dann erweitert und mit Zufallsdaten angereichert wird, um einen realen Prozess zu simulieren.

1 Codeblock
DATA STEP Data
Erklärung :
Dieser DATA STEP-Block initialisiert die Tabelle 'Test_Matrix'. Er generiert in einer Schleife die Simulationsparameter (Num, Mean, Sigma usw.) für 3 verschiedene Lieferanten ('Vendor') über einen Zeitraum von 12 Monaten.
Kopiert!
1DATA Test_Matrix; LENGTH Vendor $21.;
2 DO Month=1 TO 12;
3 Mon="2008-"||PUT(Month, Z2.0);
4 Num=20+3*INT(Month/3); Mean=18; Sigma=2; DA=120; DB=.75; D_Sig=10;
5 Rate=.75; Vendor="ChiTronix Components"; OUTPUT;
6 Num=25+INT(Month/3); Mean=17; Sigma=2+(Month/12); DA=120; DB=2; D_Sig=20;
7 Rate=4-Month/4; Vendor="Duality Logic"; OUTPUT;
8 Num=15; Mean=13; Sigma=3; DA=140; DB=.5; D_Sig=15;
9 Rate=ROUND(1+Month/3, .1); Vendor="Empirical Engineering"; OUTPUT;
10 END;
11RUN;
2 Codeblock
DATA STEP
Erklärung :
Dieser Block modifiziert die Tabelle 'Test_Matrix', indem er die Werte der Variablen 'Mean' und 'Sigma' rundet. Anschließend wird eine PROC SORT verwendet, um die Daten nach Lieferant und Monat zu sortieren, als Vorbereitung für die folgenden Schritte.
Kopiert!
1DATA Test_Matrix; SET Test_Matrix;
2 Mean = ROUND(Mean, .1);
3 Sigma = ROUND(Sigma, .1);
4RUN;
5PROC SORT DATA=Test_Matrix; BY Vendor Month; RUN;
3 Codeblock
DATA STEP Data
Erklärung :
Dieser DATA STEP liest die Tabelle 'Test_Matrix' und verwendet sie, um die Tabelle 'RECORDS' zu generieren. Eine Schleife 'DO Unit=1 TO Num' wird verwendet, um die Datensätze zu duplizieren und so eine Zeile für jede zu testende 'Einheit' zu erstellen.
Kopiert!
1DATA RECORDS; SET TEST_MATRIX;
2 DO Unit=1 TO Num;
3 OUTPUT;
4 END;
5RUN;
4 Codeblock
DATA STEP Data
Erklärung :
Dies ist der Hauptblock zur Datengenerierung. Er liest die Tabelle 'RECORDS' und erstellt 'Import_This'. Testvariablen wie 'Resistance', 'Delay' und 'Defects' werden mithilfe von Zufallszahlengenerierungsfunktionen (RANNOR, RANPOI) basierend auf den definierten Parametern simuliert. Formate werden angewendet und Zwischenvariablen am Ende gelöscht.
Kopiert!
1%let D=500; %let D=7500; %LET D = 50000; %let B = 1;
2DATA Import_This; SET RECORDS; retain SEED0 SEED1 SEED2 SEED3;
3 FORMAT Test_Time $25. Delay $12. Del 8.0 Resistance 8.2 RESULT $8. Fail 8.0;
4 FORMAT TestTime DATETIME20. TestDate MMDDYY10.;
5 TestTime=MDY(Month, min(30,Unit), 2008)*60*60*24;
6 TestDate=DATEPART(TestTime);
7 Test_Time=PUT(TestTime, DateTime20.);
8 IF Vendor="Empirical Engineering" THEN Test_Time=PUT(TestDate, MMDDYY10.);
9 IF _N_=1 THEN DO; SEED0=12345; SEED1=54321; SEED2=15243; SEED3=34251; END;
10 CALL RANNOR(SEED0, Z);
11 Resistance = Mean + Sigma*Z;
12 
13
14 
15 
16 FORMAT RESULT $8.;
17 RESULT = "Pass"; Fail=0;
18 IF Resistance < 12.5 THEN RESULT="Fail Low";
19 IF Resistance > 22.5 THEN RESULT="Fail Hi";
20 IF RESULT ne "Pass" THEN Fail=1;
21 CALL RANNOR(SEED1, De);
22 Del = DA + DB*Resistance + .2*Resistance**2 + D_Sig*De;
23 Delay=PUT(Del, 8.0);
24 IF Vendor="Duality Logic" THEN DO;
25 IF Month=12 AND Unit>20 THEN Delay="N/A";
26 END;
27 IF Vendor="Empirical Engineering" THEN DO;
28 IF Month=4 AND Unit>10 THEN Delay="N/A";
29 END;
30 
31
32 FORMAT Defects 8.0;
33 CALL RANPOI(Seed3, Rate, Defects);
34 DROP Mean Sigma Z Num DA DB D_Sig De Rate
35 SEED0 SEED1 SEED2 SEED3
36 TestTime TestDate Del Defects;
37RUN;
5 Codeblock
PROC DATASETS
Erklärung :
Dieser Block verwendet die PROC DATASETS Prozedur, um nicht mehr benötigte Zwischenarbeits-Tabellen ('Test_Matrix' und 'Records') zu löschen, um die Arbeitsumgebung zu bereinigen.
Kopiert!
1 
2PROC DATASETS LIBRARY=WORK GENNUM=ALL NOLIST;
3DELETE Test_Matrix Records;
4RUN;
5 
6QUIT;
7 
6 Codeblock
PROC EXPORT Data
Erklärung :
Dieser finale Block exportiert die Tabelle 'Import_This' mithilfe von PROC EXPORT in eine CSV-Datei. Der Pfad der Ausgabedatei hängt von der Makrovariablen '&JES' ab. Unmittelbar danach wird PROC IMPORT verwendet, um dieselbe CSV-Datei zu lesen und eine neue SAS-Tabelle namens 'Import' zu erstellen, was einen Export-Import-Zyklus demonstriert.
Kopiert!
1PROC EXPORT DATA=Import_This
2 OUTFILE ="&JES.input_data/import_this.csv" REPLACE;
3RUN;
4 
5PROC IMPORT DATAFILE="&JES.input_data/import_this.csv"
6 OUT =Import REPLACE;
7RUN;
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.