楼主: henghengliang
2120 1

[编程问题求助] 求助,如何编写循环语句,非同一语句用于多个变量,而是调整某变量值使其满足等式 [推广有奖]

  • 0关注
  • 0粉丝

已卖:1份资源

大专生

53%

还不是VIP/贵宾

-

威望
0
论坛币
3560 个
通用积分
1.1400
学术水平
3 点
热心指数
4 点
信用等级
2 点
经验
1391 点
帖子
17
精华
0
在线时间
93 小时
注册时间
2008-5-1
最后登录
2025-9-11

楼主
henghengliang 发表于 2013-5-13 23:07:47 |AI写论文
500论坛币
有这样几个变量,N是由E,A,F三个变量和U及一些其他的参数用一个非线性等式表达出来的。
样本有200个观察对象。

我要做的是counterfactual excercise,中文大概应该叫反事实分析。
要做的是赋予所有观察对象的E变量一个统一的新值newE,newE是所有观察对象基于N的加权平均值。然后保持A,F不变,同时使这200个观察值的N加总值不变,通过调整U这个参数的,使等式依然成立。

我的思路是,先通过原有的U,计算newE情况下的N1,这个SumN1肯定与SumN不同,如果SumN1>SumN,那么使U增大,比如变为U1=U+1;如果SumN1<SumN,那么使U减小,比如变为U1=U-1。然后基于U1,重新计算,得到新的N值,N2,再次测试SumN2与SumN的关系,然后对U值进行调整。多次之后,当SumN’值在SumN+-一个很小值的范围内的时候,停止循环。

大概就是这个意思,不知道说清楚没有。

我目前就写了一点儿
egen p=pc(N),prop
egen aveE=sum(p*E)
gen sumN=sum(N)
egen N1=F(U,aveE,A,F) *公式挺复杂我就不具体写了

gen sumN1=sum(N1)

后面该具体怎么循环试值,就不知道该怎么办了。
我想的是大概这个意思,
if sumN1>sumN+100 replace U=U+1
if sumN1<sumN-100 replace U=U-1
可是接下来怎么让它一遍遍的试起来,直到new sumN在[sumN-100,sumN+100]这个范围内呢。

我查到的用于循环的 forvalue 和foreach等语句,不知道怎么解决我的问题。

希望能得到论坛朋友的帮助啊,有点儿急。


关键词:循环语句 多个变量 变量值 excercise counter 平均值 如何

沙发
ermutuxia 发表于 2014-10-8 17:52:51
查看while语句的帮助文件
set obs 10
        . local i = 1
        . while `i' < 40 {
          2. gen u`i' = runiform()
          3. local i = `i' + 1
          4. }

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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-28 10:08