Publié le :
ETL CREATION_INTERNE

Génération de données de test pour simulation de processus

Ce code est également disponible en : Deutsch English Español
En attente de validation
Le script procède en plusieurs étapes. D'abord, il crée une table 'Test_Matrix' avec des paramètres de base pour trois fournisseurs sur 12 mois. Il étend ensuite cette table en une table 'RECORDS' pour simuler des unités de test individuelles. L'étape principale, dans la table 'Import_This', génère des données de test détaillées (résistance, délai, défauts) en utilisant des fonctions de génération de nombres aléatoires (RANNOR, RANPOI) pour simuler une distribution statistique. Enfin, le script nettoie les tables intermédiaires, exporte le résultat final vers un fichier CSV et le réimporte pour vérification.
Analyse des données

Type : CREATION_INTERNE


Toutes les données sont générées de manière synthétique à l'intérieur du script. Aucune source de données externe n'est lue. La génération commence par une boucle DO pour créer une table de paramètres, qui est ensuite étendue et enrichie avec des données aléatoires pour simuler un processus réel.

1 Bloc de code
DATA STEP Data
Explication :
Ce bloc DATA STEP initialise la table 'Test_Matrix'. Il génère en boucle les paramètres de simulation (Num, Mean, Sigma, etc.) pour 3 fournisseurs ('Vendor') différents sur une période de 12 mois.
Copié !
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 Bloc de code
DATA STEP
Explication :
Ce bloc modifie la table 'Test_Matrix' en arrondissant les valeurs des variables 'Mean' et 'Sigma'. Il est suivi d'un PROC SORT pour trier les données par fournisseur et par mois, en préparation pour les étapes suivantes.
Copié !
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 Bloc de code
DATA STEP Data
Explication :
Ce DATA STEP lit la table 'Test_Matrix' et l'utilise pour générer la table 'RECORDS'. Une boucle 'DO Unit=1 TO Num' est utilisée pour dupliquer les enregistrements et ainsi créer une ligne pour chaque 'unité' à tester.
Copié !
1DATA RECORDS; SET TEST_MATRIX;
2 DO Unit=1 TO Num;
3 OUTPUT;
4 END;
5RUN;
4 Bloc de code
DATA STEP Data
Explication :
Ceci est le bloc principal de génération de données. Il lit la table 'RECORDS' et crée 'Import_This'. Des variables de test comme 'Resistance', 'Delay' et 'Defects' sont simulées à l'aide de fonctions de nombres aléatoires (RANNOR, RANPOI) basées sur les paramètres définis. Des formats sont appliqués et des variables intermédiaires sont supprimées à la fin.
Copié !
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 Bloc de code
PROC DATASETS
Explication :
Ce bloc utilise la procédure PROC DATASETS pour supprimer les tables de travail intermédiaires ('Test_Matrix' et 'Records') qui ne sont plus nécessaires, afin de nettoyer l'environnement de travail.
Copié !
1 
2PROC DATASETS LIBRARY=WORK GENNUM=ALL NOLIST;
3DELETE Test_Matrix Records;
4RUN;
5 
6QUIT;
7 
6 Bloc de code
PROC EXPORT Data
Explication :
Ce bloc final exporte la table 'Import_This' vers un fichier CSV en utilisant PROC EXPORT. Le chemin du fichier de sortie dépend de la macro-variable '&JES'. Immédiatement après, PROC IMPORT est utilisé pour lire ce même fichier CSV et créer une nouvelle table SAS nommée 'Import', démontrant un cycle d'exportation-importation.
Copié !
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;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.