SAS如何根据一个字符串将一个观察分成多行?
SAS How to split an observation into multiple rows according to a string?
这是我的问题。
我得到了以下数据集
obs ID p1 p2 p3 p4 perc
1 120265 . . . 25 a t 90%, b r 10%
2 120267 15 15 15 15 c e 80%, a 20%
3 120269 20 20 20 20 cc
我想这样归一化
obs ID p1 p2 p3 p4 perc
1 120265 . . . 25 a t 90%
2 120265 . . . 25 b r 10%
3 120267 15 15 15 15 c e 80%
4 120267 15 15 15 15 a 20%
5 120269 20 20 20 20 cc
我很高兴听到一些建议!
我可以在多个列中进行 perc,但我不知道如何规范化数据集!
我很高兴收到一些提示。
我有一段时间没有用 SAS 编写代码了,但这似乎工作正常:
data have;
length ID p1 p2 p3 p4 list 0;
infile cards dsd dlm='|' truncover;
input ID p1 p2 p3 p4 list;
cards;
120265|.|.|.|25|a t 90%, b r 10%
120267|15|15|15|15|c e 80%, a 20%
120269|20|20|20|20|cc
;
data col2rows;
set have;
length perc ;
do i=1 by 1 until (perc=' ');
perc=strip(scan(list, i, ','));
if perc ne ' ' then
output;
end;
run;
data want;
set col2rows (drop=list i);
run;
按预期打印:
这是我的问题。
我得到了以下数据集
obs ID p1 p2 p3 p4 perc
1 120265 . . . 25 a t 90%, b r 10%
2 120267 15 15 15 15 c e 80%, a 20%
3 120269 20 20 20 20 cc
我想这样归一化
obs ID p1 p2 p3 p4 perc
1 120265 . . . 25 a t 90%
2 120265 . . . 25 b r 10%
3 120267 15 15 15 15 c e 80%
4 120267 15 15 15 15 a 20%
5 120269 20 20 20 20 cc
我很高兴听到一些建议! 我可以在多个列中进行 perc,但我不知道如何规范化数据集! 我很高兴收到一些提示。
我有一段时间没有用 SAS 编写代码了,但这似乎工作正常:
data have;
length ID p1 p2 p3 p4 list 0;
infile cards dsd dlm='|' truncover;
input ID p1 p2 p3 p4 list;
cards;
120265|.|.|.|25|a t 90%, b r 10%
120267|15|15|15|15|c e 80%, a 20%
120269|20|20|20|20|cc
;
data col2rows;
set have;
length perc ;
do i=1 by 1 until (perc=' ');
perc=strip(scan(list, i, ','));
if perc ne ' ' then
output;
end;
run;
data want;
set col2rows (drop=list i);
run;
按预期打印: