/****************************************************************************** * Programme : Laden einer CSV-Datei von einem Server * Reference : LADENEB967 * Source : https://www.wearecas.eu/en/sampleCode/LADENEB967 ******************************************************************************/ /* --- BLOC 1 --- */ /* Configurez votre hôte et port CAS */ *options cashost="cloud.example.com" casport=5570; *cas casauto; /* Crée un fichier CSV temporaire à partir de données inline */ filename mydata temp; data _null_; file mydata dsd; put "Name,Age,City"; put "Alice,30,Paris"; put "Bob,24,Lyon"; put "Charlie,35,Marseille"; run; /* Récupère le chemin d'accès au fichier temporaire */ %let temppath = %sysfunc(quote(%sysfunc(pathname(mydata)))); /* Charge le fichier CSV temporaire dans CAS */ proc cas; upload path=&temppath. casOut={ name='my_temp_table', replace=True }, importOptions={fileType="csv"}; run; /* Vérifie que la table est chargée en affichant ses colonnes */ proc cas; table.columnInfo / table='my_temp_table'; run; quit; /* --- BLOC 2 --- */ /* Configurez votre hôte et port CAS */ *options cashost="cloud.example.com" casport=5570; *cas casauto; /* URL d'un fichier CSV public */ %let data_url='http://support.sas.com/documentation/onlinedoc/viya/exampledatasets/classfit.csv'; filename temp_csv temp; /* Simule le téléchargement d'un fichier CSV depuis une URL */ proc http method='get' url=&data_url. out=temp_csv; run; /* Récupère le chemin d'accès au fichier temporaire */ %let temppath = %sysfunc(quote(%sysfunc(pathname(temp_csv)))); /* Charge le fichier CSV temporaire dans CAS et le promeut en table globale */ proc cas; upload path=&temppath. casOut={ name='class_promote', replace=True, promote=True /* Propage la table pour la rendre globale */ }, importOptions={fileType="csv"}; run; /* Vérifie les informations de la table (action courante) */ proc cas; table.tableInfo / name='class_promote'; run; /* Obtient des statistiques sommaires (autre action courante) */ proc cas; t1.name = 'class_promote'; simple.summary / table = t1, subSet = {"N", "MEAN", "STD"}; quit; /* --- BLOC 3 --- */ /* Configurez votre hôte et port CAS */ *options cashost="cloud.example.com" casport=5570; *cas casauto; /* Crée un fichier CSV temporaire avec des données de santé */ filename health_data temp; data _null_; file health_data dsd; put "ID,Gender,Height_cm,Weight_kg"; put "1,M,175,70"; put "2,F,160,55"; put "3,M,180,85"; put "4,F,165,60"; put "5,M,170,75"; run; /* Récupère le chemin d'accès au fichier temporaire */ %let temppath = %sysfunc(quote(%sysfunc(pathname(health_data)))); /* Charge le fichier CSV temporaire dans CAS */ proc cas; upload path=&temppath. casOut={ name='health_metrics', replace=True }, importOptions={fileType="csv"}; run; /* Manipule les données dans CAS : Calcule l'IMC et filtre par genre */ proc cas; data casuser.health_bmi / caslib='casuser' replace=True; set casuser.health_metrics; BMI = Weight_kg / ((Height_cm / 100) ** 2); where Gender = 'M'; /* Filtre pour ne conserver que les hommes */ run; /* Obtient des statistiques sommaires pour la nouvelle table avec l'IMC */ simple.summary / table='health_bmi', inputs={'Height_cm', 'Weight_kg', 'BMI'}, subSet = {"MEAN", "MAX", "MIN"}; run; quit; /* --- BLOC 4 --- */ /* Configurez votre hôte et port CAS */ *options cashost="cloud.example.com" casport=5570; *cas casauto; /* --- Partie 1: Démonstration de la gestion d'erreur avec un fichier inexistant --- */ /* Tente de charger un fichier qui n'existe pas pour montrer une erreur */ /* Cette opération devrait générer une erreur visible dans le log SAS */ filename nonexist temp; proc cas; upload path=%sysfunc(quote(%sysfunc(pathname(nonexist)))) casOut={ name='error_test', replace=True }, importOptions={fileType="csv"}; run; /* Vérifier le log SAS pour les messages d'erreur de fichier introuvable */ /* --- Partie 2: Simulation de chargement et traitement de gros volumes de données --- */ /* Création d'une table CAS de grande taille (simulée) */ proc cas; data casuser.large_data (drop=_i_) / caslib='casuser' replace=True; do _i_ = 1 to 10000; /* 10 000 observations simulées */ ID = _i_; Category = ceil(rand('UNIFORM') * 5); /* 5 catégories aléatoires */ Value = rand('NORMAL') * 100 + 50; output; end; run; /* Calcul de statistiques sommaires sur la grande table, groupées par catégorie */ simple.summary / table='large_data', inputs={'Value'}, groupBy={'Category'}, subSet = {"N", "MEAN", "STD"}; run; quit;