2015-04-21 25 views
5

Verilerimi yeniden düzenlemeye çalışıyorum ama zor bir zaman geçiriyorum.yığınlama verileri

date a b c 
==================== 
1996 5 7 8 
1997 4 2 3  
1998 1 9 6 

istediğim şey (muhtemelen dizileri kullanarak) verileri yeniden düzenlemek için bu almak için: Yani

date val var 
============= 
1996 5 a 
1997 4 a 
1998 1 a 
1996 7 b 
1997 2 b 
1998 9 b 
1996 8 c 
1997 3 c 
1997 6 c 

Ben aslında değişkenleri yığılmış ettik (Ben veri şuna benzer a, b, c) ilgili tarih ve değişkenin adı ile birlikte.

Şimdiden teşekkürler!

cevap

6

Verileri döndürmek için PROC TRANSPOSE düğmesini kullanın. Bu VAR göre sıralanır ve sonra TARİH

proc sort data=want; 
by VAR date; 
run; 
2

Sözünü yana istediğiniz gibi TARİHİNDEN tarafından

Önce sırala

proc sort data=have; 
by date; 
run; 

Sonra Nihayet

proc transpose data=have out=want(rename=(COL1=VAL _NAME_=VAR)); 
by date; 
var a b c; 
run; 

devrik kullanmak, görünüşe diziler, burada bunları kullanarak nasıl sonuç elde edersiniz. prosedürler okumak ve kod

/* create initial dataset */ 
data have; 
input date a b c; 
datalines; 
1996 5 7 8 
1997 4 2 3 
1998 1 9 6 
; 
run; 

/* transpose data */ 
data want; 
set have; 
array vars{*} a b c; /* create array of required values */ 
length val 8 var $8; /* set lengths of new variables */ 
do i = 1 to dim(vars); /* loop through each element of the array */ 
    val = vars{i}; /* set val to be current array value */ 
    var = vname(vars{i}); /* set var to be name of current array variable name */ 
    drop a b c i; /* drop variables not required */ 
    output; /* output each value to a new row */ 
end; 
run; 

/* sort data in required order */ 
proc sort data=want; 
by var date; 
run; 
bakmak gerekebilir başkaları tarafından anlaşılması genellikle daha kolay olduğu gibi
Ben, ancak, @DomPazz gelen cevap proc transpose yöntemini kullanırsınız