楼主: shealingha
5581 7

[编程问题求助] 如何按排列组合的方式让每列数据相除? [推广有奖]

  • 3关注
  • 0粉丝

已卖:1份资源

博士生

10%

还不是VIP/贵宾

-

威望
0
论坛币
86 个
通用积分
0.0050
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
5891 点
帖子
106
精华
0
在线时间
324 小时
注册时间
2005-3-22
最后登录
2023-2-12

楼主
shealingha 发表于 2012-8-9 00:22:38 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
假设数据结构如左图,需要求新的变量
                                                  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'
}

藤椅
shealingha 发表于 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'
}
老树皮您好,您的程序我执行了,似乎有问题,并没有产生一系列新变量,然后我也是在学习,想弄明白每一句程序的意思,所以继续请教您,问题我就写在上面你程序的注释里了,谢谢。

板凳
shealingha 发表于 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'
}
已有 3 人评分学术水平 热心指数 信用等级 收起 理由
Stakiny + 3 + 3 + 3 精彩帖子
shealingha + 1 + 1 + 1 热心帮助其他会员
ywh19860616 + 1 + 1 + 1 精彩帖子

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

地板
老树皮 发表于 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

7
Janemathilde 发表于 2013-1-12 00:57:39
楼上的请教,如果不是相除,而是两两组合进行其它运算,比如相关性
是不是会重复计算啊,就是v1和v2,v1和v3.。。。
                    然后到v2的时候,它会重复又来变一遍组合v2和v1,然后 再往下v2和v3。。。
有没有办法避免这种重复组合的状况呢?
多谢!

8
sungmoo 发表于 2013-1-12 07:42:40
有没有办法避免这种重复组合的状况呢?
forv i=2/10{
forv j=1/`=`i'-1'{
g v`j'`i'=v`i'+v`j'
}
}
已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
Stakiny + 3 + 3 + 3 精彩帖子
Sunknownay + 100 + 5 + 1 + 1 + 1 热心帮助其他会员

总评分: 经验 + 100  论坛币 + 5  学术水平 + 4  热心指数 + 4  信用等级 + 4   查看全部评分

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

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