Skynet a un nouveau défi logistique. Le tout nouveau modèleReprésentation mathématique entraînée sur des données pour capturer des tendances, prédire des résultats ou classifier des observations via des algorithmes (Régression, Forêt aléatoire, Gradient Boosting). T-X dispose de 5 emplacements d'armes intégrés. Lors de l'initialisation du système, Skynet doit vérifier chaque emplacement (Arme_1, Arme_2, Arme_3, Arme_4, Arme_5). Si l'emplacement est "Vide", il doit y charger du "Plasma".
Un programmeur humain fatigué écrirait ceci :
2
3
4
if Arme_2 = 'Vide' then Arme_2 = 'Plasma';
/* ... 5 lignes plus tard ... */
if Arme_5 = 'Vide' then Arme_5 = 'Plasma';
Et s'il y a 50 armes ? C'est le burn-out assuré. En tant qu'ingénieur certifié SAS 9 Advanced, vous savez que les machines ne répètent jamais le même code. Elles utilisent des Arrays (tableaux) pour regrouper les variablesColonnes d'une table SAS contenant des données spécifiques (numériques ou caractères). Elles possèdent des attributs comme le nom, le type, la longueur, l'étiquette et le format d'affichage. et les traiter à la chaîne avec une boucle.
1. Qu'est-ce qu'un Array (et ce qu'il n'est PAS)
La plus grande erreur à l'examen est de croire qu'un ARRAY crée une nouvelle structure de données ou une nouvelle table. Faux.
Un ARRAY n'est qu'un regroupement temporaire, une étiquette collée sur des variablesColonnes d'une table SAS contenant des données spécifiques (numériques ou caractères). Elles possèdent des attributs comme le nom, le type, la longueur, l'étiquette et le format d'affichage. qui existent déjà. C'est comme regrouper les 5 variablesColonnes d'une table SAS contenant des données spécifiques (numériques ou caractères). Elles possèdent des attributs comme le nom, le type, la longueur, l'étiquette et le format d'affichage. Arme_1 à Arme_5 dans un tiroir appelé Arsenal.
2
3
4
5
6
7
8
9
10
11
12
13
set work.cyborgs;
/* Déclaration du tableau */
array Arsenal {5} Arme_1 - Arme_5;
/* Traitement en série */
do i = 1 to 5;
if Arsenal{i} = 'Vide' then Arsenal{i} = 'Plasma';
end;
drop i; /* On supprime l'index de la boucle */
run;
En 3 lignes, vous venez de mettre à jour 5 variablesColonnes d'une table SAS contenant des données spécifiques (numériques ou caractères). Elles possèdent des attributs comme le nom, le type, la longueur, l'étiquette et le format d'affichage.. Si le T-X passe à 50 armes (Arme_1 - Arme_50), le code fait toujours 3 lignes. C'est la beauté des Arrays.
2. Le secret de la fonction DIM()
Dans l'exemple ci-dessus, nous avons utilisé do i = 1 to 5. Mais coder des chiffres en dur, c'est mal (Skynet déteste ça). Que se passe-t-il si demain le tableau passe à 6 éléments ? Votre boucle va rater la dernière arme.
Pour rendre votre code incassable, utilisez la fonction DIM(), qui renvoie automatiquement le nombre d'éléments présents dans le tableau.
2
3
4
5
do i = 1 to dim(Arsenal);
if Arsenal{i} = 'Vide' then Arsenal{i} = 'Plasma';
end;
Astuce Certification : L'examen adore les syntaxes de raccourcis (Arme_:, ou _NUMERIC_ pour toutes les variablesColonnes d'une table SAS contenant des données spécifiques (numériques ou caractères). Elles possèdent des attributs comme le nom, le type, la longueur, l'étiquette et le format d'affichage. numériques, ou _CHARACTER_ pour le texte). Et DIM() est un incontournable absolu.
3. Les Dimensions Multiples : Le T-1000 en 2D
Les choses se corsent. Le T-1000 ne stocke pas ses armes sur une seule ligne. Étant fait de métal liquide, son corps est divisé en une grille de secteurs : 4 zones (Bras Droit, Bras Gauche, Torse, Jambes) qui contiennent chacune 3 capteurs.
C'est ici qu'intervient le tableau multidimensionnel (2 dimensions : lignes et colonnes).
2
3
4
5
6
7
8
9
10
11
12
13
14
set work.capteurs;
/* Un tableau de 4 lignes et 3 colonnes */
array Grille_Capteurs {4, 3} Capteur_1 - Capteur_12;
/* Une boucle dans une boucle ! */
do ligne = 1 to 4;
do col = 1 to 3;
/* Si le capteur est endommagé (< 50%), on le répare */
if Grille_Capteurs{ligne, col} < 50 then Grille_Capteurs{ligne, col} = 100;
end;
end;
run;
4. L'arme fatale de l'examen : TEMPORARY
Accrochez-vous bien, car c'est la question de certification par excellence sur les tableaux. Imaginons que Skynet ait besoin de comparer l'efficacité de ses unités à 3 seuils de référence (80%, 90%, et 99%). Vous ne voulez pas que ces seuils s'ajoutent comme de nouvelles colonnes dans votre table finale, ils ne servent qu'à faire un calcul en mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya..
Vous devez utiliser le mot-clé magique _TEMPORARY_.
2
3
4
5
6
7
8
9
10
11
12
set work.cyborgs;
/* Création d'un tableau purement en mémoire RAM */
array Seuils {3} _temporary_ (80, 90, 99);
Score_Performance = 0;
do i = 1 to 3;
if Efficacite >= Seuils{i} then Score_Performance = Score_Performance + 1;
end;
run;
Les 3 règles d'or du _TEMPORARY_ pour l'examen :
- Les éléments du tableau n'ont pas de nom de variable (seulement
Seuils{1},Seuils{2}, etc.). - Ils sont automatiquement "Retained" (conservés d'une ligne à l'autre de l'étape DATA, comme avec une instruction
RETAIN). - Ils ne sont JAMAIS écrits dans la table de sortie. Ils vivent dans l'ombre et meurent à la fin du
RUN;.
Conclusion
Vous venez de doter Skynet d'une capacité de traitement de masse. Avec les tableaux unidimensionnels, multidimensionnels et temporaires, vous pouvez appliquer des calculs ultra-complexes sur des dizaines de variablesColonnes d'une table SAS contenant des données spécifiques (numériques ou caractères). Elles possèdent des attributs comme le nom, le type, la longueur, l'étiquette et le format d'affichage. en quelques lignes de code seulement.
Mais les ARRAY _TEMPORARY_ ont une limite : ils sont statiques. Si vous voulez créer une table de correspondance dynamique, capable de chercher des valeurs à la vitesse de la lumière (comme un dictionnaire), vous devez maîtriser la technique la plus redoutée et la plus respectée de SAS Advanced : Les Objets Hash.
Et c'est exactement ce que nous allons voir dans l'Article 13 (Partie 1 sur les Hash Objects).






