楼主: yz7891
7133 46

[原创博文] 数据比较问题 [推广有奖]

  • 0关注
  • 0粉丝

本科生

86%

还不是VIP/贵宾

-

威望
0
论坛币
18 个
通用积分
0
学术水平
0 点
热心指数
4 点
信用等级
0 点
经验
615 点
帖子
100
精华
0
在线时间
61 小时
注册时间
2010-3-30
最后登录
2019-6-3

楼主
yz7891 发表于 2010-4-27 13:31:48 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
比如我有几行数据,我现在需要得出一共有几个不同的数据,如下
1 2 3 4
1 2 3 4
1 3 3 2
1 3 2 1
4行数据,应该是有3个不同的数据,我现在的想法是能不能初始化num=1 然后一行一行的对比 相同保持 不同加一,但是我不知道具体应该怎么进行对比 还有要用到retain么?谁知道的能说说看或者给个示范程序 谢谢
二维码

扫码加我 拉你入群

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

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

关键词:数据比较 RETAIN ETA NUM RET 我不知道 程序

回帖推荐

crackman 发表于7楼  查看完整内容

data a; input x y z j@; cards; 1 2 3 5 2 3 4 5 1 2 3 4 8 7 6 5 2 3 4 5 1 2 3 4 9 8 6 5 4 5 6 7 7 8 6 5 2 3 9 8 9 8 6 5 1 0 9 6 8 7 6 5 ; run; proc sort data=a out=a; by x y z j; run; data b; set a; retain n 0; x1=dif(x); y1=dif(y); z1=dif(z); j1=dif(j); if (x1=y1=z1=j1=0)=0 then output; drop x1 y1 z1 j1; n=attrn(open('work.b','i'),'nobs'); run;

本帖被以下文库推荐

沙发
soporaeternus 发表于 2010-4-27 13:38:43
现在手头没有SAS,我个人觉得retain+计数器和HASH可以PK下
搬个板凳等高手解答
Let them be hard, but never unjust

藤椅
醉_清风 发表于 2010-4-27 13:56:42
楼上怎么连SAS也没有了?
从来不需要想起 永远也不会忘记

板凳
yatming 发表于 2010-4-27 14:23:18
count(distinct *)

报纸
yz7891 发表于 2010-4-27 14:25:27
yatming 发表于 2010-4-27 14:23
count(distinct *)
。。。我不是要SQL的额,能不能用SAS 做出来……

地板
醉_清风 发表于 2010-4-27 14:32:00
count(distinct *)
就是SAS 语句...
从来不需要想起 永远也不会忘记

7
crackman 发表于 2010-4-27 14:32:30
data a;
input x y z j@;
cards;
1 2 3 5
2 3 4 5
1 2 3 4
8 7 6 5
2 3 4 5
1 2 3 4
9 8 6 5
4 5 6 7
7 8 6 5
2 3 9 8
9 8 6 5
1 0 9 6
8 7 6 5
;
run;
proc sort data=a out=a;
by x y z j;
run;
data b;
set a;
retain n 0;
x1=dif(x);
y1=dif(y);
z1=dif(z);
j1=dif(j);
if (x1=y1=z1=j1=0)=0 then output;
drop x1 y1 z1 j1;
n=attrn(open('work.b','i'),'nobs');
run;
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
peijiamei + 2 + 2 精彩帖子
anzhiliang + 1 + 1 + 1 精彩帖子

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

8
crackman 发表于 2010-4-27 14:37:09
SQL效率低
用DIF吧
如果数据量大的话 估计要优化哈
soporaeternus 来做哈

9
yz7891 发表于 2010-4-27 14:39:21
8# crackman
谢谢版主~~~

10
yatming 发表于 2010-4-27 14:49:18
yz7891 发表于 2010-4-27 13:31
比如我有几行数据,我现在需要得出一共有几个不同的数据,如下
1 2 3 4
1 2 3 4
1 3 3 2
1 3 2 1
4行数据,应该是有3个不同的数据,我现在的想法是能不能初始化num=1 然后一行一行的对比 相同保持 不同加一,但是我不知道具体应该怎么进行对比 还有要用到retain么?谁知道的能说说看或者给个示范程序 谢谢
“我现在需要得出一共有几个不同的数据”
1.
proc sq;
select count(distinct *) from test;
quit;

2.
data _null_;
if _N_=1 then do;
set test;
declare hash h(dataset:"test");
h.definekey(All:"yes");
h.definedone();
end;

x=h.item_size;
put x;

run;

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

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