楼主: flying--smile
43458 44

[数据管理求助] 批量winsorize多个变量 [推广有奖]

  • 0关注
  • 0粉丝

硕士生

85%

还不是VIP/贵宾

-

威望
0
论坛币
15 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1313 点
帖子
85
精华
0
在线时间
295 小时
注册时间
2009-9-19
最后登录
2015-5-17

楼主
flying--smile 发表于 2011-4-8 16:44:58 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
请问在stata中可以一次对多个变量进行winsorize处理吗?比如winsor  var1 var2 var3 var4, generate(v1 v2 v3 v4) p(0.01)
谢谢各位前辈!
二维码

扫码加我 拉你入群

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

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

关键词:Winsorize winsor 多个变量 wins SOR Winsorize

回帖推荐

sungmoo 发表于12楼  查看完整内容

forv i=1/4{ cumul var`i',g(p) replace p=p*100 su var`i' if p>=1&p=1&p

沙发
zkfu41 发表于 2011-4-8 17:38:32
到网上下载winsorizeJ.ado即可

藤椅
voodoo 发表于 2011-4-8 21:16:20
zkfu41 发表于 2011-4-8 17:38
到网上下载winsorizeJ.ado即可
这么隐秘的命令你都能找出来,实在是高!

只可惜没有help文档,只好viewsource winsorizeJ.ado了。
巫毒上传,必属佳品!
坛友下载,三思后行!

板凳
arlionn 在职认证  发表于 2011-4-10 10:26:57
2011-05-06 修改:将 vv(两个v) 修改为 xx。

较为原始的方法:

*-主要变量 winsor 处理
local xx "acc sale Lsale Dsale LDsale cfo Dinv prod disexp PPE DAR"
   foreach v of varlist `xx'{
     local a: var lab `v'
         winsor `v', p(0.01) gen(`v'_x)
         drop `v'
         rename `v'_x `v'
         label var `v' "`a'"
   }

报纸
zkfu41 发表于 2011-4-10 11:17:52
3# voodoo
winsorizeJ操作也很简单:
winsorizeJ x1 x2 x3,suffix(w)
即可,这样会生成三个新变量,x1w x2w x3w,而且默认的是上下1%winsorize。如果要修改分位点,则写成如下格式
winsorizeJ x1 x2 x3,suffix(w) cuts(5 95)
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
jzhyue + 1 + 1 + 1 好的意见建议

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

地板
voodoo 发表于 2011-4-10 18:38:00
arlionn 发表于 2011-4-10 10:26
较为原始的方法:

*-主要变量 winsor 处理
local vv "acc sale Lsale Dsale LDsale cfo Dinv prod disexp PPE DAR"
   foreach v of varlist `vv'{
     local a: var lab `v'
         winsor `v', p(0.01) gen(`v'_x)
         drop `v'
         rename `v'_x `v'
         label var `v' "`a'"
   }
这个方法循序渐进,更值得大家学习借鉴——毕竟绝大多数的命令并不会像winsor那样正好有一个批量处理的winsorizeJ和它对应。
当然我不太赞成在语句中随意用“drop `v'”类似这样危险的操作。除非你已经养成良好的数据处理习惯,否则数据存盘(save, replace)后会导致你原来变量部分初始信息的灭失!直接生成新变量并不会给你以下工作带来太大的麻烦。
巫毒上传,必属佳品!
坛友下载,三思后行!

7
flying--smile 发表于 2011-5-3 13:07:27
谢谢楼上各位!

8
flying--smile 发表于 2011-5-3 13:15:30
十分感谢!按您的方法已经找到啦~ 2# zkfu41

9
flying--smile 发表于 2011-5-3 13:31:47
版主指点受宠若惊!不过我是菜鸟一只,不太懂,按照您给出的命令照葫芦画瓢贴在stata里,把 "acc sale Lsale Dsale LDsale cfo Dinv prod disexp PPE DAR"改成自己的变量名,得到结果“0 values to be insorized”,不知是什么地方出了问题,是前面那个vv吗?vv是什么意思啊,要改成我的dta文件名吗(我试了也不行),还是得先建一个varlist名?不好意思啊,我实在不懂,望版主不吝解释啊,谢谢您啦!
4# arlionn

10
arlionn 在职认证  发表于 2011-5-4 09:09:03
voodoo 发表于 2011-4-10 18:38
arlionn 发表于 2011-4-10 10:26
较为原始的方法:

*-主要变量 winsor 处理
local vv "acc sale Lsale Dsale LDsale cfo Dinv prod disexp PPE DAR"
   foreach v of varlist `vv'{
     local a: var lab `v'
         winsor `v', p(0.01) gen(`v'_x)
         drop `v'
         rename `v'_x `v'
         label var `v' "`a'"
   }
这个方法循序渐进,更值得大家学习借鉴——毕竟绝大多数的命令并不会像winsor那样正好有一个批量处理的winsorizeJ和它对应。
当然我不太赞成在语句中随意用“drop `v'”类似这样危险的操作。除非你已经养成良好的数据处理习惯,否则数据存盘(save, replace)后会导致你原来变量部分初始信息的灭失!直接生成新变量并不会给你以下工作带来太大的麻烦。
我的每个 do 文档开头第一句都是
use xxx.dta, clear
因此,紫色部分的担忧完全不必要。

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

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