楼主: gavin4403
1201 9

紧急跪求高手指导迷津。跪求。跪求。。。。 [推广有奖]

  • 2关注
  • 0粉丝

博士生

33%

还不是VIP/贵宾

-

威望
0
论坛币
640 个
通用积分
30.6300
学术水平
11 点
热心指数
14 点
信用等级
10 点
经验
4447 点
帖子
170
精华
0
在线时间
238 小时
注册时间
2007-4-27
最后登录
2024-10-4

楼主
gavin4403 发表于 2015-4-20 14:34:57 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我的数据集a经过sort分类后成为如下情况:
XM      XX
A       王西初中
B       王西初中
C       王西初中
·······
········
M      王西初中
A01    后屯初中
A02    后屯初中
A03    后屯初中
········
········
L03   后屯初中
A001   中心初中
A002   中心初中
········
········
Z002    中心初中
········
········
········
我想生成一个变量BM,对XX相同的所有观测值都赋予相同的值,如排在最前面的XX为“王西初中”的所有观测都赋值为1,后面的XX为“后屯初中”的所有观测,赋值为2。再后面的中心初中的所有观测,都赋值为3。依次类推。
我原来的做法是:
proc sort data=a;
        by xx;
run;
DATA a;
        set a;
        by xx;
        retain idx;
        if first.xx then idx=1;
        else idx+1;
run;
data b;
      set a;
      where idx=1;
run;
data b;
      set b;
      by idx;
      retain BM;
      if first.idx then BM=1;
      else BM+1;
run;
proc sql;
      create table c as select * from a left join b on a.xx=b.xx;
quit;
这样做太麻烦了。感觉应该存在一个循环命令直接在数据集a内就能生成BM。所以,跪求高手指点迷津。跪求。跪求。谢谢。谢谢。



二维码

扫码加我 拉你入群

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

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

关键词:求高手 left join proc sql RETAIN Select 初中 中心

沙发
learsaas 发表于 2015-4-20 15:46:13
proc sort data=a;
        by xx;
run;
DATA a;
        set a;
        by xx;
        retain bm;
        if first.xx then bm+1;
run;

藤椅
gavin4403 发表于 2015-4-20 20:07:28
learsaas 发表于 2015-4-20 15:46
proc sort data=a;
        by xx;
run;
太感谢了。谢谢。谢谢。

板凳
gavin4403 发表于 2015-4-20 20:35:37
learsaas 发表于 2015-4-20 15:46
proc sort data=a;
        by xx;
run;
你好。你这个方法只能标记出每类XX的第一行,其余的行不能标记呀。

报纸
gavin4403 发表于 2015-4-20 20:49:20
learsaas 发表于 2015-4-20 15:46
proc sort data=a;
        by xx;
run;
抱歉,抱歉。是我操作错了。你的程序是对的。抱歉。抱歉。谢谢。谢谢。

地板
lcsxni 发表于 2015-4-20 20:57:33
gavin4403 发表于 2015-4-20 20:35
你好。你这个方法只能标记出每类XX的第一行,其余的行不能标记呀。
他的方法可以啊,你执行试试了吗
给你发个稍微麻烦点的参考一下
data nmlist;
        set a;
        keep xx;
run;
proc sort data=nmlist nodup;
        by xx;
quit;
data nmlist;
        set nmlist;
        bm=_n_;
run;
proc sort data=a;
        by xx;
quit;
data a;
        merge a nmlist;
        by xx;
run;

7
lcsxni 发表于 2015-4-20 20:58:51
gavin4403 发表于 2015-4-20 20:35
你好。你这个方法只能标记出每类XX的第一行,其余的行不能标记呀。
他的方法可以啊,你执行试试了吗
给你发个稍微麻烦点的参考一下
data nmlist;
        set a;
        keep xx;
run;
proc sort data=nmlist nodup;
        by xx;
quit;
data nmlist;
        set nmlist;
        bm=_n_;
run;
proc sort data=a;
        by xx;
quit;
data a;
        merge a nmlist;
        by xx;
run;

8
gavin4403 发表于 2015-4-20 22:48:16
lcsxni 发表于 2015-4-20 20:58
他的方法可以啊,你执行试试了吗
给你发个稍微麻烦点的参考一下
data nmlist;
对。learsaas的程序是对的。是我自己操作的错我。抱歉。抱歉。谢谢提醒。并谢谢你的程序。谢谢。谢谢。

9
382220827 发表于 2015-4-21 19:06:02
以楼主的功力搞定这个肯定没有问题,楼主是否在考验坛友们

10
gavin4403 发表于 2015-4-22 10:17:43
382220827 发表于 2015-4-21 19:06
以楼主的功力搞定这个肯定没有问题,楼主是否在考验坛友们
不敢。不敢。没那个水平。也没那个胆识。这是我在实际处理数据时遇到的问题。真是不会解决。所以,才请教高手指点迷津的。

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

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