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 gran volumen (1 millón de filas) que simula datos de transacciones de acciones para dos tickers diferentes.
| 1 | DATA casuser.TICK_DATA; |
| 2 | FORMAT Timestamp_Trade datetime20.; |
| 3 | DO Ticker = 'SAS', 'ACME'; |
| 4 | Precio = 100; |
| 5 | DO i = 1 to 500000; |
| 6 | Timestamp_Trade = dhms(today(), 9, 0, 0) + i*0.05 + rand('UNIFORM')*0.01; |
| 7 | Precio = Precio + rand('NORMAL', 0, 0.1); |
| 8 | OUTPUT; |
| 9 | END; |
| 10 | END; |
| 11 | RUN; |
| 1 | |
| 2 | PROC CASUTIL; |
| 3 | load |
| 4 | DATA=casuser.TICK_DATA casout='TICK_DATA' caslib='casuser' replace; |
| 5 | QUIT; |
| 6 |
| 1 | PROC CAS; |
| 2 | aggregation.aggregate / |
| 3 | TABLE={name='TICK_DATA', groupBy={'Ticker'}}, |
| 4 | id='Timestamp_Trade', |
| 5 | edgeId='Timestamp_Trade', |
| 6 | interval='MINUTE', |
| 7 | casOut={name='OHLC_1MIN', caslib='casuser', replace=true}, |
| 8 | varSpecs=[ |
| 9 | {name='Precio', agg='FIRST', newName='Open'}, |
| 10 | {name='Precio', agg='MAX', newName='High'}, |
| 11 | {name='Precio', agg='MIN', newName='Low'}, |
| 12 | {name='Precio', agg='LAST', newName='Close'}, |
| 13 | {name='Precio', agg='N', newName='Volume'} |
| 14 | ]; |
| 15 | RUN; |
| 16 | QUIT; |
| 1 | |
| 2 | PROC PRINT |
| 3 | DATA=casuser.OHLC_1MIN(obs=20); |
| 4 | where Ticker='SAS'; |
| 5 | RUN; |
| 6 |
La acción debe procesar el millón de registros y producir una tabla 'OHLC_1MIN'. Cada fila representará un intervalo de un minuto para un 'Ticker' específico. Las columnas 'Open', 'High', 'Low' y 'Close' deben reflejar correctamente el primer precio, el máximo, el mínimo y el último precio dentro de ese minuto, validando el uso de los agregadores FIRST/LAST/MAX/MIN en un contexto de alto rendimiento.