楼主: lemonxinran
2446 9

如何判断对于同一id来讲,某一变量是否相同 [推广有奖]

  • 0关注
  • 1粉丝

讲师

28%

还不是VIP/贵宾

-

威望
0
论坛币
1159 个
通用积分
6.3000
学术水平
1 点
热心指数
1 点
信用等级
1 点
经验
10334 点
帖子
188
精华
0
在线时间
599 小时
注册时间
2010-10-25
最后登录
2024-3-26

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我有一组数据info, 包括变量stkcd,year,id1,例如:stkcd    year   id1
          000001 1998  10a
          000001 1999  10b
          000001  2000  10a
          000002  1998  11a
          000002  1999   11a
          000002  2000   11a
          000003  1999   12c
          000003  2000   12c
          ......
现在我需要判断,对于同一stkcd,id1是否取相同的值,生成新变量,equal,相同,equal=1,不同,equal=0.
即:需要生成数据集info1;
             stkcd  year   id1    equal
           000001 1998  10a       0
           000001 1999  10b       0
          000001  2000  10a       0
          000002  1998  11a       1
          000002  1999   11a      1
          000002  2000   11a      1
          000003  1999   12c      1
          000003  2000   12c      1

在sas中应该如何编程?谢谢解惑!
二维码

扫码加我 拉你入群

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

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

关键词:equal stkcd year Info UAL 程序

沙发
qinly10 发表于 2013-1-11 22:28:49 |只看作者 |坛友微信交流群
data have;
input stkcd $ year   id1 $;
cards;
          000001 1998  10a
          000001 1999  10b
          000001  2000  10a
          000002  1998  11a
          000002  1999   11a
          000002  2000   11a
          000003  1999   12c
          000003  2000   12c
;

proc sql;                                                                                                                              
create table have1 as select distinct stkcd, id1                                                                                       
from have group by stkcd;                                                                                                               
create table have2 as select stkcd, count(*) as n                                                                                       
from have1 group by stkcd;                                                                                                              
quit;                                                                                                                                   

data want;                                                                                                                              
merge have have2;                                                                                                                       
by stkcd;                                                                                                                              
if n ne 1 then equal=0;                                                                                                                 
else equal=1;                                                                                                                           
drop n;                                                                                                                                 
run;  

使用道具

藤椅
lemonxinran 发表于 2013-1-11 22:37:57 |只看作者 |坛友微信交流群
qinly10 发表于 2013-1-11 22:28
data have;
input stkcd $ year   id1 $;
cards;
您好!按照你的程序做了一下,非常感谢。

使用道具

板凳
lemonxinran 发表于 2013-1-12 14:01:04 |只看作者 |坛友微信交流群
qinly10 发表于 2013-1-11 22:28
data have;
input stkcd $ year   id1 $;
cards;
proc sql;
create table have1 as select distinct stkcd, id1                                                                                       
from have group by stkcd;      
WARNING: GROUP BY 子句已变换为 ORDER BY 子句,因为 SELECT 子句和相关表的表达式的可选 HAVING 子句都没有引用汇总函数。
这是日志的提示。

使用道具

报纸
qinly10 发表于 2013-1-13 00:03:14 |只看作者 |坛友微信交流群
lemonxinran 发表于 2013-1-12 14:01
proc sql;
create table have1 as select distinct stkcd, id1                                        ...
呵呵,粗心大意,
create table have1 as select distinct stkcd, id1 from have;
就够用了。

使用道具

地板
qinly10 发表于 2013-1-13 00:05:40 |只看作者 |坛友微信交流群
顺便说一下,如果原数据stkcd未排序,在执行sql之前先将其排序

使用道具

7
lemonxinran 发表于 2013-1-13 22:30:18 |只看作者 |坛友微信交流群
qinly10 发表于 2013-1-13 00:05
顺便说一下,如果原数据stkcd未排序,在执行sql之前先将其排序
嗯,好的,谢谢!

使用道具

8
lemonxinran 发表于 2013-1-13 22:30:24 |只看作者 |坛友微信交流群
qinly10 发表于 2013-1-13 00:05
顺便说一下,如果原数据stkcd未排序,在执行sql之前先将其排序
嗯,好的,谢谢!

使用道具

9
erzi_yhj 发表于 2013-1-16 13:23:55 |只看作者 |坛友微信交流群
data info;
input stkcd $ year   id1 $;
datalines;
          000001 1998  10a
          000001 1999  10b
          000001  2000  10a
          000002  1998  11a
          000002  1999   11a
          000002  2000   11a
          000003  1999   12c
          000003  2000   12c
;

proc sort data=info out=temp;
by stkcd id;
run;

data temp;
set temp;
by stkcd;
retain id2;
if first.stkcd then id2=id;
if last.stkcd then do;
                            if id2=if then equal=1;
                            else equal=0;
                            output;
                        end;
keep stkcd equal;
run;

data info1;
merge info temp;
by stkcd;
run;

没测试过,但应该ok吧

使用道具

10
lemonxinran 发表于 2013-1-16 14:19:39 |只看作者 |坛友微信交流群
erzi_yhj 发表于 2013-1-16 13:23
data info;
input stkcd $ year   id1 $;
datalines;
嗯,多谢了!

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-14 06:44