Разбить строку на несколько строк в руководстве SAS enterprise guide



Мне нужна помощь, чтобы разделить строку на несколько строк, когда значение в строке составляет что-то вроде 1-5. Причина в том, что мне нужно считать 1-5, чтобы стать 5, а не 1, как это бывает, когда он рассчитывает на одну строку.



У меня есть ID, значение и место, где оно находится.



Как исключение:



ID  Value Page
1 1-5 2


Вывод, который я хочу, примерно такой:



ID Value Page
1 1 2
1 2 2
1 3 2
1 4 2
1 5 2


Я пробовал использовать оператор IF



IF bioVerdi='1-5' THEN
DO;
..
END;


Поэтому я не знаю, что я должен поставить между DO; и END;. Есть какие-нибудь подсказки, чтобы помочь мне здесь?

540   2  

2 ответов:

Вам нужно перебирать значения внутри вашего диапазона и OUTPUT значения. Оператор OUTPUT заставляет шаг Data записать запись в выходной набор данных.

data want;
set have;
if bioVerdi = '1-5' then do;
   do value=1 to 5;
      output;
   end;
end;

Вот еще одно решение, которое менее ограничено фактическим значением '1-5', приведенным в вашем примере, но будет работать для любого значения в формате '1-6', '1-7', '1-100', и т.д.

*this is the data you gave ;
data have ; 
    ID = 1 ; 
    value = '1-5';
    page = 2;
run;

data want ; 
 set have ; 

 min = scan( value, 1, '-' ) ; * get the 1st word, delimited by a dash ;
 max = scan( value, 2, '-' ) ; * get the 2nd word, delimited by a dash ;

 /*loop through the values from min to max, and assign each value as the loop iterates to a new column 'NEWVALUE.' Each time the loop iterates through the next value, output a new line */
 do newvalue = min to max ;
    output ; 
 end;

 /*drop the old variable 'value' so we can rename the newvalue to it in the next step*/
 drop value min max; 

 /*newvalue was a temporary name, so renaming here to keep the original naming structure*/
 rename newvalue = value ; 

run;

Comments

    Ничего не найдено.