悬赏 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等语句,不知道怎么解决我的问题。
希望能得到论坛朋友的帮助啊,有点儿急。