楼主: lclray3
11415 24

[编程问题求助] stata中如何能随机选择变量进行回归 [推广有奖]

11
ywh19860616 发表于 2013-11-21 16:02:12
bbs0805 发表于 2013-11-21 08:27
如果是将数据1,2,3改成A ,B,C,循环语句是:
foreach i in A B C   {
    global xlist="$xlist x`i' ...
  1. clear
  2. set obs 100
  3. gen y=uniform()
  4. forva i=1/3{
  5. gen x`i'=uniform()
  6. }
  7. save data2.dta,replace

  8. clear
  9. forvalue i=1/3 {
  10.    forvalue j=1/`=`i'-1' {
  11.      forvalue k=1/3 {
  12.      global xlist`k'="x`i' x`j'"
  13. }
  14. }
  15. }

  16. use data2.dta,clear
  17. forv m=1/3{
  18. reg y $xlist`m'
  19. }
复制代码
请教下如何对多个全局宏进行引用,上面的代码得不到预想的结果。
一份耕耘,一份收获。

12
bbs0805 发表于 2013-11-22 15:23:16
ywh19860616 发表于 2013-11-21 08:43
这样只能实现一组回归y=x1+x2+x3,而我想实现y分别对x1,x2;x1,x3;x2,x3的回归。
抱歉,还想没有懂 ...
重任意个变量中取三个变量进行组合的程序如下:
clear
set obs 100
gen y=uniform()
local n=10   //变量数,可任意设置
forva i=1/`n' {
gen x`i'=uniform()
}

local m=3   //即三个变量进行组合
local m1=`n'-`m'+1
local m2=`n'-`m'+2
local m3=`n'
  
local k1=1         
forvalue i=1/`m1' {      
      global xlist1="x`k1'"     
      local k2=`k1'+1      
      forvalue j=`k2'/`m2' {   
           global xlist2="$xlist1 x`k2'"
           local k3=`k2'+1  
           forvalue k=`k3'/`m3' {
                global xlist="$xlist2 x`k3'"
                local k3=`k3'+1  
                reg y $xlist  
          }         
          local k2=`k2'+1
    }
    local k1=`k1'+1
}

已有 3 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
gjy0707 + 2 + 1 + 1 + 1 精彩帖子
Sunknownay + 2 + 2 + 2 热心帮助其他会员
ywh19860616 + 5 + 5 + 5 非常感谢,我试一下

总评分: 论坛币 + 2  学术水平 + 8  热心指数 + 8  信用等级 + 8   查看全部评分

13
1210450938 发表于 2015-10-10 00:38:36
想请问一下为什么我按照上述步骤做完显示  clear

. set obs 297
obs was 0, now 297

. gen y=uniform()

. local n=10   //变量数,可任意设置

. forva i=1/`n' {
  2. gen x`i'=uniform()
  3. }

. local m=3   //即三个变量进行组合

. local m1=`n'-`m'+1

. local m2=`n'-`m'+2

. local m3=`n'

.   
. local k1=1         

. forvalue i=1/`m1' {      
  2.       global xlist1="x`k1'"     
  3.       local k2=`k1'+1      
  4.       forvalue j=`k2'/`m2' {   
  5.            global xlist2="xlist1 x`k2'"
  6.            local k3=`k2'+1   
  7.            forvalue k=`k3'/`m3' {
  8.                 global xlist="xlist2 x`k3'"
  9.                 local k3=`k3'+1  
10.                 reg y $xlist  
11.           }         
12.           local k2=`k2'+1
13.     }
14.     local k1=`k1'+1
15. }
variable xlist2 not found
r(111);

end of do-file

r(111);

.


14
1210450938 发表于 2015-10-10 00:39:09
总是报错。。variable xlist2 not found
r(111);

end of do-file

r(111);

15
1210450938 发表于 2015-10-10 21:38:52
请教一下,是哪里有问题呢?

16
彭旋px 发表于 2016-1-9 12:34:59
1210450938 发表于 2015-10-10 00:38
想请问一下为什么我按照上述步骤做完显示  clear

. set obs 297
问题在于定义xlist2时掉了一个"$",在定义xlist2这个全局暂元时,应引用"$xlist1"这个全局暂元,而不是"xlist1"这个变量(数据中并无xlist1变量)。即第5行应改为:global xlist2="$xlist1 x`k2' ";且第8行应该为:global xlist="$xlist2 x`k3'"
完整命令如下:
clear
set obs 100
gen y=uniform()
local n=10  //变量数,可任意设置
forva i=1/`n' {
  gen x`i'=uniform()
}

local m=3   //即三个变量进行组合

local m1=`n'-`m'+1

local m2=`n'-`m'+2

local m3=`n'

local k1=1         

forvalue i=1/`m1' {      
       global xlist1="x`k1'"     
       local k2=`k1'+1      
      forvalue j=`k2'/`m2' {   
           global xlist2="$xlist1 x`k2'"
           local k3=`k2'+1   
           forvalue k=`k3'/`m3' {
                global xlist="$xlist2 x`k3'"
                local k3=`k3'+1  
                reg y $xlist  
           }         
           local k2=`k2'+1
     }
     local k1=`k1'+1
}

*共120个回归*

17
彭旋px 发表于 2016-1-9 12:53:57
ywh19860616 发表于 2013-11-21 08:20
谢谢您的解答
我想主要问题是有了变量x1,x2,x3怎么能先得到所有的组合,比如
x1,x2;x2,x3;x1,x3这样的, ...
从三个变量x1,x2,x3中选择2个进行组合回归命令如下:
***1 设置数据***
clear
set obs 100
gen y=uniform()
forvalue i=1/3 {
x`i'=uniform()
}
***2 对x1,x2 , x3三个变量依次两两组合进行回归***
local m=2  // 表示需从三个中取两个变量
local m1=3-2+1
local m2=3-2+2  // 需进行两重循环
local k1=1          
forvalue i=1/`m1' {       
       global xlist1="x`k1'"     
       local k2=`k1'+1       
      forvalue j=`k2'/`m2' {   
           global xlist="$xlist1 x`k2' "                      
          reg y  $xlist                   
           local k2=`k2'+1
     }
     local k1=`k1'+1
}
***共三个回归,依次为reg y  x1 x2; reg y x1 x3; reg y x2 x3***




18
zhaozhao16 发表于 2016-1-11 11:30:52
学习力,谢谢

19
再进步一点 发表于 2018-11-18 12:48:53 来自手机
lclray3 发表于 2013-11-20 21:13
我在运行的时候出现了错误,再麻烦你一下,帮我看一下这是什么错误。
你好,请问你是怎么处理的

20
gjy0707 发表于 2019-10-26 21:33:56
bbs0805 发表于 2013-11-22 15:23
重任意个变量中取三个变量进行组合的程序如下:
clear
set obs 100
如果这些变量的obs不统一怎么办呢?我按照这个弄完之后,出错了
. set obs 399
number of observations (_N) was 399, now 399

. gen y=uniform()

. local n=31

. forva i=1/`n' {
  2. gen x`i'=uniform()
  3. }

. local m=9

. local m1=`n'-`m'+1

. local m2=`n'-`m'+2

. local m3=`n'

. local k1=9         

. forvalue i=1/`m1' {
  2. global xlist1="x`k1'"
  3. local k2=`k1'+1
  4. forvalue a=`k2'/`m2' {
  5. global xlist2="$xlist1 x`k2'"
  6. local k3=`k2'+1
  7. forvalue b=`k3'/`m3' {
  8. global xlist3="$xlist2 x`k3'"
  9. forvalue c=`k4'/`m4' {
10. global xlist4="$xlist3 x`k4'"
11. local k5=`k4'+1
12. forvalue d=`k5'/`m5' {
13. global xlist5="$xlist4 x`k5'"
14. local k6=`k5'+1
15. forvalue e=`k6'/`m6' {
16. global xlist6="$xlist5 x`k6'"
17. local k7=`k6'+1
18. forvalue f=`k7'/`m7' {
19. global xlist7="$xlist6 x`k7'"
20. local k8=`k7'+1
21. forvalue f=`k8'/`m8' {
22. global xlist8="$xlist7 x`k8'"
23. local k9=`k8'+1
24. forvalue k=`k9'/`m9' {
25. global xlist="$xlist8 x`k9'"
26. local k9=`k9'+1
27. foreach y in var1 var2 var3 var4 var5 var6 var7{
28. reg y var8 $xlist
29. est store main_"k`i'"
30. }
31. local k9=`k9'+1
32. }
33. local k8=`k8'+1
34. }
35. local k7=`k7'+1
36. }
37. local k6=`k6'+1
38. }
39. local k5=`k5'+1
40. }
41. local k4=`k4'+1
42. }
43. local k3=`k3'+1
44. }
45. local k2=`k2'+1
46. }
47. local k1=`k1'+1
48. }
invalid syntax
r(198)

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

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