楼主: jjkate2001
2821 12

[求助]关于一个循环的问题 [推广有奖]

  • 0关注
  • 0粉丝

大专生

58%

还不是VIP/贵宾

-

威望
0
论坛币
48 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
2215 点
帖子
27
精华
0
在线时间
90 小时
注册时间
2009-2-7
最后登录
2014-5-5

楼主
jjkate2001 发表于 2009-2-28 13:54:00 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
刚接触stata不久,请大家帮忙指导一下如下实现下面的功能,谢谢!
已知在下表所有ID相同的行中,X取值都不同。求在ID相同时,对于每个不同的Y值(不含缺省),|X-Y|的最小值。X不一定与Y同行。
比如下面表格中,Y=2时,最小值就是32,Y=58时,最小值是11,Y=7时,最小值是22..。 以此类推

因为数据较多,所以不知道是不是需要用循环实现?
ID
1
X
34
Y
2
1 90            -
1 47 58
3 29 7
3  32
           -
9 83 8
9 93 34
12 32 9

[此贴子已经被作者于2009-3-1 11:55:30编辑过]

二维码

扫码加我 拉你入群

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

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

关键词:不知道是不是 Stata tata 最小值 不知道

沙发
sungmoo 发表于 2009-3-1 11:10:00
bysort id: g n=_n
sort n id
g p=_n
sort id p
by id: egen q=min(p)
sum id if n==1
local m=r(N)
g min=0
forv i=1(1)`m'{
mkmat x if q==`i',mat(x)
mkmat y if q==`i',mat(y)
local s=.
local r=rowsof(x)
forv j=1(1)`r'{
forv k=1(1)`r'{
mat def u=el(x,`j',1)-el(y,`k',1)
local t=abs(det(u))
if `t'<`s' local s=`t'
}
}
replace min=`s' if q==`i'
mat drop x y
}
keep id x y min
eblog  金币 +10  金钱 +100  魅力 +10  经验 +50  奖励 2009-3-1 13:30:23

藤椅
jjkate2001 发表于 2009-3-1 11:54:00
谢谢版主!我运行了一下还有点小问题,这样编出来,在同ID下,不同的Y值得出的最小值一样了,就是说Y=2和Y=58都得出了11。
不知道是什么地方还需要改进下啊?还请版主帮忙看看:)

板凳
sungmoo 发表于 2009-3-1 12:42:00

你想要什么样的最终结果?

报纸
jjkate2001 发表于 2009-3-1 14:19:00
不好意思,可能是我没说清楚~~
我希望最后得到的是:
Min
32    (=|34-2|)
-
11    (=|47-58|)
22    (=|29-7|)
-
75    (=|83-8|)
49    (=|83-34|)
23    (=|32-9|)

谢谢:)

地板
sungmoo 发表于 2009-3-1 14:22:00

bysort id: g n=_n
sort n id
g p=_n
sort id p
by id: egen q=min(p)
sum id if n==1
local m=r(N)
g min=0
forv i=1(1)`m'{
mkmat x if q==`i',mat(a)
mkmat y if q==`i',mat(b)
local s=.
local r=rowsof(a)
forv j=1(1)`r'{
forv k=1(1)`r'{
local t=abs(el(b,`j',1)-el(a,`k',1))
if `t'<`s' local s=`t'
}
replace min=`s' if q==`i'&y==el(b,`j',1)
}
}
replace min=. if y==.
keep id x y min

*这样可以更简洁一些(生成矩阵时不要使用数据库的变量名)

[此贴子已经被作者于2009-3-2 12:00:21编辑过]

7
jjkate2001 发表于 2009-3-1 15:44:00
太感谢版主啦!呵呵这下就没问题啦:)
感觉这个编程和以前学的C还是不大一样~~以后可能还有问题请教哦!

8
蓝色 发表于 2009-3-1 19:42:00

处理那样的数据,可能还是C或者Basic这些软件更容易。

好好的stata的程序主要是来做统计,现在变成了数据的处理。

悲哀啊!

9
arlionn 在职认证  发表于 2009-3-2 10:45:00
以下是引用蓝色在2009-3-1 19:42:00的发言:

处理那样的数据,可能还是C或者Basic这些软件更容易。

好好的stata的程序主要是来做统计,现在变成了数据的处理。

悲哀啊!

不太赞同这个观点,呵呵。

stata的一个强项就是数据处理,上面的工作虽然看起来复杂些,其实思路很简单。

既然用stata了,就要表现出专业水准,要用它解决所有能解决的问题。

 

[em05]

10
蓝色 发表于 2009-3-2 10:53:00

哈哈,我当然知道stata的数据处理功能

但是现在大家如果太专注那样处理整理数据,我觉得有点偏了

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

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