Il s'agit d'un suivi d'un previous question qui ne prenait en compte qu'une seule variable avec deux sous-groupes. Dans cette question, la solution consistait à ordonner les sous-groupes en triant les données. Cette approche, cependant, se décompose lorsqu'il y a plusieurs variables.PROC TABULATE Réorganiser les sous-groupes d'en-tête indépendamment des données
Cela devient un jeu de tri des variables dans une séquence qui produit le résultat désiré. Chaque sous-groupe variable BY
suivant dépend des niveaux précédents. Si tous les sous-groupes ne sont pas présents dans un groupe de niveau supérieur, tous les sous-groupes ne peuvent pas être organisés dans l'ordre souhaité. L'PROC TABULATE
n'est pas l'outil approprié pour cette tâche (c'est-à-dire l'obtention de pourcentages de divers groupes sur plusieurs variables) ou il existe une technique qui permet d'organiser les sous-groupes indépendamment des données. Est-ce que je vais chercher l'aiguille dans la botte de documentation ou est-ce que je réinvente la roue? Toute idée que vous pourriez me donner serait appréciée.
Exemple:
Pour donner un exemple, dire que je veux créer une table avec les sous-groupes de chaque variable dans l'ordre (Y, N). Notez que var4
n'est pas sorti dans le bon ordre. Au moment où les autres variables ont été triées, il n'y a pas assez de valeurs var4
présentes pour être triées dans l'ordre souhaité.
data example;
input group $ var1 $ var2 $ var3 $ var4 $;
datalines;
1 Y Y N Y
1 N Y N N
2 Y N Y N
2 Y Y Y N
3 N N N Y
3 N Y Y N
;
run;
proc sort data = example out = sorted;
by descending var1
descending var2
descending var3
descending var4
;
run;
title 'Percent';
proc tabulate data = sorted order = data;
class group var1 var2 var3 var4;
table group='Group',
all = 'Total'*pctn=''
var1 = 'Variable 1'*pctn=''
var2 = 'Variable 2'*pctn=''
var3 = 'Variable 3'*pctn=''
var4 = 'Variable 4'*pctn='';
run;
Il peut être possible de mettre au point une combinaison de BY
variables du PROC SORT
qui donnent un (Y, N) ordre de sous-groupement, mais cela impliquerait un tas de tripotage qui n'est pas robuste contre changements dans les données. Si la table doit être mise à jour tous les mois, alors chaque mois, vous devrez jouer avec le tri.
Merci. Pour les futurs lecteurs, le '+ 1' de l'instruction' INPUT' est un "contrôle de pointeur de colonne" qui déplace les colonnes de pointeur * n *. Dans ce cas, il déplace le pointeur vers la valeur de données suivante. –
Malheureusement, cette approche ne fonctionne que pour un petit nombre de variables, chacune avec seulement quelques sous-groupes. Cela fonctionne bien pour quatre variables avec deux sous-groupes chacun. Ceci fait que les 'classtypes' ont 48 observations. Mais plus il y a de variables et de sous-groupes, plus le 'classtypes' devient grand. Pour 16 variables avec des sous-groupes de taille 6, 2, 2, 2, 2, 2, 2, 2, 4, 6, 2, 2, 2, 10, 8 et 10 chacune, le tableau 'classtypes 'comporte 117 964 800 observations . Cela me prend 6 minutes pour imprimer la table, en plus des 7 qu'il faut pour générer 'classtypes' lui-même. Et 'classtypes' est 26.2Gb. –
Si vous avez des contraintes sur les combinaisons de valeurs possibles, vous pouvez les coder dans la définition de la classe. Au-delà d'un certain point, je suggérerais de diviser vos données sur un certain nombre de tables plus petites et plus lisibles. – user667489