楼主: 南山2020
1676 9

[数据管理求助] stata如何将多个单元格整体下移 [推广有奖]

  • 2关注
  • 0粉丝

本科生

7%

还不是VIP/贵宾

-

威望
0
论坛币
29 个
通用积分
1.0500
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
235 点
帖子
11
精华
0
在线时间
125 小时
注册时间
2021-1-21
最后登录
2024-2-1

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

. clear

. input c1 c2 c3 c4

             c1          c2          c3          c4
  1. 1 2 3 4
  2. 5 6 7 8
  3. end

. dataex

----------------------- copy starting from the next line -----------------------
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input double(c1 c2 c3 c4)
  4. 1 2 3 4
  5. 5 6 7 8
  6. end
复制代码

------------------ copy up to and including the previous line ------------------

如何将
3 4
7 8
整体向下移动两行,变成
. clear

. input c1 c2 c3 c4

             c1          c2          c3          c4
  1. 1 2 0 0
  2. 5 6 0 0
  3. 0 0 3 4
  4. 0 0 7 8
  5. end

. dataex

----------------------- copy starting from the next line -----------------------
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input double(c1 c2 c3 c4)
  4. 1 2 0 0
  5. 5 6 0 0
  6. 0 0 3 4
  7. 0 0 7 8
  8. end
复制代码

------------------ copy up to and including the previous line ------------------

Listed 4 out of 4 observations



当然,这里是变量数量少。如果数量很多的时候,比如 varlist c1-c200,怎么将c3-c4下移两行,c5-c6下移四行,c7-c8下移六行(以此类推)?
急求!谢谢大神指点迷津。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Stata tata 单元格 observations observation

沙发
zdlspace 学生认证  发表于 2021-1-30 13:46:43 |只看作者 |坛友微信交流群
请看例子:
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input double(var1 var2 var3 var4)
  4. 1 3 5 7
  5. 2 4 6 8
  6. 4 5 3 9
  7. end

  8. expand 2
  9. replace var3=0 if _n<=3
  10. replace var4=0 if _n<=3
  11. replace var1=0 if _n>3
  12. replace var2=0 if _n>3

  13. . list,sep(3)

  14.      +---------------------------+
  15.      | var1   var2   var3   var4 |
  16.      |---------------------------|
  17.   1. |    1      3      0      0 |
  18.   2. |    2      4      0      0 |
  19.   3. |    4      5      0      0 |
  20.      |---------------------------|
  21.   4. |    0      0      5      7 |
  22.   5. |    0      0      6      8 |
  23.   6. |    0      0      3      9 |
  24.      +---------------------------+
复制代码

使用道具

藤椅
南山2020 发表于 2021-1-30 13:50:20 |只看作者 |坛友微信交流群
zdlspace 发表于 2021-1-30 13:46
请看例子:
多谢多谢!不过这是变量数量小,如果很多变量,那么需要将 replace var 不停重复吗?有没有什么循环的方法?

使用道具

板凳
南山2020 发表于 2021-1-30 15:07:40 |只看作者 |坛友微信交流群
zdlspace 发表于 2021-1-30 13:46
请看例子:
多谢指点!另外的问题解决了。谢谢!

使用道具

报纸
zdlspace 学生认证  发表于 2021-1-30 15:22:11 |只看作者 |坛友微信交流群
我的方案有点复杂
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input double(var1 var2 var3 var4 var5 var6 var7 var8)
  4. 1 3 5 7 4 4 4 6
  5. 2 4 6 8 5 5 5 5
  6. 4 5 3 9 4 6 5 5
  7. end


  8. set obs 7
  9. gen t=_n
  10. tsset t
  11. forvalues i=3(2)7{
  12.         local j=(`i'+1)/2
  13.         gen lvar`i'=L`j'.var`i'         
  14. }
  15. forvalues i=4(2)8{
  16.         local j=`i'/2
  17.         gen lvar`i'=L`j'.var`i'         
  18. }
  19. forvalues i=8(-1)3{
  20.         replace lvar`i'=0 if mi(lvar`i')
  21. order var1 var2 lvar`i' lvar`i+1'       
  22. }
  23. replace var1=0 if var1==.
  24. replace var2=0 if var2==.
  25. drop var3-var8 t

  26. . list,sep(4)
  27.      +-------------------------------------------------------------+
  28.      | var1   var2   lvar3   lvar4   lvar5   lvar6   lvar7   lvar8 |
  29.      |-------------------------------------------------------------|
  30.   1. |    1      3       0       0       0       0       0       0 |
  31.   2. |    2      4       0       0       0       0       0       0 |
  32.   3. |    4      5       5       7       0       0       0       0 |
  33.   4. |    0      0       6       8       4       4       0       0 |
  34.      |-------------------------------------------------------------|
  35.   5. |    0      0       3       9       5       5       4       6 |
  36.   6. |    0      0       0       0       4       6       5       5 |
  37.   7. |    0      0       0       0       0       0       5       5 |
  38.      +-------------------------------------------------------------+

  39.    
复制代码


使用道具

地板
zdlspace 学生认证  发表于 2021-1-30 15:33:02 |只看作者 |坛友微信交流群
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input double(var1 var2 var3 var4 var5 var6 var7 var8)
  4. 1 3 5 7 4 4 4 6
  5. 2 4 6 8 5 5 5 5
  6. 4 5 3 9 4 6 5 5
  7. end


  8. set obs 9
  9. gen t=_n
  10. tsset t
  11. forvalues i=3(2)7{
  12.         local j=`i'-1
  13.         gen lvar`i'=L`j'.var`i'         
  14. }
  15. forvalues i=4(2)8{
  16.         local j=`i'-2
  17.         gen lvar`i'=L`j'.var`i'         
  18. }
  19. forvalues i=8(-1)3{
  20.         replace lvar`i'=0 if mi(lvar`i')
  21. order var1 var2 lvar`i' lvar`i+1'       
  22. }
  23. replace var1=0 if var1==.
  24. replace var2=0 if var2==.
  25. drop var3-var8 t

  26. . list,sep(3)
  27.      +-------------------------------------------------------------+
  28.      | var1   var2   lvar3   lvar4   lvar5   lvar6   lvar7   lvar8 |
  29.      |-------------------------------------------------------------|
  30.   1. |    1      3       0       0       0       0       0       0 |
  31.   2. |    2      4       0       0       0       0       0       0 |
  32.   3. |    4      5       5       7       0       0       0       0 |
  33.      |-------------------------------------------------------------|
  34.   4. |    0      0       6       8       0       0       0       0 |
  35.   5. |    0      0       3       9       4       4       0       0 |
  36.   6. |    0      0       0       0       5       5       0       0 |
  37.      |-------------------------------------------------------------|
  38.   7. |    0      0       0       0       4       6       4       6 |
  39.   8. |    0      0       0       0       0       0       5       5 |
  40.   9. |    0      0       0       0       0       0       5       5 |
  41.      +-------------------------------------------------------------+
  42.    
复制代码

使用道具

7
zdlspace 学生认证  发表于 2021-1-30 15:37:53 |只看作者 |坛友微信交流群
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input double(var1 var2 var3 var4 var5 var6 var7 var8)
  4. 1 3 5 7 4 4 4 6
  5. 2 4 6 8 5 5 5 5
  6. 4 5 3 9 4 6 5 5
  7. end


  8. set obs 9
  9. gen t=_n
  10. tsset t
  11. forvalues i=3(2)7{
  12.         local j=`i'-1
  13.         gen lvar`i'=L`j'.var`i'         
  14. }
  15. forvalues i=4(2)8{
  16.         local j=`i'-2
  17.         gen lvar`i'=L`j'.var`i'         
  18. }
  19. forvalues i=8(-1)3{
  20.         replace lvar`i'=0 if mi(lvar`i')
  21. order var1 var2 lvar`i' lvar`i+1'       
  22. }
  23. replace var1=0 if var1==.
  24. replace var2=0 if var2==.
  25. drop var3-var8 t

  26. ren lvar* var*

  27. . list,sep(3)
  28.        +-------------------------------------------------------+
  29.      | var1   var2   var3   var4   var5   var6   var7   var8 |
  30.      |-------------------------------------------------------|
  31.   1. |    1      3      0      0      0      0      0      0 |
  32.   2. |    2      4      0      0      0      0      0      0 |
  33.   3. |    4      5      5      7      0      0      0      0 |
  34.      |-------------------------------------------------------|
  35.   4. |    0      0      6      8      0      0      0      0 |
  36.   5. |    0      0      3      9      4      4      0      0 |
  37.   6. |    0      0      0      0      5      5      0      0 |
  38.      |-------------------------------------------------------|
  39.   7. |    0      0      0      0      4      6      4      6 |
  40.   8. |    0      0      0      0      0      0      5      5 |
  41.   9. |    0      0      0      0      0      0      5      5 |
  42.      +-------------------------------------------------------+

复制代码

使用道具

8
南山2020 发表于 2021-1-31 22:13:59 |只看作者 |坛友微信交流群
zdlspace 发表于 2021-1-30 15:37
你好。var `i+1' 这种形式可以读出来吗?

使用道具

9
zdlspace 学生认证  发表于 2021-2-1 02:26:11 |只看作者 |坛友微信交流群
修改了一下代码,如果你是200个变量,代码为:
  1. set obs 200
  2. gen t=_n
  3. tsset t
  4. forvalues i=200(-1)1{
  5.         if mod(`i',2) {
  6.          local j=`i'-1
  7.         gen lvar`i'=L`j'.var`i'        
  8.         }
  9.      else{
  10.                  local j=`i'-2
  11.         gen lvar`i'=L`j'.var`i'        
  12.          }
  13.          replace lvar`i'=0 if mi(lvar`i')
  14.          order lvar`i' lvar`i+1'   
  15. }
  16. drop var* t
复制代码

使用道具

10
zdlspace 学生认证  发表于 2021-2-1 02:57:27 |只看作者 |坛友微信交流群
模拟一下200个变量
  1. clear
  2. set obs 2
  3. forvalues i = 1/200 {
  4. gen var`i' = 1 in 1/2
  5. }

  6. set obs 200
  7. gen t=_n
  8. tsset t
  9. forvalues i=200(-1)1{
  10.         if mod(`i',2) {
  11.          local j=`i'-1
  12.         gen lvar`i'=L`j'.var`i'         
  13.         }
  14.      else{
  15.                  local j=`i'-2
  16.         gen lvar`i'=L`j'.var`i'         
  17.          }
  18.          replace lvar`i'=0 if mi(lvar`i')
  19.      order lvar`i' lvar`i+1'   
  20. }

  21. drop var* t
  22. ren lvar* var*
复制代码


已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Sunknownay + 3 + 3 + 3 热心帮助其他会员

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

使用道具

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

本版微信群
加好友,备注jltj
拉您入交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-1 00:24