楼主: shanghe1994
9281 10

[数据管理求助] stata中如何用某些单元格文本填补其余空白单元格 [推广有奖]

  • 0关注
  • 0粉丝

已卖:1份资源

高中生

37%

还不是VIP/贵宾

-

威望
0
论坛币
32 个
通用积分
2.0001
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
561 点
帖子
9
精华
0
在线时间
45 小时
注册时间
2014-9-6
最后登录
2025-6-3

楼主
shanghe1994 发表于 2017-5-24 21:01:56 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币


如图或附件所示,主要关注A列和D列,现在D一列部分单元格有国家数据,假如说我想让同一个公司(A列)剩余年份的空白的country单元格用其已有的国家数据填补完整,该如何操作?非常感谢!
比如说对第一个公司梅和口公司而言,已知其2007年有D列数据为“俄罗斯”,2006、2008、2009年D列为空,那么如何让其2006、2008、2009对应的D列单元格也用“俄罗斯”填充呢?
ps:数据是2005-2010年间的,但不一定每个公司都有完整6年的数据。
二维码

扫码加我 拉你入群

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

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

关键词:Stata tata 单元格 如何用 Country

1.png (36.35 KB)

1.png

沙发
黃河泉 在职认证  发表于 2017-5-25 08:03:45
试试
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input str12 name float year str10 country
  4. "梅河口" 2006 "."        
  5. "梅河口" 2007 "俄罗斯"
  6. "梅河口" 2008 "."        
  7. "梅河口" 2009 "."        
  8. "大连"    2005 "."        
  9. "大连"    2006 "."        
  10. "大连"    2007 "香港"   
  11. "大连"    2009 "."        
  12. end

  13. gsort name -country
  14. by name: replace country = country[_n-1] if country == "."
  15. sort name year
复制代码

藤椅
shanghe1994 发表于 2017-5-25 19:17:32
黃河泉 发表于 2017-5-25 08:03
试试
非常感谢!例子可以运行
但是如果只复制最后三行到stata中,无法实现对空白单元格的填补  我看了下导入的数据中name 变量类型是str57 ,year是int,country是str28,与你举例中的变量类型有出入,请问是因为这个原因导致失败的吗?
谢谢!

板凳
逍遥梦蝶 发表于 2017-5-25 21:29:06
黃河泉 发表于 2017-5-25 08:03
试试
倒数第二行可用外部命令carryforward,更加简洁
  1. cap ssc install carryforward

  2. gsort name -country
  3. carryforward country, replace
复制代码
已有 1 人评分学术水平 热心指数 收起 理由
precer + 1 + 1 精彩帖子

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

报纸
黃河泉 在职认证  发表于 2017-5-26 06:51:52
shanghe1994 发表于 2017-5-25 19:17
非常感谢!例子可以运行
但是如果只复制最后三行到stata中,无法实现对空白单元格的填补  我看了下导入的 ...
你应该在 Stata 中执行 dataex 将资料印出,我才能用语你完全一样之资料!

地板
黃河泉 在职认证  发表于 2017-5-26 07:00:56
逍遥梦蝶 发表于 2017-5-25 21:29
倒数第二行可用外部命令carryforward,更加简洁
谢谢这个建议。我试了一下,似乎不 work,我看了一下 help,猜测其只能适用于 numerical values 而不是这里的文字!

7
逍遥梦蝶 发表于 2017-5-26 16:42:05
黃河泉 发表于 2017-5-26 07:00
谢谢这个建议。我试了一下,似乎不 work,我看了一下 help,猜测其只能适用于 numerical values 而不是这 ...
可能是因为黄老师您的例子里country的missing value用了句号,句号最为字符型取值,carryforward没有将其识别为missing value,我下面的命令是可行的,您可以试试
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input str12 name float year str10 country
  4. "MHK" 2006 ""        
  5. "MHK" 2007 "Russia"
  6. "MHK" 2008 ""        
  7. "MHK" 2009 ""        
  8. "DL"    2005 ""        
  9. "DL"    2006 ""        
  10. "DL"    2007 "HK"   
  11. "DL"    2009 ""        
  12. end
  13. list

  14. gsort name -country
  15. list

  16. carryforward country, replace
  17. list
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
黃河泉 + 3 + 3 + 3 精彩帖子

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

8
黃河泉 在职认证  发表于 2017-5-26 17:10:08
逍遥梦蝶 发表于 2017-5-26 16:42
可能是因为黄老师您的例子里country的missing value用了句号,句号最为字符型取值,carryforward没有将其 ...
的确如你所说,谢谢(只是不知道为何 missing values 不可以执行)!

9
逍遥梦蝶 发表于 2017-5-26 17:47:51
黃河泉 发表于 2017-5-26 17:10
的确如你所说,谢谢(只是不知道为何 missing values 不可以执行)!
string variable的missing value是一个空串 ""
英文句点 . 是用来表示 numeric variable missing value最常用的一个记号
但是在string variable中,"."并不是missing value,它有一个取值,就是这个点。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
黃河泉 + 3 + 3 + 3 观点有启发

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

10
刚刚好学习好 在职认证  发表于 2022-6-1 10:57:17
这个代码可以填充这个时间之后的数据,请问如果要填充前面时间的数据如何操作呢

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

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