如何在SAS中将一列拆分为多行

时间:2018-08-01 17:47:44

标签: sas

我有一个从两个字段从Oracle导入的SAS表。 SYSTEMIDT_BLOB

T_BLOB字段中有数据:

2203 Mountain Meadow===========OSCAR ST===========Zephyrhill Road

(为什么它们用等号分隔,我不知道,也不知道该问谁)。

我是SAS新手,被要求将T_BLOB字段拆分为名为rick.split_blob的表中的多行。我尝试了Google,但找不到确切的示例。我正在尝试使输出看起来像:

SYSTEM_ID          T_BLOB
GID_1              2203 Mountain Ave
GID_1              OSCAR ST
GID_1              Zephyrhill Road

有人可以帮我编码吗?

3 个答案:

答案 0 :(得分:0)

您可以尝试以下方法:

data rick.split_blob (keep=SYSTEM_ID T_BLOB_SUB rename=(T_BLOB_SUB=T_BLOB));
set orig_dataset;

T_BLOB_TRANS = tranwrd(T_BLOB,"===========","|");
do i = 1 to countw(T_BLOB_TRANS,"|");
   T_BLOB_SUB = scan(T_BLOB,i,"|");
   output;
end;
run;

我要做的是先将等号的奇数字符串转换为简单的管道,以避免将它们视为连续的定界符。然后我们确定T_BLOB_TRANS中有多少个“单词”(实际上是定界的字符串),因此我们知道运行DO循环的次数。最后,我们读取每个定界符之间的所有内容,并将其输出到每个新单词的新T_BLOB变量中。

答案 1 :(得分:0)

如果所有值都不包含=,则可以使用scan()函数。

data want;
  set have ;
  length T_BLOB_VALUE $200 ;
  do i=1 by 1 until(t_blob_value=' ');
     t_blob_value=scan(t_blob,i,'=') ;
     if i=1 or t_blob_value ne ' ' then output;
  end;
run;

答案 2 :(得分:-1)

您似乎希望结合使用“扫描”功能和“输出”语句(使用countw可以获取可变数量的单词数)。扫描返回第n个单词,您可以在其中指定定界符。输出输出一条记录。因此,例如,您可以说

do i=1 to countw(line);
    newvar = scan(line,i);
    output;
end;