标题:求:每条记录中各字段的值出现的次数
只看楼主
yd1954
Rank: 2
来 自:辽宁沈阳
等 级:论坛游民
帖 子:143
专家分:21
注 册:2016-7-1
结帖率:100%
已结贴  问题点数:90 回复次数:13 
求:每条记录中各字段的值出现的次数
各位老师好!
发过去2个表,分列统计15期
             3d积累个数
求:分列统计15期表每条记录中,字段N1--N190范围内,各字段的值在该范围内发生的次数(横向统计)。
    并将统计结果(每个值的发生次数)放在3d积累个数表的相对应的字段。
  3d积累个数表的字段J70--J190,是前表N1--N190 发生数值的区间。也就是说分列统计15期N1--N190各字段的值在70--190之间(用select 单句命令统计的结果)。

举例:分列统计15期最后一行N1的值是114,在N1--N190中出现8次。在3d积累个数j114字段记8,
                          N2的值是131,在N1--N190中出现5次。在3d积累个数j131字段记5
.....

 3d积累个数里有一条记录,是我手工统计录入的。以供参考。
分列统计15期表,有4655条记录,只统计4000行就行,前655行不用统计。
谢谢各位老师!

分列统计15期.zip (613.25 KB)

[local]2[/local]
搜索更多相关主题的帖子: 个数 3d 统计 字段 记录 
2021-06-24 09:46
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
“3d积累个数”文件不见了
2021-06-24 11:17
yd1954
Rank: 2
来 自:辽宁沈阳
等 级:论坛游民
帖 子:143
专家分:21
注 册:2016-7-1
得分:0 
回复 2楼 吹水佬
3d积累个数.zip (823 Bytes)
2021-06-24 11:43
xuminxz
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:40
帖 子:749
专家分:2475
注 册:2011-5-8
得分:0 
第893条记录中的N33的值是195,其统计结果放在哪?还是超过190的就不统计?或者是增加字段?

dBase有人接盘了。
2021-06-24 12:51
yd1954
Rank: 2
来 自:辽宁沈阳
等 级:论坛游民
帖 子:143
专家分:21
注 册:2016-7-1
得分:0 
回复 4楼 xuminxz
可以不做统计,190以上的出现概率太小了。
2021-06-24 16:04
xuminxz
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:40
帖 子:749
专家分:2475
注 册:2011-5-8
得分:5 
程序代码:
Close Tables All
Select * From 分列统计15期 Into Cursor sj Readwrite
Use 3d积累个数 Alias  tj In 0
Zap  In tj
SELECT sj
For i=656 To Reccount()
    Select sj
    Go i
    Scatter Fields qihao,h1,h2,h3 To bzar
    Select tj
    Append From Array bzar
    For j=1 To 190
        Select sj
        zdnr=Evaluate('N'+Alltrim(Str(j)))
        itj=1
        If BETWEEN(zdnr,70,190)
            For k=j+1 To 190
                zdmc='N'+Alltrim(Str(k))
                If Evaluate('N'+Alltrim(Str(k)))=zdnr
                    itj=itj+1
                    Blank Fields &zdmc
                Endif
            Endfor
        zdmc='j'+Alltrim(Str(zdnr))
    Replace &zdmc With itj IN tj
    Endif
    Endfor
Endfor

dBase有人接盘了。
2021-06-24 16:37
yd1954
Rank: 2
来 自:辽宁沈阳
等 级:论坛游民
帖 子:143
专家分:21
注 册:2016-7-1
得分:0 
回复 6楼 xuminxz
xuminxz老师,你好!
非常感谢你的帮助。
你编的程序,对分列统计15期表运行顺利,就是慢了点,运行一次约3分钟。
有一个问题,我把程序套用到其它表,我把程序中的表名称改了,同时把字段编号也改了,运行结果是所有的字段都显示为1。
复制个数1表的结构和分列统计15期相同,只是字段名中序号不同,N191--N380.3d记录个数1也是一样。
同样的表有16个,字段名序号从N1到N3003,。因为VF的表只能有255个字段,所以我把1--3003分成16份,每份190个。
恳请xuminxz老师帮助我把程序中的字段名的变量改写一下。
我是一个退休老头,大学学的是中文。现在借助帮助,大学教材,才能勉强看程序,但还不能理解程序语言,不能用中文把程序中的语句表达出来。

下面是我在你的程序上做的改动

Close Tables All
Select * From 复制个数1 Into Cursor sj Readwrite
Use 3d积累个数1 Alias  tj In 0
Zap  In tj
SELECT sj
For i=656 To Reccount()
    Select sj
    Go i
    Scatter Fields qihao,h1,h2,h3 To bzar
    Select tj
    Append From Array bzar
    For j=191 To 380
        Select sj
        zdnr=Evaluate('N'+Alltrim(Str(j)))
        itj=1
        If BETWEEN(zdnr,70,190)
            For k=j+191 To 380
                zdmc='N'+Alltrim(Str(k))
                If Evaluate('N'+Alltrim(Str(k)))=zdnr
                    itj=itj+1
                    Blank Fields &zdmc
                Endif
            Endfor
        zdmc='j'+Alltrim(Str(zdnr))
    Replace &zdmc With itj IN tj
    Endif
    Endfor
Endfor

运行后,结果全是1。
再次表示感谢!

复制个数1.zip (650.71 KB)

3d积累个数1.zip (53.53 KB)


2021-06-24 22:15
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:15 
程序代码:
CLOSE DATABASES 
t1 = SECONDS()
USE 3d积累个数 IN 0 ALIAS d3
ZAP 
lczdm = "Qihao, H1, H2 , H3"
FOR lnj = 1 TO 190
    lczdm = lczdm + ", N" + TRANSFORM(lnj)
ENDFOR
SELECT &lczdm FROM 分列统计15期 WHERE RECNO() > 655 INTO CURSOR test
SCAN 
    SCATTER FIELDS LIKE Q*, H* TO la0
    SCATTER FIELDS LIKE N* TO la1
    INSERT INTO d3 FROM ARRAY la0
    FOR lnj = 1 TO ALEN(la1)
        IF BETWEEN(la1[lnj], 70, 190)
            REPLACE ("J" + TRANSFORM(la1[lnj])) WITH EVALUATE("J" + TRANSFORM(la1[lnj])) + 1 IN d3
        ENDIF 
    ENDFOR
ENDSCAN 
MESSAGEBOX("用时:" + TRANSFORM(SECONDS() - t1) + " 秒")
SELECT d3
BROWSE

坚守VFP最后的阵地
2021-06-25 09:53
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:70 
程序代码:
USE 3d积累个数1 ALIAS d3
ZAP
DIMENSION arr[FCOUNT()]
SELECT 0
USE 分列统计15期 ALIAS fs
*USE 复制个数1 ALIAS fs
nEnd = FCOUNT()
FOR nBegin=1 TO nEnd
    IF UPPER(LEFT(FIELD(nBegin),1))=="N"
        EXIT
    ENDIF
ENDFOR
SCAN FOR RECNO()>655
    STORE 0 TO arr
    SCATTER FIELDS qihao,h1,h2,h3 TO arr
    FOR i=nBegin TO nEnd
        n = EVALUATE(FIELD(i)) - 65
        IF BETWEEN(n, 5,125)
            arr[n] = arr[n] + 1
        ENDIF
    ENDFOR
    INSERT INTO d3 FROM ARRAY arr
ENDSCAN
SELECT * FROM d3


[此贴子已经被作者于2021-6-25 11:38编辑过]

2021-06-25 11:31
xuminxz
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:40
帖 子:749
专家分:2475
注 册:2011-5-8
得分:0 
回复 7楼 yd1954
For k=j+191 To 380
应该改为
For k=j+1 To 380

dBase有人接盘了。
2021-06-25 16:30



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-506071-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.224503 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved