Publié le :
Statistique CREATION_INTERNE

Suppression de petites valeurs dans une table de fréquence

En attente de validation
Le script commence par créer une table 'raw' contenant des données de fréquence. Il identifie ensuite les cellules dont la valeur est faible (supérieure à 0 et inférieure à 11). Pour chaque cellule identifiée, l'algorithme procède à une suppression primaire (la cellule elle-même) et à une suppression secondaire pour éviter la divulgation par déduction. Il sélectionne une cellule supplémentaire sur la même ligne et une sur la même colonne, ainsi que la cellule à l'intersection, et les masque également en leur assignant une valeur manquante. Le résultat est une nouvelle table 'suppressed'. Finalement, les tables originale et modifiée sont affichées avec PROC PRINT pour comparaison.
Analyse des données

Type : CREATION_INTERNE


Les données sont créées directement dans le script à l'aide d'une instruction `cards` au sein d'une étape DATA, pour former la table 'raw'.

1 Bloc de code
DATA STEP Data
Explication :
Ce bloc crée la table de travail 'raw' qui sert de source de données pour l'exemple. Les données sont intégrées directement dans le code via une instruction `cards`.
Copié !
1DATA raw;
2INPUT tot grpA grpB grpC;
3CARDS;
4559 174 200 185
5111 53 45 13
6131 33 50 48
7104 14 44 46
8137 25 56 56
976 49 5 22
10;
11RUN;
2 Bloc de code
DATA STEP
Explication :
Cette étape DATA _NULL_ ne génère pas de table de sortie. Son but est de lire les métadonnées de la table 'raw' (noms des variables, nombre de lignes et de colonnes) et de stocker ces informations dans des macro-variables SAS (colvars, C, R) pour une utilisation dynamique dans la suite du script.
Copié !
1DATA _null_;
2IF 0 THEN SET raw nobs=nobs;
3array v {*} _numeric_;
4array T {100} $32 _temporary_;
5DO i=1 to dim(v);
6 T[i]=vname(v[i]);
7END;
8call symputx("colvars", catx(' ', of T[*]));
9call symputx("C", dim(v));
10call symputx("R", nobs);
11stop;
12RUN;
3 Bloc de code
DATA STEP Data
Explication :
C'est le cœur de l'algorithme. Il lit la table 'raw', la charge dans un tableau temporaire en mémoire, identifie les cellules à supprimer, applique la logique de suppression primaire et secondaire en assignant une valeur manquante (.), puis génère la table de sortie 'suppressed'.
Copié !
1DATA suppressed;
2SET raw END=last;
3array T {0:%eval(&C-1), 0:%eval(&R-1)} _temporary_;
4array c {*} &colvars;
5array xy {%sysevalf(&C*&R), 2} _temporary_; /* 4*6 = 24 */
6retain ns 0;
7DO i=1 to dim(c);
8 T[i-1, _N_-1]=c[i];
9 IF 0 < c[i] < 11 THEN DO;
10 ns+1;
11 xy[ns, 1]=i-1;
12 xy[ns, 2]=_N_-1;
13 END;
14END;
15IF last THEN DO;
16 IF ns=0 THEN goto mktbl;
17 DO i=1 to ns;
18 x=xy[i, 1];
19 y=xy[i, 2];
20 * check if position x, y has already been set to missing
21 by a previous iteration - if so, go to next iteration of loop ;
22 IF T[x, y]=. THEN continue;
23 minX=1;
24 minY=1;
25 minXloc=.;
26 minYloc=.;
27 DO xloc=1 to hbound(T, 1);
28 IF xloc ^= x and T[xloc, y] / T[0, y] <= minX THEN DO;
29 minXloc=xloc;
30 minX=T[xloc, y] / T[0, y];
31 END;
32 END;
33 DO yloc=1 to hbound(T, 2);
34 IF yloc ^= y and T[x, yloc] / T[x, 0] <= minY THEN DO;
35 minYloc=yloc;
36 minY=T[x, yloc] / T[x, 0];
37 END;
38 END;
39 * suppress the current value (x, y), the horizontal sibling (minXloc, y),
40 the vertical sibling (x, minYloc), and the diagonal sibling (minXloc, minYloc) ;
41 T[x, y]=.; T[minXloc, y]=.; T[x, minYloc]=.; T[minXloc, minYloc]=.;
42 END;
43 mktbl:
44 * OUTPUT the suppressed TABLE ;
45 DO y=0 to hbound(T, 2);
46 DO x=0 to hbound(T, 1);
47 c[x+1]=T[x, y];
48 END;
49 OUTPUT;
50 END;
51END;
52keep &colvars;
53RUN;
4 Bloc de code
PROC PRINT
Explication :
Ce bloc affiche le contenu de la table de données originale 'raw' à des fins de comparaison avant la suppression.
Copié !
1title "original (raw)";
2PROC PRINT DATA=raw;
3RUN;
5 Bloc de code
PROC PRINT
Explication :
Ce bloc affiche le contenu de la table 'suppressed' après l'application de l'algorithme de suppression, montrant ainsi les cellules masquées.
Copié !
1title "suppressed";
2PROC PRINT DATA=suppressed;
3RUN;
4title;
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 : Nov 2025 J Smith