全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1300 7
2013-07-23
悬赏 15 个论坛币 已解决
该问是之前问的追问版:


小弟有一sas问题请教各位sas达人(可能要用marco):

现在有以下数据:

城市  区域       板块          规交1     规交2
上海  宝山  大华板块         7号线    737,738
上海  宝山  大华板块          11号线    58,78
上海  嘉定  嘉定新城板块    3号线      嘉环二线
上海  嘉定  嘉定新城板块     11号线   

希望合并之后变为以下数据:


城市  区域       板块                               规交1      
上海  宝山  大华板块         7号线,737,738,11号线,58,78
上海  嘉定  嘉定新城板块    3号线,嘉环二线,11号线


原始数据一共将近3000条记录,所以用常规的merge束手无策,请各位大爷想想办法。小弟在此谢过!

最佳答案

ziyenano 查看完整内容

data ex; infile cards missover; input city $ field $ module $ col1 $ col2 $ col3 $ col4 $; cards; 上海 宝山 大华板块 7号线 737,738 11号线 58,78 上海 嘉定 嘉定新城板块 3号线 嘉环二线 11号线 ; run; data ex1; set ex; array a(*) col1--col4; length traffic $100; do i=1 to dim(a); if i=1 then traffic=a(1); else if ^missing(a(i)) then traffic=trim(traf ...
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-7-23 14:47:09
zhufengyuan 发表于 2013-7-23 16:41
能不能直接写个循环呢,不要用hash表
data ex;
infile cards missover;
input city $ field  $ module $    col1 $ col2 $ col3 $ col4 $;
cards;
上海  宝山  大华板块         7号线    737,738  11号线    58,78
上海  嘉定  嘉定新城板块    3号线      嘉环二线 11号线
;
run;


data ex1;
set ex;
array a(*) col1--col4;
length traffic $100;
do i=1 to dim(a);
if i=1 then traffic=a(1);
else if ^missing(a(i)) then
traffic=trim(traffic)||','||a(i);
end;
drop i;
run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-7-23 15:42:04
data ex;
infile cards missover;
input city $ field $ module $  traffic1 $   traffic2 $;
cards;
上海  宝山  大华板块         7号线    737,738
上海  宝山  大华板块          11号线    58,78
上海  嘉定  嘉定新城板块    3号线      嘉环二线
上海  嘉定  嘉定新城板块     11号线   
;
run;

data _null_;
if _n_=1 then do;
declare hash h();
h.definekey('city','field','module');
h.definedata('city','field','module','traffic');
h.definedone();
end;
length traffic  tmp $100;
set ex end=done;
if missing(traffic1) then tmp=traffic2;
else if missing(traffic2) then tmp=traffic1;
else tmp=traffic1||','||traffic2;
if h.find() then do;
traffic=tmp;
h.add();
end;
else do;
traffic=trim(traffic)||','||tmp;
h.replace();
end;
if done then h.output(dataset:'ex1');
run;


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-7-23 16:39:56
小弟有一sas问题请教各位sas达人(可能要用marco):
数据第一步已经变成如下的形式:

城市  区域       板块          规交1     规交2      规交3     规交4
上海  宝山  大华板块         7号线    737,738  11号线    58,78
上海  嘉定  嘉定新城板块    3号线      嘉环二线 11号线
现在要变成如下形式:
城市  区域       板块                               规交1      
上海  宝山  大华板块              7号线,737,738,11号线,58,78
上海  嘉定  嘉定新城板块         3号线,嘉环二线,11号线

我知道trim||,||, 可以将变量连起来,但是由于变量有几百个,所以连起来要写个循环。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-7-23 16:40:32
数据第一步已经变成如下的形式:

城市  区域       板块          规交1     规交2      规交3     规交4
上海  宝山  大华板块         7号线    737,738  11号线    58,78
上海  嘉定  嘉定新城板块    3号线      嘉环二线 11号线
现在要变成如下形式:
城市  区域       板块                               规交1      
上海  宝山  大华板块              7号线,737,738,11号线,58,78
上海  嘉定  嘉定新城板块         3号线,嘉环二线,11号线

我知道trim||,||, 可以将变量连起来,但是由于变量有几百个,所以连起来要写个循环。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-7-23 16:41:12
ziyenano 发表于 2013-7-23 15:42
data ex;
infile cards missover;
input city $ field $ module $  traffic1 $   traffic2 $;
能不能直接写个循环呢,不要用hash表
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群