?>Array ( [lang] => es [id] => 90 )
Scénario de test & Cas d'usage
Se crean dos tablas de control, `formatos_v1` y `formatos_v2`, que definen un formato `StatusFmt` con etiquetas diferentes para el mismo valor ('A'). También se crea una tabla de datos `proyectos` para probar los formatos.
| 1 | DATA formatos_v1; |
| 2 | LENGTH FmtName $12 Start $1 Label $20; |
| 3 | FmtName='StatusFmt'; Start='A'; Label='Activo (Versión 1)'; OUTPUT; |
| 4 | FmtName='StatusFmt'; Start='I'; Label='Inactivo'; OUTPUT; |
| 5 | RUN; |
| 6 | |
| 7 | DATA formatos_v2; |
| 8 | LENGTH FmtName $12 Start $1 Label $20; |
| 9 | FmtName='StatusFmt'; Start='A'; Label='Aprobado (Versión 2)'; OUTPUT; |
| 10 | FmtName='StatusFmt'; Start='P'; Label='Pendiente'; OUTPUT; |
| 11 | RUN; |
| 12 | |
| 13 | DATA proyectos; |
| 14 | INPUT proyecto_id $ STATUS $; |
| 15 | DATALINES; |
| 16 | PROJ1 A |
| 17 | PROJ2 I |
| 18 | PROJ3 P |
| 19 | ; |
| 20 | RUN; |
| 1 | PROC CAS; |
| 2 | TABLE.loadTable / caslib='CASUSER' path='%sysfunc(pathname(work))/proyectos.sashdat' casout={name='PROYECTOS', replace=true}; |
| 3 | TABLE.loadTable / caslib='CASUSER' path='%sysfunc(pathname(work))/formatos_v1.sashdat' casout={name='FORMATOS_V1', replace=true}; |
| 4 | TABLE.loadTable / caslib='CASUSER' path='%sysfunc(pathname(work))/formatos_v2.sashdat' casout={name='FORMATOS_V2', replace=true}; |
| 5 | QUIT; |
| 1 | PROC CAS; |
| 2 | sessionprop.addFmtLib / fmtLibName='MiFmtLib' name='FORMATOS_V1' caslib='CASUSER'; |
| 3 | /* La siguiente línea debe fallar con un error indicando que la biblioteca ya existe */ |
| 4 | sessionprop.addFmtLib / fmtLibName='MiFmtLib' name='FORMATOS_V2' caslib='CASUSER' STATUS=rc; |
| 5 | QUIT; |
| 1 | PROC CAS; |
| 2 | sessionprop.addFmtLib / fmtLibName='MiFmtLib' name='FORMATOS_V2' caslib='CASUSER' replace=true; |
| 3 | TABLE.setTableFmtLib / TABLE={caslib='CASUSER', name='PROYECTOS'} fmtLibName='MiFmtLib'; |
| 4 | SIMPLE.freq / TABLE={name='PROYECTOS', caslib='CASUSER'} inputs={{name='status', FORMAT='StatusFmt'}}; |
| 5 | QUIT; |
| 1 | PROC CAS; |
| 2 | sessionprop.addFmtLib / fmtLibName='FmtLib_V2' name='FORMATOS_V2' caslib='CASUSER' replace=true; /* V2 es la primera en el orden de búsqueda */ |
| 3 | sessionprop.addFmtLib / fmtLibName='FmtLib_V1' name='FORMATOS_V1' caslib='CASUSER' replace=true fmtSearch='INSERT'; /* V1 se inserta al principio */ |
| 4 | SIMPLE.freq / TABLE={name='PROYECTOS', caslib='CASUSER'} inputs={{name='status', FORMAT='StatusFmt'}}; |
| 5 | QUIT; |
En el paso 2, la segunda acción `addFmtLib` debe fallar. En el paso 3, la salida de `freq` debe mostrar la etiqueta 'Aprobado (Versión 2)' para el estado 'A', confirmando que `replace=true` funcionó. En el paso 4, la salida de `freq` debe mostrar la etiqueta 'Activo (Versión 1)' para el estado 'A', demostrando que `fmtSearch='INSERT'` colocó 'FmtLib_V1' al principio del orden de búsqueda y su definición de formato tuvo precedencia sobre la de 'FmtLib_V2'.