楼主: edragon1983
4107 18

[有偿编程] 如何从大数据判断变量是否相同 [推广有奖]

  • 0关注
  • 0粉丝

讲师

15%

还不是VIP/贵宾

-

威望
0
论坛币
5143 个
通用积分
7.8889
学术水平
0 点
热心指数
3 点
信用等级
0 点
经验
7801 点
帖子
217
精华
0
在线时间
417 小时
注册时间
2007-8-29
最后登录
2024-4-11

100论坛币
加入有100万条记录,每条记录有10个变量(文本型),需要对100万条记录任意两条记录进行比对(每个变量比对一次),以判断变量是否相同还是不同。
ID  x1 x2 x3 x4 x5 x6 x7 x8 x9 x10
1
2
3
4
……
100万


期待的结果(想得到1:判断为相同,0判断为不同)
ID1 ID2 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10
1    2   0  0  0 0  1  1  0  0  0  1
1    3   0  0  0 0  1  1  0  0  0  1
……
1    100万
2    3
2    4
……
100万-1  100万


有没有什么好的语句,能快速判断完。现在自己写的程序跑的好慢。


最佳答案

Tigflanker 查看完整内容

给你做出来一个很粗略的版本,你可以去dictionary抓变量名去做一下重命名等
关键词:大数据 文本型 有没有 如何 程序 记录
沙发
Tigflanker 发表于 2015-11-26 14:38:05 |只看作者 |坛友微信交流群
  1. data have;
  2.   input a $ s $ d $;
  3.   cards;
  4. q w e
  5. w w w
  6. . . e
  7. q . w
  8. ;run;

  9. data one;
  10.   set have end = last;

  11.   id = _n_;
  12.   if last then call symputx('last_n',_n_);
  13. run;

  14. data want;
  15.   if 0 then set one(rename = (a=a1 s=s1 d=d1 id=i));
  16.   if _n_ = 1 then do;
  17.     dcl hash h(dataset:'one(rename = (a=a1 s=s1 d=d1 id=i))');
  18.         h.definekey('i');
  19.         h.definedata(all:'y');
  20.         h.definedone();
  21.   end;

  22.   array flag f_a f_s f_d;
  23.   array orig $ a s d;
  24.   array comp $ a1 s1 d1;

  25.   set one;
  26.   do i = id + 1 to &last_n.;
  27.     compare = catx('-',id,i);
  28.     rc = h.find(key:i);
  29.         do over flag;
  30.       flag = ~compare(orig,comp);
  31.         end;
  32.         output;
  33.   end;

  34.   drop a1 s1 d1 a s d i rc id;
  35. run;
复制代码
给你做出来一个很粗略的版本,你可以去dictionary抓变量名去做一下重命名等

使用道具

藤椅
Tigflanker 发表于 2015-11-26 14:46:29 |只看作者 |坛友微信交流群
楼主有没有更进一步的需求,还是这个就是根本目的?

感觉观测之间的遍历比较还真的有点。。。

使用道具

板凳
edragon1983 发表于 2015-11-26 14:49:31 |只看作者 |坛友微信交流群
不是最终目的,但是这一步是影响sas程序速度的关键一步,后面的事都已解决。目前就是想比较任意两条记录之间的各个变量是否相同,然后赋值为1和0,不知道我有没有说清楚。

使用道具

报纸
edragon1983 发表于 2015-11-26 14:50:26 |只看作者 |坛友微信交流群
任意两个记录的x1比对,x2比对。。。,x10比对

使用道具

地板
Tigflanker 发表于 2015-11-26 14:55:44 |只看作者 |坛友微信交流群
我感觉还是可以做的,只不过需要新建十个flag变量,

从当前_N_用do until对自己的hash table比对到last,每一条output一次,

只不过你说大数据的话,而且还是字符型,可能内存会架不住

如果有会IML的高手出来帮忙,我估计会贼靠谱~

使用道具

7
edragon1983 发表于 2015-11-26 15:02:35 |只看作者 |坛友微信交流群
谢谢!

使用道具

8
edragon1983 发表于 2015-11-26 19:45:02 |只看作者 |坛友微信交流群
Tigflanker 发表于 2015-11-26 14:38
给你做出来一个很粗略的版本,你可以去dictionary抓变量名去做一下重命名等
我菜鸟一个,先学习下楼主的程序。

ps能否教下如何去dictionary抓变量名去做一下重命名?

使用道具

9
edragon1983 发表于 2015-11-26 20:51:27 |只看作者 |坛友微信交流群
Tigflanker 发表于 2015-11-26 14:55
我感觉还是可以做的,只不过需要新建十个flag变量,

从当前_N_用do until对自己的hash table比对到last, ...
内存还是不够用

使用道具

10
Tigflanker 发表于 2015-11-26 22:04:21 |只看作者 |坛友微信交流群
edragon1983 发表于 2015-11-26 20:51
内存还是不够用
用HASH表就怕就怕内存不够用,死穴

希望有大神路过可以给点建议。。。

我这边给你一个小建议,就是不妨探测下数据集每个变量的实际长度,用length语句都缩一下变量长度,也许会有用

使用道具

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

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

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

GMT+8, 2024-4-19 15:28