/****************************************************************************** * Programme : Index an Existing SASHDAT File * Reference : INDEXA75D4 * Source : https://www.wearecas.eu/en/sampleCode/INDEXA75D4 ******************************************************************************/ /* --- BLOC 1 --- */ /* Assurez-vous qu'une session CAS est active */ options cashost="localhost" casport=5570; cas casauto; /* Crée une caslib temporaire si elle n'existe pas */ proc cas; caslib _all_ assign; builtins.addCaslib / name='mycaslib', path='/tmp/mycaslib', subdirs=TRUE, dataSource={srcType='PATH'}; quit; /* 1. Création d'un fichier SASHDAT simple sur disque */ data casuser.monfichier_unindexed; input ID $ Nom $ Valeur; datalines; A Jean 100 B Marie 150 C Pierre 200 D Anne 120 ; run; proc casutil; save casuser.monfichier_unindexed / caslib='mycaslib' replace; quit; /* 2. Indexation d'une seule colonne du fichier SASHDAT */ proc cas; table.index / table={name='monfichier_unindexed.sashdat', caslib='mycaslib'}, casout={name='monfichier_indexed', replace=TRUE, indexVars={'ID'}}; run; /* 3. Sauvegarde de la table indexée, remplaçant l'originale pour persister l'index */ table.save / table='monfichier_indexed', name='monfichier_unindexed.sashdat', caslib='mycaslib', replace=TRUE; run; /* 4. Vérification de l'indexation (optionnel) */ table.tableDetails / table={name='monfichier_indexed', caslib='mycaslib'}; run; quit; /* --- BLOC 2 --- */ /* Assurez-vous qu'une session CAS est active */ options cashost="localhost" casport=5570; cas casauto; /* Crée une caslib temporaire si elle n'existe pas */ proc cas; caslib _all_ assign; builtins.addCaslib / name='mycaslib', path='/tmp/mycaslib', subdirs=TRUE, dataSource={srcType='PATH'}; quit; /* 1. Création d'un autre fichier SASHDAT sur disque */ data casuser.ventes_unindexed; input Produit $ Region $ Montant; datalines; A Est 1000 B Ouest 1500 A Nord 800 C Sud 2200 B Est 1100 ; run; proc casutil; save casuser.ventes_unindexed / caslib='mycaslib' replace; quit; /* 2. Indexation de plusieurs colonnes */ proc cas; table.index / table={name='ventes_unindexed.sashdat', caslib='mycaslib'}, casout={name='ventes_indexed', replace=TRUE, indexVars={'Produit', 'Region'}}; run; /* 3. Sauvegarde de la table indexée */ table.save / table='ventes_indexed', name='ventes_unindexed.sashdat', caslib='mycaslib', replace=TRUE; run; /* 4. Affichage des détails de la table pour confirmer l'index */ table.tableDetails / table={name='ventes_indexed', caslib='mycaslib'}; run; quit; /* --- BLOC 3 --- */ /* Assurez-vous qu'une session CAS est active */ options cashost="localhost" casport=5570; cas casauto; /* Crée une caslib temporaire si elle n'existe pas */ proc cas; caslib _all_ assign; builtins.addCaslib / name='mycaslib', path='/tmp/mycaslib', subdirs=TRUE, dataSource={srcType='PATH'}; quit; /* 1. Création d'un fichier SASHDAT de plus grande taille */ data casuser.grandedonnees_unindexed; do i = 1 to 100000; ID = i; Groupe = ceil(i / 1000); Valeur = ranuni(0) * 1000; output; end; run; proc casutil; save casuser.grandedonnees_unindexed / caslib='mycaslib' replace; quit; /* 2. Indexation de colonnes clés directement depuis le fichier SASHDAT sur disque */ proc cas; table.index / table={name='grandedonnees_unindexed.sashdat', caslib='mycaslib'}, casout={name='grandedonnees_indexed', replace=TRUE, indexVars={'ID', 'Groupe'}}; run; /* 3. Sauvegarde de la table indexée, pour persister l'index sur disque */ table.save / table='grandedonnees_indexed', name='grandedonnees_unindexed.sashdat', caslib='mycaslib', replace=TRUE; run; /* 4. Nettoyage de la table en mémoire pour simuler un rechargement */ table.dropTable / name='grandedonnees_indexed'; run; /* 5. Chargement de la table SASHDAT qui inclut maintenant l'index */ table.loadTable / caslib='mycaslib', path='grandedonnees_unindexed.sashdat', casout={name='grandedonnees_reloaded', replace=TRUE}; run; /* 6. Vérification que la table rechargée possède bien l'index */ table.tableDetails / table={name='grandedonnees_reloaded', caslib='mycaslib'}; run; quit; /* --- BLOC 4 --- */ /* Assurez-vous qu'une session CAS est active */ options cashost="localhost" casport=5570; cas casauto; /* Crée une caslib temporaire si elle n'existe pas */ proc cas; caslib _all_ assign; builtins.addCaslib / name='mycaslib', path='/tmp/mycaslib', subdirs=TRUE, dataSource={srcType='PATH'}; quit; /* 1. Création d'un fichier SASHDAT local */ data _null_; file '/tmp/mycaslib/data_locale_unindexed.sashdat'; do i = 1 to 5000; ID = i; Categorie = ceil(i / 1000); Value = rannor(0); output; end; run; /* 2. Chargement du fichier SASHDAT dans CAS en tant que table en mémoire */ proc casutil; load data='/tmp/mycaslib/data_locale_unindexed.sashdat' outcaslib='mycaslib' casout='data_locale_cas' replace; quit; /* 3. Création d'une nouvelle table CAS indexée à partir de la table en mémoire */ proc cas; table.index / table={name='data_locale_cas', caslib='mycaslib'}, casout={name='data_locale_cas_indexed', replace=TRUE, indexVars={'ID', 'Categorie'}}; run; /* 4. Vérification de l'indexation de la nouvelle table CAS */ table.tableDetails / table={name='data_locale_cas_indexed', caslib='mycaslib'}; run; /* 5. Sauvegarde de la table CAS indexée vers un fichier SASHDAT */ table.save / table='data_locale_cas_indexed', name='data_locale_indexed.sashdat', caslib='mycaslib', replace=TRUE; run; quit;