楼主: bluewuma
47736 25

[数据管理求助] 如何让第一行的数据变量成为成为变量名 [推广有奖]

11
bluewuma 发表于 2014-8-25 11:40:37
crystaling 发表于 2014-8-22 13:05
你用insheet 后面跟上自己拟定的变量名就行了,那种查找替换的方法太麻烦,代码写得更长
关键我不止这一张表,而是30多张表,每张表的省份顺讯不一样,所以只能查找替换,做好id后,好merge

12
liuxb 发表于 2014-8-26 14:18:25
假如“数据1.jpg”格式,尝试以下程序看看是否可以。

local place "新疆 宁夏 青海"
foreach np of local place {
  foreach var of varlist v1-v32 {
    if strpos(`var'[1],"`np'")>0 {
      rename `var' V`np'  
    }
  }
}

13
bluewuma 发表于 2014-8-29 16:09:50
liuxb 发表于 2014-8-26 14:18
假如“数据1.jpg”格式,尝试以下程序看看是否可以。

local place "新疆 宁夏 青海"
这个运行完,没反应啊,anyway,那个lookfor还是给了启发,已经加分了
能解释一下,你这个循环吗,感谢!

14
bluewuma 发表于 2014-8-29 16:14:07
liuxb 发表于 2014-8-26 14:18
假如“数据1.jpg”格式,尝试以下程序看看是否可以。

local place "新疆 宁夏 青海"
cd "C:\Users\wzx\Desktop\增值税与消费"
clear all
insheet using "C:\Users\wzx\Desktop\增值税与消费\data\平均工资(季).csv", names

gen wang = 100
foreach varr in 新疆 宁夏 青海 甘肃 陕西 西藏 云南 贵州 四川 重庆 海南 广西 广东 湖南 湖北 河南 山东 江西 福建 安徽 浙江 江苏 上海 黑龙江 吉林 辽宁 内蒙古 山西 河北 天津 北京{
lookfor `varr'
replace wang = wang + 1
di wang
local back = wang
di `back'
local ccpd = r(varlist)
rename  `ccpd' v`back'
}

keep if strmatch(v1,"*-12*")
destring v1, replace ignore("-")

forvalues i=2000/2013 {
replace v1=`i' if v1== `i'12
}

rename v1 year
reshape long v, i(year) j(id)
drop wang
sort id year
rename v wage
destring wage, replace ignore(",")
save wage, replace

15
bluewuma 发表于 2014-8-29 16:15:39
liuxb 发表于 2014-8-26 14:18
假如“数据1.jpg”格式,尝试以下程序看看是否可以。

local place "新疆 宁夏 青海"
我主要是想将这个表整理好,好与其他变量表merge成面板数据,感觉我的程序太繁琐,不知道有没有简洁的办法

不过还是解决了

16
liuxb 发表于 2014-9-1 12:54:08
我的程序在我的计算机上运行结果是正确的。

17
voodoo 发表于 2014-9-12 15:13:54
数据有规律,就比较容易解决。试试:
  1. import excel 平均工资(季).xls, clear
  2. foreach v of varlist _all {
  3.         replace `v' = substr(`v', 1, strpos(`v', ":")-1) in 1  // 仅保留省名
  4.         if !missing(`v'[1]) {  // 第1行非空,则...
  5.                 rename `v' V`=`v'[1]'
  6.         }
  7. }
  8. drop in 1/2
  9. drop in -2/L
  10. // 完成!

  11. // 以下为进一步的数据处理
  12. gen date = date(A, "DMY")
  13. format date %td
  14. order date, before(A)
  15. drop A
  16. foreach v of varlist V* {
  17.         destring `v', replace
  18. }
复制代码
已有 4 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
atopin + 2 + 1 + 1 + 1 精彩帖子
Stakiny + 2 + 2 + 2 精彩帖子
wb103 + 1 + 1 + 1 + 1 非常有启发
SpencerMeng + 10 + 1 + 1 + 1 精彩帖子

总评分: 论坛币 + 13  学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

18
onroad24 发表于 2014-9-14 16:36:00
你可以直接删除第一行数据
建议这样做:
网论坛里面下载 stata12  然后把数据从excel里面黏贴进 stata,会挑出提示窗口,有两个选择项,你各个试下  反正点鼠标又点不坏

19
wb103 在职认证  发表于 2014-11-24 12:20:39
voodoo 发表于 2014-9-12 15:13
数据有规律,就比较容易解决。试试:
您的这个代码很好,
我有个疑问想请教您!
我的数据更简单,第一行数据是英文的变量名,用以下代码完成命名:
foreach v of varlist _all {
        rename `v' `=`v'[1]'
}
drop in 1

我想请问您为什么rename语句要写成rename `v' `=`v'[1]'
简单写成rename `v' `v'[1]为何不行

请指教!

20
mark8865 发表于 2015-5-31 12:18:15
谢谢楼上指点,很呕帮助。

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

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