Le jeu de données principal est généré à partir de boucles `do` imbriquées qui parcourent les lignes et les colonnes d'une table carrée de taille `&size`. Les valeurs des variables sont calculées algorithmiquement. Un jeu de données externe peut être fusionné optionnellement via le paramètre `&data`.
1 Bloc de code
DATA STEP Data
Explication : Ce bloc initialise la grille de la table carrée de taille `&size`*`&size`. Pour chaque cellule (R,C), il calcule une série de variables de base (S, L, T, Q, etc.) utilisées dans les modèles d'analyse de tables de mobilité. La logique de calcul diffère selon que la cellule est sur la diagonale, au-dessus ou en dessous.
Copié !
options nonotes;
data generate1;
do R=1 to &size;
do C=1 to &size;
if R lt C then
do;
k=abs(R-C);
S=k+1-(R+1)*((0.5*R)+1)+(&size+3)*(R+1)-3-2*&size;
L=1;
T=1;
Q=&size+1;
DA=abs(R-C);
D=abs(R-C);
F=abs(R-C)+1;
OS1=R;
OS2=2*&size-C;
end;
else if R gt C then
do;
k=abs(R-C);
S=(k+1)-(C+1)*(.5*C+1)+(&size+3)*(C+1)-3-2*&size;
L=1;
T=2;
Q=&size+1;
DA=abs(R-C);
D=abs(R-C)+(&size-1);
F=1;
OS1=(&size-1)+C;
OS2=(&size+1)-R;
end;
else /*if R eq C then */
do;
S=1-(C+1)*(.5*C+1)+(&size+3)*(C+1)-3-2*&size;
L=2;
T=3;
Q=R;
DA=&size;
D=2*&size-1;
F=1;
OS1=2*&size-1;
OS2=2*&size-1;
end;
U=R*C;
output;
drop k;
end; end;
label
R = 'Row'
C = 'Col'
S = 'Symmetry'
T = 'Triangle Asymmetry'
Q = 'Quasi Independence'
DA = 'Diagonal Absolute'
D = 'Diagonals Asymmetry'
L = 'Uniform loyalty'
;
run;
Explication : À partir du jeu de données précédent, ce bloc ajoute un identifiant unique `ID`. Il crée et peuple ensuite des vecteurs indicateurs `FF` (pour les lignes) et `SS` (pour les colonnes), ainsi que leur somme `H` et leur différence `DD`, qui sont utiles pour modéliser les effets de marge.
Copié !
data generate2;
set generate1;
ID=_N_;
ARRAY FF(&size);
ARRAY SS(&size);
ARRAY H(&size);
ARRAY DD(&size);
do i=1 TO &size;
if R=i then FF(i)=1;
else FF(i)=0;
if C=i then SS(i)=1;
else SS(i)=0;
H(i)=FF(i)+SS(i);
DD(i)=FF(i)-SS(i);
end;
drop i;
run;
1
DATA generate2;
2
SET generate1;
3
ID=_N_;
4
ARRAY FF(&size);
5
ARRAY SS(&size);
6
ARRAY H(&size);
7
ARRAY DD(&size);
8
DO i=1 TO &size;
9
IF R=i THEN FF(i)=1;
10
ELSE FF(i)=0;
11
IF C=i THEN SS(i)=1;
12
ELSE SS(i)=0;
13
H(i)=FF(i)+SS(i);
14
DD(i)=FF(i)-SS(i);
15
END;
16
drop i;
17
RUN;
3 Bloc de code
Macro %DO loop Data
Explication : Cette boucle de macro génère dynamiquement `&size - 1` jeux de données (`vdata1`, `vdata2`, ...). Chaque jeu `vdata&h` contient un vecteur `v&h` qui partitionne la table en sous-carrés, une technique utilisée dans certains modèles de mobilité sociale.
Explication : Ce bloc final assemble toutes les pièces. Il fusionne le jeu de données `generate2` avec tous les jeux `vdata&k` créés précédemment en utilisant l'identifiant `ID`. Si un jeu de données d'entrée `&data` est spécifié, il est également fusionné. Enfin, la macro nettoie tous les jeux de données intermédiaires avec `PROC DATASETS` pour ne conserver que le résultat final.
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.
« Le calcul manuel des indices de symétrie et de distance diagonale dans une table carrée est une source fréquente d'erreurs de programmation, particulièrement lorsque la taille de la table augmente.
La macro %square élimine ce risque en encapsulant la logique géométrique des cellules (R, C) directement dans le flux de données. Que vous analysiez des migrations, des tableaux de flux de main-d'œuvre ou des tests de concordance (Kappa), disposer de vecteurs pré-calculés comme la loyauté uniforme (L) ou l'asymétrie des diagonales (D) est un gain de productivité majeur. C’est le pont parfait entre la théorie statistique et l’implémentation logicie »
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.