Publicado el :
ETL CREATION_INTERNE

Actualizar filas en una tabla CAS

Este código también está disponible en: Deutsch English Français
En espera de validación
La acción `table.update` del conjunto de acciones 'table' se utiliza para modificar los datos de una tabla CAS en memoria. Es particularmente útil para operaciones de actualización transaccional o masiva. Las actualizaciones se pueden realizar en toda la tabla o en un subconjunto de filas especificado por una cláusula WHERE. Los nuevos valores de las columnas pueden ser constantes literales, expresiones basadas en otras columnas de la tabla, o una combinación de ambas. Es importante tener en cuenta que los valores literales de tipo carácter (como 'Sport Sedan' o '31,000') se convierten automáticamente si la columna de destino tiene un tipo numérico compatible.
Análisis de datos

Type : CREATION_INTERNE


Los ejemplos utilizan datos generados (datalines) o SASHELP, luego cargados en CAS para su manipulación.

1 Bloque de código
PROC CAS / DATA step Data
Explicación :
Este ejemplo inicializa una tabla `produits` en memoria CAS. Luego, utiliza la acción `table.update` para aumentar el 'Precio' de todos los productos en un 5%. La acción `table.fetch` muestra los resultados de la actualización.
¡Copiado!
1DATA mycas.produits;
2 LENGTH NomProduit $30 Categorie $20 Statut $10;
3 INPUT NomProduit Categorie Prix Statut $;
4 DATALINES;
5Ordinateur Portable Electronique 1200 EnStock
6Smartphone Electronique 800 EnStock
7Souris Accessoire 25 EnStock
8Clavier Accessoire 75 Rupture
9Ecran Electronique 300 EnStock
10Tablette Electronique 500 EnStock
11;
12RUN;
13 
14PROC CAS;
15 SESSION casauto;
16 TABLE.promote / caslib='mycas' name='produits';
17 TABLE.update /
18 TABLE='produits',
19 SET={
20 {var='Prix', value='Prix * 1.05'}
21 };
22 TABLE.fetch / TABLE='produits';
23QUIT;
2 Bloque de código
PROC CAS
Explicación :
Este ejemplo actualiza los productos cuyo 'Estado' es 'Ruptura'. Para estos productos, el 'Precio' se reduce en un 10% y el 'Estado' se cambia a 'EnStock'. Esto demuestra una actualización condicional en varias columnas.
¡Copiado!
1PROC CAS;
2 SESSION casauto;
3 
4 TABLE.update /
5 TABLE='produits',
6 where="Statut = 'Rupture'",
7 SET={
8 {var='Prix', value='Prix * 0.90'},
9 {var='Statut', value="'EnStock'"}
10 };
11 TABLE.fetch / TABLE='produits';
12QUIT;
3 Bloque de código
PROC CAS / %LET
Explicación :
Este ejemplo utiliza macro-variables para hacer la actualización más dinámica. Los productos de una categoría específica (aquí 'Electronique') ven su precio aumentado en un 15% y su 'NomProduit' es prefijado por 'MAJ-'. Esto ilustra el uso de expresiones complejas y macro-variables.
¡Copiado!
1%let CATEGORIE_CIBLE = 'Electronique';
2%let POURCENTAGE_AUGMENTATION = 1.15;
3 
4PROC CAS;
5 SESSION casauto;
6 
7 TABLE.update /
8 TABLE='produits',
9 where="Categorie = &CATEGORIE_CIBLE.",
10 SET={
11 {var='Prix', value="Prix * &POURCENTAGE_AUGMENTATION."},
12 {var='NomProduit', value="'MAJ-' || NomProduit"}
13 };
14 TABLE.fetch / TABLE='produits' / to=100; /* Fetch toutes les lignes pour vérification */
15QUIT;
4 Bloque de código
PROC CAS Data
Explicación :
Este escenario muestra cómo la acción `table.update` puede usarse para validaciones. El primer bloque intenta actualizar un producto inexistente, demostrando el manejo de devoluciones. El segundo bloque actualiza el estado de los productos cuyo stock es menor o igual a 10, cambiando el valor numérico 'Stock' a una cadena de caracteres 'Faible'. Esto ilustra el uso de la función `input` para la conversión de tipo en la cláusula `where`.
¡Copiado!
1DATA mycas.stock_produits;
2 LENGTH NomProduit $30 Stock Initial $10;
3 INPUT NomProduit Stock $;
4 DATALINES;
5Ordinateur Portable 10
6Smartphone 50
7Souris 200
8Clavier 0
9Ecran 30
10Tablette 5
11;
12RUN;
13 
14PROC CAS;
15 SESSION casauto;
16 TABLE.promote / caslib='mycas' name='stock_produits';
17
18 /* Tentative de mise à jour pour un produit non existant */
19 r = TABLE.update {
20 TABLE='produits',
21 where="NomProduit = 'ProduitInexistant'",
22 SET={
23 {var='Prix', value='Prix + 100'}
24 }
25 };
26 PRINT r;
27 
28 /* Mise à jour conditionnelle avec vérification de stock */
29 r = TABLE.update {
30 TABLE='stock_produits',
31 where="input(Stock, ?? best.) <= 10",
32 SET={
33 {var='Stock', value="'Faible'"}
34 }
35 };
36 PRINT r;
37 TABLE.fetch / TABLE='stock_produits';
38QUIT;
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.
Información de copyright : Copyright © SAS Institute Inc. All Rights Reserved