SAS Proc trasponi e output per Excel
Domanda
Un'altra mia domanda SAS (ho notato che questi non vengono qui così spesso ...):
Ho un set di dati contenente qualcosa del genere:
Name | Category | Level | Score
John | cat1 | 1 | 80
John | cat1 | 2 | 70
John | cat1 | 3 | 10
John | cat2 | 1 | 60
John | cat2 | 2 | 95
John | cat2 | 3 | 43
John | cat2 | 4 | 28
E l'output (formato Excel) dovrebbe apparire:
| cat1 | cat2 |
name | 1 | 2 | 3 | 1 | 2 | 3 | 4 |
John | 80 | 70 |10 |60 |95 |43 |28 |
Quello che faccio ora è usare proc transpose
Per ottenere i dati nel giusto ordine e poi proc export
Per andare a .xls.
Funziona bene, tranne una cosa. Non riesco a far funzionare il secondo livello di suddivisione. Quindi adesso, prima del mio proc transpose
In realtà ho concatto la mia categoria e il mio livello nel mio set di dati (ad esempio che lo rendono '1_cat1') e poi trasponi su questo valore, dandomi il seguente output:
name | 1_cat1 | 2_cat1 | 3_cat1 | 1_cat2 | 2_cat2 | 3_cat2 | 4_cat2 |
John | 80 | 70 | 10 | 60 | 95 | 43 | 28 |
C'è un modo per ottenere il primo output desiderato?
Soluzione
Supponendo che tu abbia familiarità con il tuo ODS
Opzioni per farlo in Excel (sto solo usando pigramente HTML e salvandolo come .xls, ma potresti usare tagset ecc. Invece), ecco un PROC REPORT
Soluzione per visualizzare i dati nel formato che stai cercando. Scopri l'uso di across
Variabili nel rapporto Proc. Probabilmente c'è un modo per sopprimere la colonna che non viene utilizzata sotto Cat1 nell'output, ma non riesco a ricordarlo adesso.
data testData; infile datalines dsd delimiter='|'; input name $ category $ level score; datalines; John | cat1 | 1 | 80 John | cat1 | 2 | 70 John | cat1 | 3 | 10 John | cat2 | 1 | 60 John | cat2 | 2 | 95 John | cat2 | 3 | 43 John | cat2 | 4 | 28 ; run; ods html file="C:\SomePath\MyFile.xls"; proc report data=testData; columns name category,level,score; define name / group; define category / across ''; define level / across ''; define score / sum ''; run; ods html close;
Altri suggerimenti
Non credo che sarai in grado di andare direttamente all'output desiderato usando Proc Transpose poiché stai cercando di ottenere ogni categoria per coprire più livelli. Potresti voler ricercare altre due procedure, report e tabulate. Credo che tu possa farlo direttamente da uno dei due, ma sono passati anni da quando li ho usati. Una terza opzione è quella di creare un file XML con ODS in cui puoi controllare praticamente esattamente come si desidera visualizzare, anche se ci vuole un po 'più di sforzo per imparare a farlo.