Publicado el :
ETL CREATION_INTERNE

Generación de datos de prueba para simulación de procesos

Este código también está disponible en: Deutsch English Français
En espera de validación
El script procede en varias etapas. Primero, crea una tabla 'Test_Matrix' con parámetros base para tres proveedores durante 12 meses. Luego, extiende esta tabla a una tabla 'RECORDS' para simular unidades de prueba individuales. La etapa principal, en la tabla 'Import_This', genera datos de prueba detallados (resistencia, retardo, defectos) utilizando funciones de generación de números aleatorios (RANNOR, RANPOI) para simular una distribución estadística. Finalmente, el script limpia las tablas intermedias, exporta el resultado final a un archivo CSV y lo reimporta para su verificación.
Análisis de datos

Type : CREATION_INTERNE


Todos los datos se generan sintéticamente dentro del script. No se lee ninguna fuente de datos externa. La generación comienza con un bucle DO para crear una tabla de parámetros, que luego se extiende y enriquece con datos aleatorios para simular un proceso real.

1 Bloque de código
DATA STEP Data
Explicación :
Este bloque DATA STEP inicializa la tabla 'Test_Matrix'. Genera en bucle los parámetros de simulación (Num, Mean, Sigma, etc.) para 3 proveedores ('Vendor') diferentes durante un período de 12 meses.
¡Copiado!
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 Bloque de código
DATA STEP
Explicación :
Este bloque modifica la tabla 'Test_Matrix' redondeando los valores de las variables 'Mean' y 'Sigma'. Le sigue un PROC SORT para ordenar los datos por proveedor y por mes, en preparación para las siguientes etapas.
¡Copiado!
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 Bloque de código
DATA STEP Data
Explicación :
Este DATA STEP lee la tabla 'Test_Matrix' y la utiliza para generar la tabla 'RECORDS'. Se utiliza un bucle 'DO Unit=1 TO Num' para duplicar los registros y así crear una línea para cada 'unidad' a probar.
¡Copiado!
1DATA RECORDS; SET TEST_MATRIX;
2 DO Unit=1 TO Num;
3 OUTPUT;
4 END;
5RUN;
4 Bloque de código
DATA STEP Data
Explicación :
Este es el bloque principal de generación de datos. Lee la tabla 'RECORDS' y crea 'Import_This'. Las variables de prueba como 'Resistance', 'Delay' y 'Defects' se simulan utilizando funciones de números aleatorios (RANNOR, RANPOI) basadas en los parámetros definidos. Se aplican formatos y las variables intermedias se eliminan al final.
¡Copiado!
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 Bloque de código
PROC DATASETS
Explicación :
Este bloque utiliza el procedimiento PROC DATASETS para eliminar las tablas de trabajo intermedias ('Test_Matrix' y 'Records') que ya no son necesarias, con el fin de limpiar el entorno de trabajo.
¡Copiado!
1 
2PROC DATASETS LIBRARY=WORK GENNUM=ALL NOLIST;
3DELETE Test_Matrix Records;
4RUN;
5 
6QUIT;
7 
6 Bloque de código
PROC EXPORT Data
Explicación :
Este bloque final exporta la tabla 'Import_This' a un archivo CSV utilizando PROC EXPORT. La ruta del archivo de salida depende de la macrovariable '&JES'. Inmediatamente después, se utiliza PROC IMPORT para leer este mismo archivo CSV y crear una nueva tabla SAS llamada 'Import', demostrando un ciclo de exportación-importación.
¡Copiado!
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;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.