在SAS企业指南中将一行拆分为多行

时间:2015-04-26 18:56:35

标签: 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之间放什么;并结束;有什么线索可以帮助我吗?

2 个答案:

答案 0 :(得分:3)

您需要遍历范围内的值并var o1 = create(null); var o2 = Object.create(null); Object.getPrototypeOf(o1) === Object.prototype // true Object.getPrototypeOf(o2) === Object.prototype // false Object.getPrototypeOf(o2) === null // true 值。 OUTPUT语句使数据步骤将记录写入输出数据集。

OUTPUT

答案 1 :(得分:3)

这是另一种不太受限于实际价值的解决方案&#39; 1-5&#39;在您的示例中给出,但适用于格式&#39; 1-6&#39;,&#39; 1-7&#39;,&#39; 1-100&#39;等的任何值< / p>

*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;