Scénario de test & Cas d'usage
Agregación de datos y cálculos estadísticos resumidos.
Descubrir todas las acciones de aggregationCreación de una tabla de datos de sensores con valores de temperatura y timestamps, introduciendo deliberadamente valores faltantes.
| 1 | DATA casuser.DATOS_SENSORES; |
| 2 | FORMAT Timestamp_Sensor datetime20.; |
| 3 | DO ID_Maquina = 1 to 2; |
| 4 | DO sec = 1 to 60; |
| 5 | Timestamp_Sensor = dhms(today(), 0, 0, sec); |
| 6 | IF mod(sec, 7) = 0 THEN Valor_Sensor = . ; /* Valor faltante */ |
| 7 | ELSE IF mod(sec, 15) = 0 THEN call missing(Timestamp_Sensor); /* Timestamp faltante */ |
| 8 | ELSE Valor_Sensor = 80 + rand('NORMAL', 0, 5); |
| 9 | OUTPUT; |
| 10 | END; |
| 11 | END; |
| 12 | RUN; |
| 1 | |
| 2 | PROC CASUTIL; |
| 3 | load |
| 4 | DATA=casuser.DATOS_SENSORES casout='DATOS_SENSORES' caslib='casuser' replace; |
| 5 | QUIT; |
| 6 |
| 1 | PROC CAS; |
| 2 | aggregation.aggregate / |
| 3 | TABLE={name='DATOS_SENSORES', groupBy={'ID_Maquina'}}, |
| 4 | id='Timestamp_Sensor', |
| 5 | interval='SECOND10.', |
| 6 | casOut={name='RESUMEN_SENSORES_DEFAULT', caslib='casuser', replace=true}, |
| 7 | varSpecs={{name='Valor_Sensor', agg='MEAN'}}; |
| 8 | RUN; |
| 9 | QUIT; |
| 1 | PROC CAS; |
| 2 | aggregation.aggregate / |
| 3 | TABLE={name='DATOS_SENSORES', groupBy={'ID_Maquina'}}, |
| 4 | id='Timestamp_Sensor', |
| 5 | interval='SECOND10.', |
| 6 | includeMissing=true, |
| 7 | casOut={name='RESUMEN_SENSORES_INCL_MISS', caslib='casuser', replace=true}, |
| 8 | varSpecs={{name='Valor_Sensor', agg=['MEAN', 'N']}}; |
| 9 | RUN; |
| 10 | QUIT; |
Se generarán dos tablas. 'RESUMEN_SENSORES_DEFAULT' contendrá promedios calculados solo a partir de observaciones no nulas. 'RESUMEN_SENSORES_INCL_MISS' también incluirá intervalos donde los datos eran faltantes. Se espera que el recuento de observaciones ('_N_') en la segunda tabla sea mayor o igual para cada intervalo en comparación con la primera, demostrando que el parámetro `includeMissing` funciona correctamente.