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.
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!
DATA Test_Matrix; SET Test_Matrix;
Mean = ROUND(Mean, .1);
Sigma = ROUND(Sigma, .1);
RUN;
PROC SORT DATA=Test_Matrix; BY Vendor Month; RUN;
1
DATA Test_Matrix; SET Test_Matrix;
2
Mean = ROUND(Mean, .1);
3
Sigma = ROUND(Sigma, .1);
4
RUN;
5
PROC SORTDATA=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!
DATA RECORDS; SET TEST_MATRIX;
DO Unit=1 TO Num;
OUTPUT;
END;
RUN;
1
DATA RECORDS; SET TEST_MATRIX;
2
DO Unit=1 TO Num;
3
OUTPUT;
4
END;
5
RUN;
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!
%let D=500; %let D=7500; %LET D = 50000; %let B = 1;
DATA Import_This; SET RECORDS; retain SEED0 SEED1 SEED2 SEED3;
FORMAT Test_Time $25. Delay $12. Del 8.0 Resistance 8.2 Result $8. Fail 8.0;
FORMAT TestTime DATETIME20. TestDate MMDDYY10.;
TestTime=MDY(Month, min(30,Unit), 2008)*60*60*24;
TestDate=DATEPART(TestTime);
Test_Time=PUT(TestTime, DateTime20.);
IF Vendor="Empirical Engineering" THEN Test_Time=PUT(TestDate, MMDDYY10.);
if _N_=1 then do; SEED0=12345; SEED1=54321; SEED2=15243; SEED3=34251; END;
CALL RANNOR(SEED0, Z);
Resistance = Mean + Sigma*Z;
FORMAT Result $8.;
Result = "Pass"; Fail=0;
IF Resistance < 12.5 THEN Result="Fail Low";
IF Resistance > 22.5 THEN Result="Fail Hi";
IF Result ne "Pass" THEN Fail=1;
CALL RANNOR(SEED1, De);
Del = DA + DB*Resistance + .2*Resistance**2 + D_Sig*De;
Delay=PUT(Del, 8.0);
IF Vendor="Duality Logic" THEN DO;
IF Month=12 AND Unit>20 THEN Delay="N/A";
END;
IF Vendor="Empirical Engineering" THEN DO;
IF Month=4 AND Unit>10 THEN Delay="N/A";
END;
FORMAT Defects 8.0;
CALL RANPOI(Seed3, Rate, Defects);
DROP Mean Sigma Z Num DA DB D_Sig De Rate
SEED0 SEED1 SEED2 SEED3
TestTime TestDate Del Defects;
RUN;
1
%let D=500; %let D=7500; %LET D = 50000; %let B = 1;
2
DATA Import_This; SET RECORDS; retain SEED0 SEED1 SEED2 SEED3;
3
FORMAT Test_Time $25. Delay $12. Del 8.0 Resistance 8.2RESULT $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_=1THENDO; SEED0=12345; SEED1=54321; SEED2=15243; SEED3=34251; END;
10
CALL RANNOR(SEED0, Z);
11
Resistance = Mean + Sigma*Z;
12
13
14
15
16
FORMATRESULT $8.;
17
RESULT = "Pass"; Fail=0;
18
IF Resistance < 12.5THENRESULT="Fail Low";
19
IF Resistance > 22.5THENRESULT="Fail Hi";
20
IFRESULT 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"THENDO;
25
IF Month=12 AND Unit>20THEN Delay="N/A";
26
END;
27
IF Vendor="Empirical Engineering"THENDO;
28
IF Month=4 AND Unit>10THEN 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;
37
RUN;
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.
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.
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.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.