求助:分布统计

weixin_41315215 2017-12-08 11:52:38
分布统计

问题:现有N条记录组成的集合,字符型,唯一化,长度为14,固定只由3、1、0这3个字符组成。
现在要统计每条记录在整个集合中,对应位置的相同字符数据(即分布数据)。

也几十说,分别FIT14,FIT13,FIT12,FIT11,FIT10,FIT9,FIT8,FIT7,FIT6,FIT5,FIT4,FIT3,FIT2,FIT1,FIT0各有多少记录。
由于是唯一化的集合,所有FIT14就是它自己,这个可以忽略。

比如,以下集合有100条记录,第1条记录01313330330031在整个集合中分布数据(FIT13...FIT0)是
0-0-0-1-2-9-10-18-27-21-7-3-1-0(各数值用-分隔开)

如果集合记录数不多,用循环逐个统计都不难,但如果一个集合记录达到数十万记录,甚至上百万记录时,速度是个很严重的问题,有可能要一整天还不

能完成统计工作。
有没有可以提高速度的方法呢?

以下是整个集合的分布数据结果[原始记录内容取LEFT(记录内容,14)即可]:

(每条记录后面的结果各数值只和是整个集合的记录数-1,即减去了FIT14=1记录本身)


记录内容 -13-12-11-10-9-8-7-6-5-4-3-2-1-0
================================================
01313330330031-0-0-0-1-2-9-10-18-27-21-7-3-1-0
13303113133100-0-0-0-0-1-5-19-14-21-21-15-3-0-0
30113133131000-0-0-0-1-1-3-11-24-27-12-14-6-0-0
03003013333313-0-0-0-0-7-5-10-21-26-16-11-2-1-0
00133130010310-0-0-0-0-4-4-12-19-20-19-14-4-3-0
10333133101030-0-0-0-0-2-4-16-23-20-19-9-5-1-0
11331313033000-0-0-0-0-3-4-10-23-20-21-15-3-0-0
13333100313330-0-0-0-1-1-7-17-18-22-23-8-2-0-0
03313111111330-0-0-1-1-1-7-15-13-23-25-8-4-1-0
31333113330113-0-0-0-0-2-6-17-16-26-20-6-6-0-0
11013103333313-0-0-0-1-3-8-16-18-22-18-10-3-0-0
31113003130031-0-0-1-0-2-7-13-22-19-14-14-6-1-0
11333303003303-0-0-0-0-3-5-14-17-28-21-9-0-2-0
03333300331113-0-0-1-1-6-6-15-17-23-21-6-2-1-0
31331331330333-0-0-0-2-3-7-17-19-18-21-8-4-0-0
00311101111330-0-0-1-1-1-5-13-19-23-14-17-4-1-0
30301013333333-0-0-1-2-2-8-11-14-25-20-10-3-3-0
11113301030133-0-0-1-1-4-8-10-15-23-23-11-2-1-0
10301311131310-0-0-0-0-1-9-12-24-20-19-9-5-0-0
00303313000011-0-0-0-0-0-1-6-29-20-21-14-7-1-0
13101303310310-0-0-2-3-0-3-10-18-26-19-16-2-0-0
00033033101331-0-0-1-1-3-7-8-25-19-17-10-8-0-0
03133003331113-0-1-2-0-2-5-19-17-24-16-10-2-1-0
10033003010033-0-0-0-0-1-2-13-22-28-20-10-3-0-0
00003330131313-0-0-0-0-2-12-15-20-17-18-14-1-0-0
00113010333310-0-1-0-0-3-5-9-26-29-11-11-2-2-0
01103333310133-0-0-1-0-2-8-12-23-21-14-13-4-1-0
00313300311110-0-0-0-1-2-5-20-18-17-16-17-3-0-0
03013333101331-0-0-2-0-2-8-8-18-25-26-6-4-0-0
10301133133333-0-0-0-2-3-10-17-16-13-13-17-7-1-0
33300303130033-0-0-0-1-0-4-10-28-23-17-11-3-2-0
33333300000331-0-0-0-0-1-5-12-23-19-24-10-4-1-0
11103333333133-0-0-1-0-5-8-18-17-21-16-6-5-2-0
00301001331333-0-0-0-2-2-5-18-16-21-19-15-1-0-0
03330333131303-0-0-0-1-1-9-10-26-21-16-14-1-0-0
01103301030113-0-0-1-0-2-5-15-25-15-14-14-7-1-0
11013300133331-0-0-0-1-3-10-15-15-25-18-9-3-0-0
03011311330030-0-0-0-0-1-5-12-22-25-19-10-4-1-0
33313301100310-0-0-0-0-1-8-15-19-22-17-13-4-0-0
10133313111311-0-0-0-0-1-8-14-20-25-17-11-3-0-0
31133303313301-0-0-0-0-3-4-15-17-30-13-13-4-0-0
31133013130131-0-0-1-0-2-5-12-24-21-19-11-3-1-0
13331333010333-0-0-0-3-3-7-10-19-21-21-8-6-1-0
03113331010300-0-0-0-0-4-5-14-19-15-21-10-10-1-0
10313111030100-0-0-0-0-1-1-12-22-23-21-12-5-2-0
13301303013300-0-0-0-1-3-6-9-17-21-24-9-8-1-0
01113011030331-0-0-0-0-4-6-9-17-27-17-14-5-0-0
00011003133100-0-0-0-0-3-7-10-19-21-21-13-3-2-0
10003003330103-0-0-0-1-2-8-13-16-17-27-10-4-1-0
30033101011310-0-0-0-0-1-4-12-23-20-21-13-3-2-0
10333001131311-0-0-0-0-3-5-15-27-26-11-8-3-1-0
11303330033030-0-0-0-0-6-2-11-23-24-21-10-2-0-0
03303000113330-0-0-0-2-1-4-16-22-22-19-11-2-0-0
13303313310313-0-0-0-1-2-6-18-22-18-13-14-3-2-0
01103103310000-0-0-0-1-1-4-7-20-25-17-21-3-0-0
03330311331130-0-0-0-0-5-7-10-16-29-15-12-4-1-0
01030003133333-0-0-1-0-2-9-14-21-19-19-9-4-1-0
10331330110330-0-0-0-2-0-11-12-22-17-20-10-3-2-0
00331333011303-0-0-0-2-1-3-15-21-17-25-9-5-1-0
03333010011330-0-0-0-3-2-4-15-19-22-14-14-6-0-0
31013300330100-0-0-0-1-0-9-16-19-17-18-12-6-1-0
00103110133333-0-0-0-0-4-5-12-19-25-20-11-3-0-0
30331101131333-0-0-0-2-3-6-17-15-19-20-13-4-0-0
33301003131030-0-0-0-2-0-8-12-22-20-17-14-2-2-0
31133301331133-0-0-0-4-5-9-6-22-20-21-9-3-0-0
13003033331331-0-0-0-0-4-5-14-24-21-20-10-1-0-0
03033333111131-0-0-1-1-0-8-13-20-21-24-8-3-0-0
11333331130033-0-0-0-1-3-9-17-18-26-12-10-3-0-0
00331033133301-0-0-0-1-6-5-7-25-17-18-16-3-1-0
30013133133301-0-0-0-2-1-8-9-20-18-20-13-7-1-0
13031003131130-0-0-0-2-1-7-15-30-12-17-10-3-2-0
13111333110330-0-0-0-3-2-4-11-21-26-19-10-3-0-0
10003300133010-0-0-0-0-3-1-17-27-19-18-10-4-0-0
03333331310110-0-0-1-0-5-5-17-16-22-15-10-7-1-0
30133003331113-0-1-0-1-4-3-20-18-22-14-8-8-0-0
01313301003030-0-0-0-0-1-7-15-18-18-20-14-6-0-0
00113310333311-0-1-0-0-2-8-9-20-27-20-6-4-2-0
01013303101110-0-0-0-1-3-6-11-19-29-16-9-4-1-0
31111303310310-0-0-1-1-3-4-11-20-23-16-16-4-0-0
31013330330333-0-0-0-3-1-8-15-22-23-12-12-2-1-0
31313313101130-0-0-0-1-0-6-11-27-18-26-8-2-0-0
13333331333110-0-0-1-1-3-5-12-28-24-15-9-1-0-0
03131003031110-0-0-1-1-2-6-7-22-25-22-7-5-1-0
03013331031110-0-0-0-0-4-9-11-20-19-17-15-3-1-0
10131303310010-0-0-1-1-0-7-11-15-29-16-14-5-0-0
31133001031030-0-0-0-1-1-8-12-18-29-12-15-2-1-0
13033301333133-0-0-0-2-3-9-16-17-23-18-8-3-0-0
00330030331330-0-0-0-0-4-5-18-18-17-22-13-2-0-0
10003133333303-0-0-0-4-3-6-7-23-19-16-13-8-0-0
03033011000330-0-0-0-1-1-6-12-14-22-27-12-4-0-0
30311313333033-0-0-2-1-0-5-10-25-23-16-11-5-1-0
11133133310300-0-0-0-1-2-8-12-18-20-20-14-4-0-0
01131033133310-0-0-0-1-3-3-15-26-27-13-9-2-0-0
01031300133333-0-0-1-1-1-7-14-28-21-16-7-2-1-0
30001133331130-0-0-0-0-1-7-11-19-25-17-13-5-1-0
30011113033030-0-0-0-1-2-6-4-17-24-22-15-6-2-0
00130310031310-0-0-0-0-4-6-8-15-22-28-14-2-0-0
31010103130310-0-0-0-0-2-7-9-13-26-27-13-2-0-0
01031001130300-0-0-0-0-4-4-10-21-28-20-8-4-0-0
30131313333031-0-0-1-0-2-5-9-18-30-16-12-6-0-0
...全文
320 13 打赏 收藏 举报
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
都市夜猫 2017-12-15
引用 12 楼 weixin_41315215 的回复:
1楼已经写的很清楚了。
呵呵,不是没人帮,是都帮不了 你认为已经写得因很清楚了,恐怕还是没人看懂你的需求规则,你得把 FIT(?) 和它的值 代表什么说明白
  • 打赏
  • 举报
回复
weixin_41315215 2017-12-14
1楼已经写的很清楚了。
  • 打赏
  • 举报
回复
weixin_41315215 2017-12-14
原始数据是贴出来的结果的每条记录的左边14个字符。
  • 打赏
  • 举报
回复
weixin_41315215 2017-12-14
看来没有人能帮上忙了。
  • 打赏
  • 举报
回复
都市夜猫 2017-12-11
老妈叫儿子起床 儿子:初春的清晨是那么美好,我只想静静的欣赏10分钟 老妈:说人话 儿子:我再睡会儿
  • 打赏
  • 举报
回复
lygcw9602 2017-12-09
不明白楼主的意图
  • 打赏
  • 举报
回复
lygcw9602 2017-12-09
如果一楼贴出的数据是最后结果,那么原始数据是什么
  • 打赏
  • 举报
回复
weixin_41315215 2017-12-09
引用 5 楼 lygcw9602 的回复:
TEMP4FB 临时表中 FIT 字段的计算方法能否详细说明一下
那个语句的作用相当于以下语句: FOR I=1 TO 14 REPLACE ALL FIT WITH FIT+1 FOR SUBSTR(TT,I,1)=SUBSTR(X1,I,1) ENDFOR 最后的结果已经在1楼贴出来了。
  • 打赏
  • 举报
回复
lygcw9602 2017-12-09
TEMP4FB 临时表中 FIT 字段的计算方法能否详细说明一下
  • 打赏
  • 举报
回复
lygcw9602 2017-12-09
最后的结果是什么
  • 打赏
  • 举报
回复
weixin_41315215 2017-12-08
我现在的方法是: SET TALK OFF SET SAFETY OFF CLEAR ALL CLEAR FILE1=GETFILE([TXT],[集合文件]) IF FILE(FILE1) SELECT 0 CREATE CURSOR TEMP4FB (TT C(14),FIT N(2),F14 N(1),F13 I,F12 I,F11 I,F10 I,F9 I,F8 I,F7 I,F6 I,F5 I,F4 I,F3 I,F2 I,F1 I,F0 I) APPEND FIELDS TT FROM [&FILE1] SDF S0=_TALLY IF S0>0 SELECT DISTINCT TT FROM TEMP4FB INTO CURSOR TEMP14 READWRITE S0=_TALLY SELECT TEMP4FB ZAP APPEND FROM DBF([TEMP14]) SELECT TEMP14 USE SELECT TEMP4FB INDEX ON TT TAG TT GO TOP SCAN WAIT WINDOW [REC=]+TRANSFORM(RECNO())+[/]+TRANSFORM(S0) NOWAIT X1=TT REPLACE ALL FIT WITH OCCURS(0H00,BITXOR(0H+X1,0H+TT)) SELECT DISTINCT FIT,COUNT(*) AS QTY FROM TEMP4FB GROUP BY FIT INTO ARRAY MYFIT S1=_TALLY SEEK X1 FOR K1=1 TO S1 XF=[F]+TRANSFORM(MYFIT(K1,1)) REPLACE &XF WITH MYFIT(K1,2) ENDFOR ENDSCAN FILE2=STRTRAN(UPPER(FILE1),[.TXT],[-FB结果.TXT]) COPY TO [&FILE2] SDF USE WAIT CLEAR ENDIF ENDIF RETURN
  • 打赏
  • 举报
回复
weixin_41315215 2017-12-08
每条记录后面的结果各数值只和=每条记录后面的结果各数值之和
  • 打赏
  • 举报
回复
weixin_41315215 2017-12-08
也几十说=也就是说
  • 打赏
  • 举报
回复
相关推荐
发帖
VFP
加入

2532

社区成员

VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
申请成为版主
帖子事件
创建了帖子
2017-12-08 11:52
社区公告
暂无公告