2014-10-09 6 views
-4

Предположим, у меня есть набор данных, как это:Как выбрать конкретное значение САЦ

value1 value2 value3 
X1  X2  X3 
Y1  Y2  Y3 
Z1  Z2  Z3 

Я хочу, чтобы выбрать из Y1, Z1 и X2 к трем новым переменным.

так:

a1 = Y1 
a2 = Z1 
a3 = X2 

В ответ на Reese, это то, что я хочу следуя идее твоего

%macro coeff(i=, j=, k=); 
data want_&k.; 
set new; 
array va(3) value1 value2 value3; 

%if &i.=1 %then %do; 
     va(_n_)=va(_n_+&j.); 
%end; 

%else %if &i.=2 %then %do; 
     va(_n_)=va(_n_+&j.); 
%end; 

keep value1; 
run; 
%mend; 

%coeff(i=1, j=1, k=1); 
%coeff(i=1, j=2, k=2); 
%coeff(i=2, j=1, k=3); 
%coeff(i=2, j=1, k=4); 
%coeff(i=3, j=-2, k=5); 
%coeff(i=3, j=-1, k=6); 

Но это не работает. Вы можете взглянуть?

+0

Вы хотите обновить текущие значения в столбце Value1 с новыми значениями, которые вы разместили? – ItalianStallion

+1

Мне очень жаль, что вы не нашли времени, чтобы более подробно объяснить эту проблему. Логика не имеет смысла, и причина для этого тоже не имеет смысла. – Reeza

ответ

0

Это отвечает на ваш первый вопрос, но я чувствую, что это не то, что вы на самом деле после. Я также добавил во второй набор данных2, возможно, вы можете лучше объяснить, что вам нужно, если данные находятся в этой структуре.

data have; 
input value1 $ value2 $ value3 $; 
cards; 
X1  X2  X3 
Y1  Y2  Y3 
Z1  Z2  Z3 
; 
run; 

data want; 
set have; 
array va(3) value1-value3; 

if _n_=1 then va(_n_)=va(_n_+1); 

keep value1; 
run; 


data have2; 
    set have; 
    array va(3) value1-value3; 

    do i=1 to 3; 
     value=va(i); 
     row=_n_; 
     output; 
    end; 
    keep value row; 
run; 
+0

Спасибо! набор данных want 2 - это именно то, что я хочу. Можете ли вы записать их в макрос, который генерирует все шесть возможных комбинаций? –

+0

@Lu Yu - Я переместил вашу попытку редактирования на свой пост. Если вам нужно задать дополнительные вопросы, которые слишком велики, чтобы спросить как комментарий, редактирование собственного сообщения лучше, чем редактирование ответа, который дал кто-то другой. – rmunn

0

Это все еще не имеет для меня никакого смысла, контекст поможет.

data have; 
input value1 $ value2 $ value3 $; 
cards; 
X1  X2  X3 
Y1  Y2  Y3 
Z1  Z2  Z3 
; 
run; 

data have2; 
    set have end=eof; 
    array va(3) value1-value3; 
    retain counter 2; 
    do i=1 to 3; 
     value=va(i); 
     row=_n_; 
     if eof and i=3 then counter=1; 
     output; 
     counter+1; 
    end; 
    keep value counter; 
run; 

proc sort data=have2; 
by counter; 
run; 

data have3; 
    set have2; 
    retain counter2 0; 
    if mod(counter,3)=1 then counter2+1; 
    drop counter i row; 
run; 

data _null_; 
    set have3; 
    by counter2; 
    name=cats("a",counter2); 
    if first.counter2 then do; 
     call execute ("data " || name || "; set have3; where counter2=" ||counter2|| ";run;"); 
    end; 
run;