J'ai une sortie proc signifie qui a des lignes pour chaque statistique récapitulative et des colonnes pour chaque variable. Comment puis-je "faire pivoter" ceci pour qu'il soit unique par la variable "by"?
Ma solution de contournement est de prendre la sortie et de la fusionner sur elle-même en utilisant les commandes WHERE et RENAME. Y a-t-il un moyen plus simple d'accomplir cela?
MONTH VAR1_N VAR2_N VAR1_MEAN VAR2_MEAN ... 2019.01 19 15 17.5 13 2019.02 ...
Cela devrait prendre un tableau au format suivant:
MONTH _STAT_ Var1 Var2 2019.01 N 19 15 2019.01 MEAN 17.5 13 2019.01 MAX 21 16 2019.01 MIN 15 12 2019.01 STD 2.5 1.5 2019.02 ...
et afficher comme ceci:
proc means data=data1 n mean max min std noprint; var var1 var2; by month; output out=SummaryStats; run; data SummaryStatsUnique; merge SummaryStats (in=in1 keep=month var1 var2 _stat_ rename=(var1=var1_N var2=var2_N) where=(_stat_="N")) SummaryStats (in=in2 keep=month var1 var2 _stat_ rename=(var1=var1_MEAN var2=var2_MEAN) where=(_stat_="MEAN")) SummaryStats (in=in3 keep=month var1 var2 _stat_ rename=(var1=var1_MAX var2=var2_MAX) where=(_stat_="MAX")) SummaryStats (in=in4 keep=month var1 var2 _stat_ rename=(var1=var1_MIN var2=var2_MIN) where=(_stat_="MIN")) SummaryStats (in=in5 keep=month var1 var2 _stat_ rename=(var1=var1_STD var2=var2_STD) where=(_stat_="STD")) ; by month; if ^(first.month and last.month) then abort; if ^(in1 and in2 and in3 and in4 and in5) then abort; run;
3 Réponses :
Je pense que ces options vous donnent un ensemble de données plus utile avec des variables en lignes avec des niveaux CLASS.
ods select none; proc means data=sashelp.class n mean max min std stackods; class age; var height weight; ods output summary=summary; run; ods select all; proc print; run;
Pourquoi ne pas utiliser AUTONAME et créer les données directement.
proc summary data=sashelp.class nway; class age; var height weight; output out=summary n= mean= max= min= std= / autoname; run;
Merci! Exactement ce que je cherchais.
Je suis simplement curieux de savoir si cela ne provient pas d'un résumé de processus et que je voulais obtenir la table de données pour passer de la table de départ à la table de fin, y a-t-il un bon moyen de le faire avec une procédure SAS? Par exemple, si la colonne STAT était une autre colonne de classification et qu'elle était unique par MONTH et cette nouvelle colonne. La seule façon dont je peux penser est de faire ce qui est dans mon code d'origine. Merci pour l'aide!
@NathanPrzybylo Bien sûr, voyez ma nouvelle réponse.
Transformez l'ensemble de données de sortie par défaut PROC MEANS / SUMMARY en style de nom automatique.
proc means noprint missing chartype data=sashelp.class; class sex; output out=stat1; run; proc print; run; proc transpose data=stat1(drop=_freq_) out=stat2; by _type_ sex _stat_ notsorted; run; proc print; run; proc transpose data=stat2 out=stat3 delim=_; by _type_ sex; id _name_ _stat_; var col1; run; proc print; run;
Merci j'apprécie l'aide!