楼主: xingxf
1135 6

[编程问题求助] 有关循环 [推广有奖]

  • 0关注
  • 50粉丝

已卖:3687份资源

副教授

12%

还不是VIP/贵宾

-

威望
0
论坛币
60582 个
通用积分
772.5645
学术水平
224 点
热心指数
251 点
信用等级
138 点
经验
20775 点
帖子
753
精华
0
在线时间
522 小时
注册时间
2011-3-12
最后登录
2025-4-1

楼主
xingxf 发表于 2013-12-22 05:04:49 |AI写论文
10000论坛币
有如下格式数据
          var1   var2   var3
1          1
2          1.5
3          6
4          8
5          .
6          .
7          .
8          .
9          6
10       8.2
.           
.           
.           
n         

现需要在var2列生成var1[_n+5],如果var1[_n+5]是缺失值,则等于var1[_n+4],如果var1[_n+4]也是缺失值,则等于var1[_n+3],以此类推,直到找到有数值的为止。
在var3列生成除去本行观察值之外的var1列的中值。

用以下数据举例,按上述规则,var2,var3的值应如下所示:
          var1      var2       var3
1          1           8           6
2          1.5        8           6
3          3.6        8           6
4          8           6          3.6
5          .          8.2        (6+3.6)/2  
6          .          8.2        (6+3.6)/2
7          .          8.2        (6+3.6)/2
8          .          8.2        (6+3.6)/2
9          6         8.2        (6+3.6)/2
10       8.2        8.2         3.6


上述问题大家有什么比较好的方法吗?观察值可能众多,因此也需要考虑运行速度的问题
关键词:VaR 缺失值

回帖推荐

kerrydu 发表于6楼  查看完整内容

dxystata 发表于4楼  查看完整内容

dxystata 发表于2楼  查看完整内容

本帖被以下文库推荐

沙发
dxystata 发表于 2013-12-22 05:04:50
  1. capture drop var2
  2. capture drop var3
  3. gen var2=.
  4. gen var3=.

  5. forvalue i=1(1)`=_N' {
  6.         forvalues j=5(-1)0 {
  7.                 if var1[`=`i'+`j'']~=. {
  8.                         replace var2=var1[`=`i'+`j''] in `i'
  9.                         continue,break
  10.             }
  11.         }
  12. qui centile var1 if _n~=`i'
  13. qui replace var3=r(c_1) in `i'
  14. }
复制代码

藤椅
dxystata 发表于 2013-12-22 09:19:17
  1. local obs=_N
  2. capture drop var2
  3. capture drop var3
  4. gen var2=.
  5. gen var3=.

  6. forvalue i=1(1)`obs' {
  7.     forvalues j=5(-1)0 {
  8.                  if var1[`=`i'+`j'']~=. {
  9.                         replace var2=var1[`=`i'+`j''] in `i'
  10.                         continue,break
  11.                   }
  12.         }
  13.         qui sum var1 if _n~=`i',d
  14.         qui replace var3=r(p50) in `i'
  15. }
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
xingxf + 5 + 5 + 5 精彩帖子

总评分: 学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

板凳
dxystata 发表于 2013-12-22 09:23:51
qui sum var1 if _n~=`i',d
qui replace var3=r(p50) in `i'

也可以改为
qui centile var1 if _n~=`i'
qui replace var3=r(c_1) in `i'

报纸
kerrydu 发表于 2013-12-22 09:46:30
现需要在var2列生成var1[_n+5],如果var1[_n+5]是缺失值,则等于var1[_n+4],如果var1[_n+4]也是缺失值,则等于var1[_n+3],以此类推,直到找到有数值的为止。

如果连续6个以上是缺失值,需要继续回溯取值吧?

地板
kerrydu 发表于 2013-12-22 09:50:43
dxystata 发表于 2013-12-22 09:19
  1. local obs=_N
  2. capture drop var2
  3. capture drop var3
  4. gen var2=.
  5. gen var3=.

  6. forvalue i=1(1)`obs' {
  7. local  j =-`i'+1
  8.     forvalues j=5(-1)`j' {
  9.                  if var1[`=`i'+`j'']~=. {
  10.                         replace var2=var1[`=`i'+`j''] in `i'
  11.                         continue,break
  12.                   }
  13.         }
  14.         qui sum var1 if _n~=`i',d
  15.         qui replace var3=r(p50) in `i'
  16. }
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
xingxf + 5 + 5 + 5 精彩帖子

总评分: 学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

7
xingxf 发表于 2013-12-22 17:38:02
kerrydu 发表于 2013-12-22 09:46
现需要在var2列生成var1[_n+5],如果var1[_n+5]是缺失值,则等于var1[_n+4],如果var1[_n+4]也是缺失值,则 ...
对的,需要继续回溯

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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-30 23:12