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`.
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é !
data _null_;
if 0 then set raw nobs=nobs;
array v {*} _numeric_;
array T {100} $32 _temporary_;
do i=1 to dim(v);
T[i]=vname(v[i]);
end;
call symputx("colvars", catx(' ', of T[*]));
call symputx("C", dim(v));
call symputx("R", nobs);
stop;
run;
1
DATA _null_;
2
IF 0 THENSET raw nobs=nobs;
3
array v {*} _numeric_;
4
array T {100} $32 _temporary_;
5
DO i=1 to dim(v);
6
T[i]=vname(v[i]);
7
END;
8
call symputx("colvars", catx(' ', of T[*]));
9
call symputx("C", dim(v));
10
call symputx("R", nobs);
11
stop;
12
RUN;
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é !
data suppressed;
set raw end=last;
array T {0:%eval(&C-1), 0:%eval(&R-1)} _temporary_;
array c {*} &colvars;
array xy {%sysevalf(&C*&R), 2} _temporary_; /* 4*6 = 24 */
retain ns 0;
do i=1 to dim(c);
T[i-1, _N_-1]=c[i];
if 0 < c[i] < 11 then do;
ns+1;
xy[ns, 1]=i-1;
xy[ns, 2]=_N_-1;
end;
end;
if last then do;
if ns=0 then goto mktbl;
do i=1 to ns;
x=xy[i, 1];
y=xy[i, 2];
* check if position x, y has already been set to missing
by a previous iteration - if so, go to next iteration of loop ;
if T[x, y]=. then continue;
minX=1;
minY=1;
minXloc=.;
minYloc=.;
do xloc=1 to hbound(T, 1);
if xloc ^= x and T[xloc, y] / T[0, y] <= minX then do;
minXloc=xloc;
minX=T[xloc, y] / T[0, y];
end;
end;
do yloc=1 to hbound(T, 2);
if yloc ^= y and T[x, yloc] / T[x, 0] <= minY then do;
minYloc=yloc;
minY=T[x, yloc] / T[x, 0];
end;
end;
* suppress the current value (x, y), the horizontal sibling (minXloc, y),
the vertical sibling (x, minYloc), and the diagonal sibling (minXloc, minYloc) ;
T[x, y]=.; T[minXloc, y]=.; T[x, minYloc]=.; T[minXloc, minYloc]=.;
end;
mktbl:
* output the suppressed table ;
do y=0 to hbound(T, 2);
do x=0 to hbound(T, 1);
c[x+1]=T[x, y];
end;
output;
end;
end;
keep &colvars;
run;
1
DATA suppressed;
2
SET raw END=last;
3
array T {0:%eval(&C-1), 0:%eval(&R-1)} _temporary_;
Explication : Ce bloc affiche le contenu de la table de données originale 'raw' à des fins de comparaison avant la suppression.
Copié !
title "original (raw)";
proc print data=raw;
run;
1
title "original (raw)";
2
PROC PRINTDATA=raw;
3
RUN;
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é !
title "suppressed";
proc print data=suppressed;
run;
title;
1
title "suppressed";
2
PROC PRINTDATA=suppressed;
3
RUN;
4
title;
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.
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.