楼主: marongkang
1774 7

[原创博文] 求助:知道某变量的一个属性,想填补该变量空着的该属性。 [推广有奖]

  • 1关注
  • 0粉丝

已卖:59份资源

本科生

36%

还不是VIP/贵宾

-

威望
0
论坛币
1204 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1125 点
帖子
61
精华
0
在线时间
113 小时
注册时间
2007-8-23
最后登录
2022-10-20

楼主
marongkang 发表于 2011-10-28 12:57:37 |AI写论文
5论坛币
求助:知道某变量的一个属性,想填补该变量空着的该属性。
举例如下:
原始表为:

assn                 cpc
清华大学         北京
清华大学
东北大学               
东北大学         辽宁
李三     
李三
王二
王二小            上海
王二小

想把相同assn的cpc全部填补上,其他的就空着,处理后格式为:
assn                 cpc
清华大学         北京
清华大学         北京
东北大学         辽宁      
东北大学         辽宁
李三     
李三
王二
王二小            上海
王二小            上海
————————————————————————————
注:之前求助,有位大侠帮忙写了个程序,但是运行后发现把所有assn的cpc都填补上了,就是把“李三”和“王二”也补上了;
程序如下:
proc sort data=dianzi.p1;by assn;run;
proc sort data=dianzi.p1;   
  by assn descending cpc;
run;
data dianzi.p2;
   do until(last.assn);
     set dianzi.p1;
     by assn;
      length cpc0 $ 50;
      retain cpc0 "";
      if cpc^=" " then cpc0=cpc;
      else cpc=cpc0;
          output;
        end;
          drop cpc0;
run;
__________________________

我的SAS刚开始学习,不知道如何对这个程序修改,哪位大侠帮帮忙,把程序完善一下吧
钱给的不多,辛苦各位了,多谢!!

最佳答案

stata18 查看完整内容

proc sort data=a;by assn descending cpc;run; data b;set a; by assn descending cpc; retain cpc1; if first.assn then cpc1=cpc; drop cpc; rename cpc1=cpc; run;
关键词:output ending length RETAIN until 清华大学 东北大学 王二小 北京 上海

沙发
stata18 发表于 2011-10-28 12:57:38
proc sort data=a;by assn descending cpc;run;
data b;set a;
by assn descending cpc;
retain cpc1;
if first.assn then cpc1=cpc;
drop cpc;
rename cpc1=cpc;
run;

藤椅
cai345408904 发表于 2011-10-28 13:06:44
我只会E语言啊
签名被屏蔽

板凳
stata18 发表于 2011-10-28 22:40:11
试试上面的程序。

报纸
stata18 发表于 2011-10-28 22:46:43
抱歉,别的帖子里已经解决了。

地板
bobguy 发表于 2011-10-29 11:31:44
This is a good to use a SAS formt. See example below,

data temp;
length assn   $8  cpc $6;
infile cards truncover;
input assn   cpc;
cards;
清华大学         北京
清华大学
东北大学               
东北大学         辽宁
李三     
李三
王二
王二小            上海
王二小
;

proc sort data=temp(where=(cpc ne ' ')) out=fmt nodupkey; by assn; run;

data fmt;
  set fmt;
  fmtname='$ASSN2ST';
  run;

proc format cntlin=fmt(rename=(assn=start cpc=label)); run;

data temp2;
  set temp;
  cpc2=put(assn,$ASSN2ST.);
run;

proc print;run;

7
meishanjia1900 发表于 2011-10-29 15:33:25
这个是超简单版本:

data a;
  input assn $ cpc $;
cards;
qhdx beijin
qhdx .
dbdx .
dbdx liaoning
ls .
ls .
we .
wex shanghai
wex .
;

proc sort data=a out=a;   
  by assn descending cpc;
run;

data b;
  set a;
  by assn;
  retain cpc0;
  if first.assn then cpc0=cpc;
  cpc=cpc0;
  drop cpc0;
run;

proc print data=b;
run;

-------------------------------------------------

运行结果:

                                      Obs    assn      cpc
                                       1     dbdx    liaoning
                                       2     dbdx    liaoning
                                       3     ls
                                       4     ls
                                       5     qhdx    beijin
                                       6     qhdx    beijin
                                       7     we
                                       8     wex     shanghai
                                       9     wex     shanghai

8
shenliang_111 发表于 2011-10-30 13:12:55
  1. try this;
  2. /*sql语言*/
  3. proc sql;
  4. create table result as select assn,cpc,max(cpc) as cpcc from a
  5. group by 1;
  6. quit;
  7. /*hash*/
  8. data result2;
  9. length assn cpc $8;
  10. if _n_=1 then do;
  11. declare hash h();
  12. h.definekey('assn');
  13. h.definedata('cpc');
  14. h.definedone();
  15. call missing(assn,cpc);
  16. do until(last);
  17. set a end=last;
  18. if ^missing(cpc) then h.add();
  19. end;
  20. end;
  21. set a;
  22. if missing(cpc) then h.find();
  23. run;
复制代码

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

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