Publié le :
ETL CREATION_INTERNE

Mettre à jour des lignes dans une table CAS

Ce code est également disponible en : Deutsch English Español
En attente de validation
L'action `table.update` du jeu d'actions 'table' est utilisée pour modifier les données d'une table CAS en mémoire. Elle est particulièrement utile pour les opérations de mise à jour transactionnelle ou en masse. Les mises à jour peuvent être effectuées sur l'ensemble de la table ou sur un sous-ensemble de lignes spécifié par une clause WHERE. Les nouvelles valeurs des colonnes peuvent être des constantes littérales, des expressions basées sur d'autres colonnes de la table, ou une combinaison des deux. Il est important de noter que les valeurs littérales de type caractère (comme 'Sport Sedan' ou '31,000') sont automatiquement converties si la colonne cible a un type numérique compatible.
Analyse des données

Type : CREATION_INTERNE


Les exemples utilisent des données générées (datalines) ou SASHELP, puis téléchargées vers CAS pour manipulation.

1 Bloc de code
PROC CAS / DATA step Data
Explication :
Cet exemple initialise une table `produits` en mémoire CAS. Ensuite, il utilise l'action `table.update` pour augmenter le 'Prix' de tous les produits de 5%. L'action `table.fetch` affiche les résultats de la mise à jour.
Copié !
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 Bloc de code
PROC CAS
Explication :
Cet exemple met à jour les produits dont le 'Statut' est 'Rupture'. Pour ces produits, le 'Prix' est réduit de 10% et le 'Statut' est changé en 'EnStock'. Cela démontre une mise à jour conditionnelle sur plusieurs colonnes.
Copié !
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 Bloc de code
PROC CAS / %LET
Explication :
Cet exemple utilise des macro-variables pour rendre la mise à jour plus dynamique. Les produits d'une catégorie spécifique (ici 'Electronique') voient leur prix augmenter de 15% et leur 'NomProduit' est préfixé par 'MAJ-'. Cela illustre l'utilisation d'expressions complexes et de macro-variables.
Copié !
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 Bloc de code
PROC CAS Data
Explication :
Ce scénario montre comment l'action `table.update` peut être utilisée pour des validations. Le premier bloc tente de mettre à jour un produit inexistant, démontrant la gestion des retours. Le second bloc met à jour le statut des produits dont le stock est inférieur ou égal à 10, changeant la valeur numérique 'Stock' en une chaîne de caractères 'Faible'. Cela illustre l'utilisation de la fonction `input` pour la conversion de type dans la clause `where`.
Copié !
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;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : Copyright © SAS Institute Inc. All Rights Reserved