楼主: edragon1983
4693 18

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

  • 0关注
  • 0粉丝

已卖:1656份资源

讲师

18%

还不是VIP/贵宾

-

威望
0
论坛币
5133 个
通用积分
7.4071
学术水平
0 点
热心指数
3 点
信用等级
0 点
经验
7801 点
帖子
217
精华
0
在线时间
432 小时
注册时间
2007-8-29
最后登录
2025-7-25

楼主
edragon1983 发表于 2015-11-26 14:38:04 |AI写论文
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
拉您进交流群
GMT+8, 2026-1-8 20:36