Publié le :

Exécution parallèle de régressions CAS avec SAS/CONNECT

Ce code est également disponible en : Deutsch English Español
En attente de validation
Attention : Ce code nécessite des droits administrateur.
Le script commence par initialiser deux sessions SAS©/CONNECT ('session1' et 'session2'), configurant chacune pour lancer un processus SAS© distant. Pour chaque session, le code soumet de manière asynchrone (non bloquante) une série d'opérations : définition d'options CAS, connexion à un contrôleur CAS spécifique, chargement de la table 'cars' de la bibliothèque SASHELP vers une table CAS dans 'casuser', et exécution d'une action 'simple.regression' avec des paramètres différents pour chaque session (alpha, order). Les résultats de chaque régression sont ensuite sauvegardés dans des tables CAS temporaires et des métadonnées spécifiques sont récupérées via l'action 'table.fetch'. Une fois les soumissions effectuées, le script principal attend la complétion des deux sessions distantes, récupère leurs journaux et résultats respectifs, puis procède à la déconnexion et à la fermeture des sessions SAS©/CONNECT.
Analyse des données

Type : SASHELP


Les données utilisées pour les régressions sont basées sur la table 'cars' de la bibliothèque interne SASHELP. Cette table est chargée dans chaque session distante vers une table CAS ('casuser.cars') avant d'être utilisée par les actions CAS de régression.

1 Bloc de code
SAS/CONNECT
Explication :
Ce bloc établit deux sessions SAS/CONNECT distinctes, 'session1' et 'session2'. Chaque 'signon' initie un processus SAS distant, permettant l'exécution de code en parallèle ou de manière distribuée. L'option 'sascmd' spécifie la commande à exécuter pour démarrer le processus SAS distant.
Copié !
1signon session1 sascmd="!sascmd -nosyntaxcheck -noterminal";
2signon session2 sascmd="!sascmd -nosyntaxcheck -noterminal";
3 
2 Bloc de code
DATA STEP Data
Explication :
Ce bloc soumet du code à 'session1' de manière asynchrone (WAIT=NO). Il configure les options CAS pour la session distante, établit une connexion au contrôleur CAS spécifié avec un timeout étendu, rend toutes les caslibs disponibles, puis utilise un DATA STEP pour charger la table 'cars' de SASHELP dans une nouvelle table CAS nommée 'cars' au sein de la caslib 'casuser'. Cette table sera la source des analyses CAS.
Copié !
1rsubmit session1 wait=no;
2options casdatalimit=10G;
3options compress=yes;
4 
5cas host="19w47mpp-2.gtp-americas.sashq-d.openstack.sas.com"
6 port=5570
7 sessopts=(TIMEOUT=99,DQLOCALE=ENUSA);
8 
9caslib _all_ assign;
10 
11DATA casuser.cars;
12 SET sashelp.cars;
13RUN;
3 Bloc de code
PROC CAS Data
Explication :
Dans 'session1', ce bloc exécute une action 'simple.regression' via PROC CAS. Il spécifie 'mpg_highway' comme variable cible et 'weight' comme variable d'entrée, avec un niveau de signification alpha de 0.05 et un ordre polynomial de 3. Les résultats de la régression sont sauvegardés dans une table CAS 'reg1', et des variables spécifiques de ces résultats sont récupérées pour analyse ultérieure via l'action 'table.fetch'.
Copié !
1PROC CAS;
2SESSION casauto;
3SIMPLE.regression RESULT=reg STATUS=rc /
4 alpha=0.05,
5 order=3,
6 target="mpg_highway",
7 inputs={"weight"},
8 TABLE={caslib="casuser", name="cars"};
9RUN;
10 IF (rc.severity == 0) THEN DO;
11 saveresult reg casout="reg1";
12 
13 TABLE.fetch /
14 fetchvars={
15 {name="response", label="Response"},
16 {name="regressor", label="Regressor"},
17 "intercept", "linear", "quadratic",
18 "ymean", "Ystd", "xmean" , "Xstd"},
19 TABLE="reg1",
20 index=false;
21 END;
22RUN;
23QUIT;
24endrsubmit;
4 Bloc de code
DATA STEP Data
Explication :
Ce bloc, soumis de manière asynchrone à 'session2', est similaire au bloc correspondant de 'session1'. Il configure les options CAS, se connecte au même contrôleur CAS, rend les caslibs disponibles et charge la table 'cars' de SASHELP vers une table CAS 'casuser.cars'. Cela permet à 'session2' d'opérer indépendamment et en parallèle pour ses propres analyses CAS.
Copié !
1rsubmit session2 wait=no;
2options casdatalimit=10G;
3options compress=yes;
4 
5cas host="19w47mpp-2.gtp-americas.sashq-d.openstack.sas.com"
6 port=5570
7 sessopts=(TIMEOUT=99,DQLOCALE=ENUSA);
8 
9caslib _all_ assign;
10 
11DATA casuser.cars;
12 SET sashelp.cars;
13RUN;
5 Bloc de code
PROC CAS Data
Explication :
Dans 'session2', ce bloc exécute également une action 'simple.regression' via PROC CAS sur 'casuser.cars', mais avec des paramètres différents : un niveau alpha de 0.15 et un ordre polynomial de 2. Les résultats sont sauvegardés dans une table CAS 'reg2', et les mêmes variables clés sont récupérées que dans 'session1' pour permettre une comparaison ou une analyse des différents modèles de régression.
Copié !
1PROC CAS;
2SESSION casauto;
3SIMPLE.regression RESULT=reg2 STATUS=rc /
4 alpha=0.15,
5 order=2,
6 target="mpg_highway",
7 inputs={"weight"},
8 TABLE={caslib="casuser", name="cars"};
9RUN;
10 IF (rc.severity == 0) THEN DO;
11 saveresult reg2 casout="reg2";
12 
13 TABLE.fetch /
14 fetchvars={
15 {name="response", label="Response"},
16 {name="regressor", label="Regressor"},
17 "intercept", "linear", "quadratic",
18 "ymean", "Ystd", "xmean" , "Xstd"},
19 TABLE="reg2",
20 index=false;
21 END;
22 
23RUN;
24QUIT;
25 
26endrsubmit;
6 Bloc de code
SAS/CONNECT
Explication :
Ce bloc final gère la synchronisation et la fermeture des sessions SAS/CONNECT. La déclaration 'waitfor _all_ session1 session2;' bloque l'exécution du programme principal jusqu'à ce que les deux sessions distantes aient terminé leurs tâches. 'rget' est ensuite utilisé pour rapatrier les journaux et les résultats (s'il y en a) de chaque session. Enfin, 'signoff' déconnecte et termine proprement les sessions SAS/CONNECT.
Copié !
1waitfor _all_ session1 session2;
2 
3rget session1;
4 
5rget session2;
6 
7signoff session1;
8signoff session2;
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 © 2021, SAS Institute Inc., Cary, NC, USA. All Rights Reserved. SPDX-License-Identifier: Apache-2.0