楼主: zhufengyuan
1342 7

sas追问 [推广有奖]

  • 0关注
  • 0粉丝

硕士生

57%

还不是VIP/贵宾

-

威望
0
论坛币
263 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
644 点
帖子
52
精华
0
在线时间
272 小时
注册时间
2009-9-8
最后登录
2022-1-28

楼主
zhufengyuan 发表于 2013-7-23 14:47:08 |AI写论文
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 ...
关键词:sas问题请教 marco Merge SAS问题 原始数据 上海 宝山 大华 嘉定 新城
每天进步一点点~~~

沙发
ziyenano 发表于 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;

藤椅
ziyenano 发表于 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;


已有 1 人评分学术水平 热心指数 信用等级 收起 理由
boe + 1 + 1 + 1 学习了,大神

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

板凳
zhufengyuan 发表于 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||,||, 可以将变量连起来,但是由于变量有几百个,所以连起来要写个循环。
每天进步一点点~~~

报纸
zhufengyuan 发表于 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||,||, 可以将变量连起来,但是由于变量有几百个,所以连起来要写个循环。
每天进步一点点~~~

地板
zhufengyuan 发表于 2013-7-23 16:41:12
ziyenano 发表于 2013-7-23 15:42
data ex;
infile cards missover;
input city $ field $ module $  traffic1 $   traffic2 $;
能不能直接写个循环呢,不要用hash表
每天进步一点点~~~

7
boe 发表于 2013-7-25 03:42:28
  1. data xiii;
  2.     set ex;
  3.         by module notsorted;
  4.         length xo $5000 napoleo $30000;
  5.         xo = catx(",", of t:);
  6.         retain napoleo;
  7.         if first.module then napoleo = xo;
  8.         else napoleo = catx(",", napoleo, xo);
  9.         if last.module;
  10.         drop t: xo;
  11. run;
复制代码
Gorgeous girl , I love !

8
zhufengyuan 发表于 2013-7-25 13:54:07
boe 发表于 2013-7-25 03:42
thank you
每天进步一点点~~~

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 04:13