楼主: 十步天下
3524 17

[其他] 100 论坛币求助一个stata小问题 [推广有奖]

  • 1关注
  • 72粉丝

VIP

已卖:800份资源

学科带头人

34%

还不是VIP/贵宾

-

威望
1
论坛币
65321 个
通用积分
39.5481
学术水平
230 点
热心指数
230 点
信用等级
165 点
经验
40377 点
帖子
1012
精华
2
在线时间
1226 小时
注册时间
2008-5-5
最后登录
2025-11-19

楼主
十步天下 发表于 2011-10-11 20:01:38 |AI写论文
100论坛币
数据:

1   1  2  1
1   2  1  1
2   2  1  1
2   1  2  1
1   1  1  2

问题如下: 我想重新处理该组数据,使得第一个发生变化的数据作为该组数据的所有数据,第一列第一个发生变化的是2 因此该列所有的值都填充为2, 第二列同理为2  第三列同理为1 第四列同理为2,依此类推  变化后数据如下:

2  2  1  2
2  2  1  2
2  2  1  2
2  2  1  2
2  2  1  2

多谢~

最佳答案

herbertzhao 查看完整内容

我要钱我要钱~~~~~~
关键词:Stata tata 论坛币 小问题

沙发
herbertzhao 发表于 2011-10-11 20:01:39
  1. * 找到所有的变化,第一次变化var_n=1,第二次变化var_n=2以此类推。
  2. * 没有变化的时候var_n=.
  3. foreach var of varlist x1 x2 x3 x4 {
  4.         gen `var'_n = _n if `var'!=`var'[_n-1]&_n!=1
  5.         egen `var'_r = rank(`var'_n)
  6.         drop `var'_n
  7. }
  8. * 在此指定要把整列用第几次变化后的值取代,这个例子里我指定了第一次变化
  9. local change_id = 1
  10. foreach var of varlist x1 x2 x3 x4 {
  11.         qui su `var' if `var'_r == `change_id'
  12.         replace `var'==r(mean)
  13. }
复制代码
我要钱我要钱~~~~~~
已有 1 人评分经验 学术水平 热心指数 收起 理由
十步天下 + 100 + 5 + 5 不错,可否更简洁一点?

总评分: 经验 + 100  学术水平 + 5  热心指数 + 5   查看全部评分

藤椅
jzhyue 发表于 2011-10-11 22:42:29
*根据楼主要求,设4个变量为x1-x4
gen n=_n
foreach i of varlist x1-x4{
sort n
gen a=`i'==`i'[1]
sort a n
replace `i'=`i'[1]
drop a
}
drop n
已有 1 人评分经验 学术水平 热心指数 信用等级 收起 理由
十步天下 + 100 + 2 + 2 + 2 观点有启发

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

板凳
dragonlwj 发表于 2011-10-12 04:28:35
jzhyue 发表于 2011-10-11 22:42
clear
input ///
x1 x2 x3 x4
感谢提供。不过挺绕的,有没有更简洁的方法? 我的意思是,如果这个数据库样本量很大,不光找第一个发生变化的值,还会再找第二个变化,第三个变化之类的,能否有更好的计算方法呢?
已有 1 人评分经验 收起 理由
十步天下 + 50 鼓励积极发帖讨论

总评分: 经验 + 50   查看全部评分

报纸
jzhyue 发表于 2011-10-12 11:45:03
不光找第一个发生变化的值,还会再找第二个变化,第三个变化之类的,能否有更好的计算方法呢?
有几个问题:
1."变化"的对照系是什么,是否为第一个值?
2.如果"变化"的对照系发生变化,那么第一个值(或以后的变化值)是否也为不同值?
3.如何存贮这些变化?(楼主的要求是存贮在原数据中,原来的数据以更改,并且只有一个值)
你可以提出具体要求,且提供测试数据.
已有 1 人评分经验 收起 理由
十步天下 + 50 热心帮助其他会员

总评分: 经验 + 50   查看全部评分

地板
蓝色 发表于 2011-10-12 12:29:26
根本不知道到底要做什么?这样做有什么用处?
都是只说半截话。  具体实践中是解决什么问题?

有的时候把整个想做的说清楚,说不定会有更加容易的方法
只说截出一部分解决问题反而和复杂。

7
十步天下 发表于 2011-10-12 16:23:31
jzhyue 发表于 2011-10-12 11:45
有几个问题:
1."变化"的对照系是什么,是否为第一个值?
2.如果"变化"的对照系发生变化,那么第一个值(或 ...
是的, 我想用第一个发生变化的值取代该列所有的值
Some birds can't be caged, Their feathers are just too bright.

8
十步天下 发表于 2011-10-12 16:32:43
蓝色 发表于 2011-10-12 12:29
根本不知道到底要做什么?这样做有什么用处?
都是只说半截话。  具体实践中是解决什么问题?
这是实验经济学的一组实验数据,关于风险态度的,如果想说很清楚的不太容易,所以我举了一个简单的例子,基本原理就是在有风险的情况下投硬币,有20个问题,其中每个问题有两个选择,第一个选择都是选择例如确定的2, 第二个选择是选择不确定的50%的可能性的从0.5 到例如7, 简单说就是fox tversky 风险态度测量表 感觉说到这里已经非常绕了~

原理就是 正常情况下理性参加者应该在两个选择期望之间进行比较,一开始选择选项1(因为期望收益大于选项2),在两者相等的时候选择1(风险厌恶),在后者大于前者的时候选择选项2, 处理的目的在于看参加者什么时候选择发生变化,并且用发生变化的值作为他们的风险态度值。

不知道是不是清楚一点?  总而言之就是用第一个和前面值不一样的值填充该列~

Some birds can't be caged, Their feathers are just too bright.

9
十步天下 发表于 2011-10-12 16:34:34
jzhyue 发表于 2011-10-11 22:42
*根据楼主要求,设4个变量为x1-x4
gen n=_n
foreach i of varlist x1-x4{
好像挺绕的~
Some birds can't be caged, Their feathers are just too bright.

10
sungmoo 发表于 2011-10-12 16:42:14
*以下可以克服正负数杂存的问题(不需要额外手工操作):

foreach v of var _all{
egen `v'`v'=min(cond(sum(`v'!=`v'[_n-1])==2, `v', .))
}
已有 2 人评分经验 学术水平 热心指数 信用等级 收起 理由
十步天下 + 100 + 5 + 5 多谢,只是好像需要手工一个个处理~
jzhyue + 1 + 1 + 1 great idea

总评分: 经验 + 100  学术水平 + 6  热心指数 + 6  信用等级 + 1   查看全部评分

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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-19 11:03