2017-05-19 3 views
0

Ich habe Daten, die wie folgt ist.SAS - Split einzelne Spalte in zwei basierend auf dem Wert einer ID-Spalte

data have; 
    input group replicate $ sex $ count; 

datalines; 
1 A F 3 
1 A M 2 
1 B F 4 
1 B M 2 
1 C F 4 
1 C M 5 
2 A F 5 
2 A M 4 
2 B F 6 
2 B M 3 
2 C F 2 
2 C M 2 
3 A F 5 
3 A M 1 
3 B F 3 
3 B M 4 
3 C F 3 
3 C M 1 
; 
run; 

Ich möchte auf Grund des Geschlechts der count Spalte in zwei getrennten Spalten brechen.

            count_ count_ 
        Obs group replicate female  male 

        1  1   A   3   2 
        2  1   B   4   2 
        3  1   C   4   5 
        4  2   A   5   4 
        5  2   B   6   3 
        6  2   C   2   2 
        7  3   A   5   1 
        8  3   B   3   4 
        9  3   C   3   1 

Dies kann, indem zuerst zwei separate Datensätze für jede Ebene der sex und dann Durchführen einer merge erfolgen.

Gibt es eine weniger ausführliche Möglichkeit, dies zu tun, die nicht die Notwendigkeit erfordert, Variablen zu sortieren oder explizit zu löschen/zu behalten?

Antwort

1

Sie können dies mit proc transpose tun, aber Sie müssen die Daten sortieren. Ich glaube, das ist es, wonach Sie suchen.

proc sort data=have; 
by group replicate; 
run; 

Die Daten werden so jetzt sortiert Sie Ihre by-group für die Umsetzung.

proc transpose data=have out=want(drop=_name_) prefix=count_; 
by group replicate; 
id sex; 
var count; 
run; 

proc print data=want; 

Dann erhalten Sie:

Obs group replicate count_F count_M 

1  1   A   3   2 
2  1   B   4   2 
3  1   C   4   5 
4  2   A   5   4 
5  2   B   6   3 
6  2   C   2   2 
7  3   A   5   1 
8  3   B   3   4 
9  3   C   3   1 
Verwandte Themen