楼主: 皖山一流
18750 12

[学习心得] [STATA数据压缩]你真的会用-compress-吗? [推广有奖]

  • 4关注
  • 13粉丝

讲师

26%

还不是VIP/贵宾

-

威望
0
论坛币
2342 个
通用积分
155.3336
学术水平
73 点
热心指数
80 点
信用等级
54 点
经验
16523 点
帖子
354
精华
0
在线时间
308 小时
注册时间
2013-12-9
最后登录
2021-1-21

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我们知道,将数据导入STATA后,如果觉得数据储存空间有点大,会用-compress-命令进行压缩下。这样基本会搞定。
    可是最近的一次经历让我改变了看法:导入一份125M左右的Excel,后储存为.dta格式,居然有2.3+G -- 匪夷所思吧!
    回到STATA,compress --> save ,依然是那么大!……思索良久…… -des- 查看下, 哇!有三个字符型变量居然是:str2045!!看来应该就是这个原因了,why?经过一阵摸索,发现了原来是有一条记录导入时出现差错一个单元格里放入几乎所有变量的值,too long too long……删除 --> compress --> save , 马上只有200+M了!
    总结:如果发现.dta格式大小异常,不妨尝试查看是不是因为某个字符型变量出现问题
1.des   --> 找出异常长的字符型变量,如:abvar。2.replace abvar=subinstr(abvar," ","",.) --> 消除不必要的空格(多数情况下,空格都是占空间的和无意义的!)
3.-compress-并-des abvar-如果差不多了就到这吧,毕竟时间宝贵!如果还是很异常,如:str1000!那么,继续吧。。。
4.ed abvar --> 肉眼大概估计出正常的、最小的长度为多少合适,如:str30(或者省去这一步,直接跳到下一步)

5.ed abvar if length(abvar) >= 30  --> 哪些作怪的异常记录必会在这里面,通常这一步就可以发现它们了!
6.发现了后,接下来3种处理方法,自己选择吧!
A、修改记录:如果只有少数几个异常记录,直接手动在单元格里改吧,可以避免损失这几条样本(but,谨慎!不可逆。。。)
B、删除:drop if length(abvar)># (#的大小自己设定一个--保证异常的记录删除又不会影响正常的记录即可!)
删除后 --> compress --> OK!  
C、-recast-  如:recast str30 abvar , force (慎用,因为如果30这个数不准确,那么会造成部分记录显示不完全!

then,-compress- --> OK!
详细操作,见代码:
  1. * 主要针对字符型变量的压缩


  2. *=产生仿真数据=
  3. cap drop tsvar     //实验变量
  4. cap drop rfvar
  5. input str200 tsvar
  6.         "Storage "
  7.         "space "
  8.         " of "
  9.         "your "
  10.          "data "
  11.          "is "
  12.          " matter ! "
  13.         " So what can we do ? this is a abnormal entry , because its too long too long ..."    //异常记录!
  14. end
  15. gen rfvar=tsvar    //参照变量
  16. compress  // 自动压缩至最小的、合适的长度 -- tsvar 最后一条记录的长度
  17.           // 这一步是为了&仿真& -- 因为导入数据时stata会自动匹配最合适、最小的str长度
  18. ed
  19. des

  20. * &很明显这么长的变量不是我们想要的 -- 因为将会占用很大储存空间!!!&
  21. * &当你手中有这样的数据时,按照常规的-compress-命令是无法实现压缩的&
  22. * &有人会想到,找出这样的异常记录值,单独处理掉 -- good idea !&
  23. * &First,发现是否有这样异常的记录 ;then,处理!&
  24. * go on !

  25. *=压缩=
  26. *-去除无意义的空格    //多数情况下,空格是不必要的
  27. replace tsvar=subinstr(tsvar," ","",.)     //if you hope to reserve some blanks , you can use -trim- etc ...
  28. compress tsvar
  29. des     // look! --> str62

  30. *-找出异常值,并处理掉-
  31. *异常值,目前我只能凭经验去找,而且肉眼很难去找到的:
  32. *        大致浏览 tsvar -->
  33. *   大概估计出正常的、最长的记录应该会是: str10 -->
  34.         ed if length(tsvar)>=10  // -> found!
  35.         drop in 8
  36.         ed
  37.         * -->
  38.         compress
  39.         des      // look: str7   
  40.         * 压缩完成!!!
  41.         
复制代码

最后附上一个自编的批量删除空格的小命令:-dlblanks- (见代码!)用法:dlblanks     v1  v2  v3 ...  [if]  [in]  , 即可删除字符型变量v1  v2  v3 ...中的所有空格。
  1. *! version 2015年2月16日21:44:11
  2. *! Author : Firsword


  3. *= dlblanks v1 v2 v3 ...  [if] [in]
  4. *= 批量删除变量中的所有空格



  5. cap pro drop dlblanks
  6. pro define dlblanks
  7. version 13.0

  8.   syntax varlist(string) [if] [in]
  9.   
  10.   tokenize `varlist'
  11.   loc n : word count `varlist'
  12.   forval i=1/`n'  {
  13.          replace ``i''=subinstr(``i''," ","",.)  `if' `in'
  14.   }

  15. end
复制代码








二维码

扫码加我 拉你入群

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

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

关键词:compress STATA数据 Press Stata tata STATA compress 压缩 dta 导入

已有 4 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
田子啊 + 1 + 1 + 1 精彩帖子
crystal8832 + 24 + 1 + 1 + 1 精彩帖子
hustchen2012 + 10 + 10 + 1 + 1 + 1 精彩帖子
SpencerMeng + 10 + 1 + 1 + 1 鼓励积极发帖讨论

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

士不可不弘毅,任重而道远~
沙发
georgeshe 发表于 2015-2-3 17:13:13 |只看作者 |坛友微信交流群
推荐用browse,edit有点儿危险
已有 1 人评分论坛币 热心指数 收起 理由
crystal8832 + 5 + 1 鼓励积极发帖讨论

总评分: 论坛币 + 5  热心指数 + 1   查看全部评分

使用道具

藤椅
625928915 学生认证  发表于 2015-2-4 10:18:02 |只看作者 |坛友微信交流群
谢谢楼主分享

使用道具

板凳
皖山一流 学生认证  发表于 2015-2-7 02:21:37 来自手机 |只看作者 |坛友微信交流群
georgeshe 发表于 2015-2-3 17:13
推荐用browse,edit有点儿危险
嗯,灰常有道理,只是习惯,e d按键,咯咯

使用道具

报纸
皖山一流 学生认证  发表于 2015-2-16 22:47:59 |只看作者 |坛友微信交流群
附一个自编的批量删除多个字符型变量的小命令:-dlblanks-

使用道具

地板
tlu8623 发表于 2016-1-28 12:42:05 |只看作者 |坛友微信交流群
这个帖子启发很大

使用道具

7
皖山一流 学生认证  发表于 2016-3-29 20:35:19 |只看作者 |坛友微信交流群

使用道具

8
gwl11818 在职认证  发表于 2016-6-12 15:38:31 |只看作者 |坛友微信交流群
越来越沉迷于其中!

使用道具

9
zabbyy 发表于 2016-10-5 10:53:45 |只看作者 |坛友微信交流群
谢谢楼主分享

使用道具

10
maayunnbiaoo 学生认证  发表于 2016-10-5 12:11:53 |只看作者 |坛友微信交流群
东西不错,收了

使用道具

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

本版微信群
加好友,备注jltj
拉您入交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-24 14:43