我有一个从两个字段从Oracle导入的SAS表。 SYSTEMID
和T_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
有人可以帮我编码吗?
答案 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;