| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2362 人关注过本帖
标题:请教循环语句
取消只看楼主 加入收藏
qiaolinxj
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2009-3-14
结帖率:88.24%
收藏
已结贴  问题点数:10 回复次数:34 
请教循环语句
我想先将cyk表按53、54、55、56、57、58、59、60、63、64、65、70、71、72、73、74、75、76、77、78、79、80、81、82、83、84、85、86、87、88、89大类分再出来,
每类再按1、2、3、4、5层分字段为FC
抽样也同上cy.dbf
无效同上 wx.dbf
重点同上zd.dbf
有效同上 yx.dbf
分好后再判断,例如cy里53第一层的个数》=(cyk-cy)里53第一层的个数+5.若大于,则按RADOM从小到大排序取前wx53第一层个数,并在BZ字段里标注1,若小于,则停止,想请问这个循环该怎么写,谢谢















[ 本帖最后由 qiaolinxj 于 2013-11-25 14:39 编辑 ]
2013-11-25 12:50
qiaolinxj
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2009-3-14
收藏
得分:0 
数据表太大了,有一百多兆,类按照HYDL字段来取得,层按照FC字段来取得
循环方法是 抽样框里每一个类每一层的个数必须大于样本框里同一类同一层个数+5,如果大于,则抽样框此层按照RADOM排序取WX样本同层的个数并在BZ2字段加以标记
2013-11-25 14:07
qiaolinxj
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2009-3-14
收藏
得分:0 
我发DBF说不行,必须压缩,截图也发不出来

[ 本帖最后由 qiaolinxj 于 2013-11-25 14:41 编辑 ]
2013-11-25 14:39
qiaolinxj
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2009-3-14
收藏
得分:0 

2013-11-25 14:40
qiaolinxj
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2009-3-14
收藏
得分:0 
回复 8楼 tlliqi
写了这个循环语句,结果是出来了,但是不知道怎么能在CY1里标记
sele 1
use cy1.dbf
sele 2
use yb.dbf
sele 3
use wx.dbf
SELECT 4
USE cy2.dbf
SELECT 4
DELETE ALL
PACK

for i=53 to 89
    for m=1 to 5
        sele 2
        sele * from yb where hydl=i and fc=m into dbf ls1
        SELECT ls1
        n=RECCOUNT()
        k=n+5
        SELECT 1
        SELECT * FROM cy1 WHERE hydl=i AND fc=m INTO dbf ls2
        SELECT ls2
        s=RECCOUNT()
        IF k<=s
            SELECT 3
            SELECT * FROM wx WHERE hydl=i AND fc=m INTO dbf ls3
            SELECT ls3
            x=RECCOUNT()
            IF x<>0
                SELECT top x * FROM cy1 ORDER BY random WHERE hydl=i AND fc=m INTO dbf ls4
                SELECT 4
                APPEND FROM ls4
                SELECT ls4
                USE
                DELETE FILE ls4.dbf
            ENDIF  

            SELECT ls3
            USE
            DELETE FILE ls3.dbf
            
        ENDIF
        SELECT ls1
        USE
        DELETE FILE ls1.dbf
        SELECT ls2
        USE
        DELETE FILE ls2.dbf
        
    ENDFOR
ENDFOR
 CLOSE ALL
2013-11-25 16:39
qiaolinxj
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2009-3-14
收藏
得分:0 
以下是引用bccn0906在2013-11-25 20:21:51的发言:

因没数据,未经测试
SELECT a.hydl,a.fc FROM (SELECT hydl,fc,COUNT(*)+5 as k FROM yb GROUP BY hydl,fc) a,(SELECT hydl,fc,COUNT(*) as s FROM cy1  GROUP BY hydl,fc) b INTO CURSOR ls3 WHERE a.hydl=b.hydl AND a.fc=b.fac AND a.k<=b.s

SELECT a.hydl,a.fc,COUNT(*) as x FROM wx a,ls3 b INTO CURSOR ls4 WHERE a.hydl=b.hydl AND a.fc=b.fac

SELECT a.*,RECNO() 序号,RECNO() 记录号 FROM cy1 a,ls4 b INTO CURSOR cy1_tmp1 WHERE a.hydl=b.hydl AND a.fc=b.fac ORDER BY a.hydl,a.fc,a.random
REPLACE ALL 序号 WITH RECNO() IN cy1_tmp1
SELECT hydl,fc,MIN(序号) 序号 FROM cy1_tmp1 INTO CURSOR cy1_tmp2  GROUP BY hydl,fc

SELECT a.* FROM cy1_tmp1 a,cy1_tmp2 b, ls4 c INTO CURSOR cy1_tmp3  WHERE a.hydl=b.hydl AND a.fc=b.fac AND a.hydl=c.hydl AND a.fc=c.fac AND a.序号
图片附件: 游客没有浏览图片的权限,请 登录注册
所有的表都是这个结构,举个例子,这是张wx表,52是大类,FC是表示层数,里面有5层,先算出每层里的个数,例如52里第一层有4家,第二层有4家,第三层有5家,第四层有4家,第五层有4家,以此类推,每个大类都这样分层算出个数来,CY1也是一样计算,加入CY152大类第一层有10家,也就是大于WX里4+5,那就继续执行,将CY1里52大类第一层的个数按RADOM排序,取最小的4家,并将这四家标准在CY1和33CYK里的BZ2里,填个1就可以,以此类推,不知道我这样说清楚了没,麻烦各位看看我那个程序有没有问题,还有就是我对两张表找出相同记录并在其中一张表上赋值不太会用。
2013-11-25 21:15
qiaolinxj
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2009-3-14
收藏
得分:0 
回复 10楼 bccn0906
谢谢,我在刚才的回复里用EXCEL大概的说了下我的意思,不知道说明白没,麻烦你看一下行吗
2013-11-25 21:17
qiaolinxj
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2009-3-14
收藏
得分:0 
以下是引用sdta在2013-11-25 20:39:45的发言:

不知道楼主到底想做什么,看不懂
不知道我刚才回复有没有说清楚,表达能力实在太差了
2013-11-25 21:18
qiaolinxj
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2009-3-14
收藏
得分:0 
以下是引用qiaolinxj在2013-11-25 21:15:52的发言:

所有的表都是这个结构,举个例子,这是张wx表,52是大类,FC是表示层数,里面有5层,先算出每层里的个数,例如52里第一层有4家,第二层有4家,第三层有5家,第四层有4家,第五层有4家,以此类推,每个大类都这样分层算出个数来,CY1也是一样计算,加入CY152大类第一层有10家,也就是大于WX里4+5,那就继续执行,将CY1里52大类第一层的个数按RADOM排序,取最小的4家,并将这四家标准在CY1和33CYK里的BZ2里,填个1就可以,以此类推,不知道我这样说清楚了没,麻烦各位看看我那个程序有没有问题,还有就是我对两张表找出相同记录并在其中一张表上赋值不太会用。
还有如果CY152类第一层是八家,小于WX里52第一层的4+5,那就停止运行这一层。继续下面的
2013-11-25 21:22
qiaolinxj
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2009-3-14
收藏
得分:0 
回复 16楼 bccn0906
谢谢,但今天要求必须CY2里的每家替换的都必须对应WX里的那一条,所以我想得用指针了吧,可惜指针真是菜鸟,完全不会用,不知道能不能指导一下,谢谢,就是53里第一层对应了5家,就必须把替换的五家根据随机数从小到大的顺序对应出来,并且在CY2里的weihgt,code等字段里将WX那家企业的WEIGHT,CODE值给写出来
2013-11-26 17:19
快速回复:请教循环语句
数据加载中...
 
   



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

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