全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
5547 7
2012-08-09
假设数据结构如左图,需要求新的变量
                                                  v1/v2,v1/v3,v1/v4,v2/v3,v2/v4,也就是按排列组合
       v1  v2    v3  v4                          的方式,让每列
1     8     8     8    8                      都两两相除,实际数据有很多列,
2     8     8     8    8                              不可能手动指定新变量,
3     8     8     8    8                     所以该如何编程呢?谢谢大家!
4     8     8     8    8                      谢谢老树皮!
5     8     8     8    8
6     8     8     8    8
7     8     8     8    8



二维码

扫码加我 拉你入群

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

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

全部回复
2012-8-9 06:18:11
假设你有10个变量v1-v10,那么编程命令为:

forval ii=1/10 {
   rename v`ii' fenzi
   foreach jj of varlist v* {
      gen v`ii'd`jj'=`fenzi'/`jj'
   }
   rename fenzi v`jj'
}
二维码

扫码加我 拉你入群

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

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

2012-8-10 21:25:03
forval ii=1/10 {                          // ii代表什么,为什么不是i?
   rename v`ii' fenzi
   foreach jj of varlist v* {            // jj代表什么?
      gen v`ii'd`jj'=`fenzi'/`jj'          // v`ii'd`jj'   是新变量名?  这个d的含义是什么?
   }
   rename fenzi v`jj'
}
老树皮您好,您的程序我执行了,似乎有问题,并没有产生一系列新变量,然后我也是在学习,想弄明白每一句程序的意思,所以继续请教您,问题我就写在上面你程序的注释里了,谢谢。
二维码

扫码加我 拉你入群

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

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

2012-8-10 21:32:52
欢迎各位学友继续热情指教
二维码

扫码加我 拉你入群

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

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

2012-8-11 06:00:04
shealingha 发表于 2012-8-10 21:25
forval ii=1/10 {                          // ii代表什么,为什么不是i?
   rename v`ii' fenzi
   fo ...
forvalue 是循环语句啊, ii是local macro,用来指代从1到10的;
foreach也是循环语句,jj和ii类似。
在help中的循环例子使用的是i,或者j之类的单个字母,我采用两个字母是因为如果do file很长的的话,我要找个loop很容易,只要搜寻ii或者jj就行。如果使用i或者j的话,难保do file中没有其他包含这些字母的变量或者命令。

对不起,有两个typo:
(1) `fenzi'/`jj' 不对,因为fenzi是变量名,不是local macro,所以不应该用引号;
(2) rename fenzi v`jj'不对,应该是 rename fenzi v`ii',因为这个是用来控制分子的外循环。

现在修改好了

forval ii=1/10 {                          
   rename v`ii' fenzi
   foreach jj of varlist v* {            
      gen v`ii'd`jj'=fenzi/`jj'        
   }
   rename fenzi v`ii'
}
二维码

扫码加我 拉你入群

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

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

2012-8-11 06:04:49
shealingha 发表于 2012-8-10 21:25
forval ii=1/10 {                          // ii代表什么,为什么不是i?
   rename v`ii' fenzi
   fo ...
这个d没什么新特别含义的,使用v`ii'd`jj'是表示v`ii' is divided by`jj'的意思。当然你也可以使用_或者你认为合适的字母或者符号替代d
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群