楼主: wyc187
623 0

[编程问题求助] 求把这段 stata 代码改为 r 语言代码 [推广有奖]

  • 0关注
  • 0粉丝

学前班

70%

还不是VIP/贵宾

-

威望
0
论坛币
10 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
76 点
帖子
4
精华
0
在线时间
0 小时
注册时间
2022-3-28
最后登录
2024-4-4

楼主
wyc187 发表于 2024-4-4 18:11:25 来自手机 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

* 打开文件夹所在路径(根据文件存放位置)
cd C:\Users\13910\Desktop\data\机会减持\2022-2007年高管机会主义减持数据
use 日个股回报率文件1990-20230217.dta, clear
keep 证券代码 交易日期 考虑现金红利再投资的日个股回报率
save 日个股回报率文件1990-20230217.dta, replace

use 偿债能力.dta, clear
merge 1:1 code year using 偿债能力.dta, nogen keep(1 3) keepusing(行业代码)  
keep code 证券代码 year 行业代码
order code 证券代码 year 行业代码
save 偿债能力.dta, replace




* 1.初始处理
* 1.1 董监高及相关人员持股变动情况表
import excel 董监高及相关人员持股变动情况表.xlsx, firstrow clear
gen code=real(证券代码)
gen 事件日期=变动日期
gen year=real(substr(事件日期, 1, 4))

* 本文借鉴Gao等(2014)和曾庆生等(2018)的做法,在减持样本中剔除了高管通过大宗交易和协议转让股票的数据。
* 另外,由于股票期权的授予和行权并不完全由高管决定,本文参考Huddart和Ke(2010)的研究,研究样本中也剔除了股权激励实施的数据。
drop if 变动原因=="大宗交易" | 变动原因=="协议转让"  |  变动原因=="股权激励实施"   

* 选择年份
keep if year>=2005 & year<=2022

keep if 变动股份数量<0 &  变动股份数量!=.
keep code 证券代码 year 事件日期 持股变动人姓名 董监高人员姓名 董监高人员职务 变动股份数量 成交均价
save 董监高及相关人员持股变动情况表.dta, replace


* 1.2 事件日期
use 董监高及相关人员持股变动情况表.dta, clear
keep code 证券代码 year 事件日期
duplicates drop code 证券代码 year 事件日期, force
save 事件日期.dta, replace


* 1.3 市场回报率
import excel 综合日市场回报率文件1990-20230217.xlsx, firstrow clear
keep if 综合市场类型==53
save 综合日市场回报率文件1990-20230217.dta, replace


* 1.4 合并数据
use 日个股回报率文件1990-20230217.dta, clear
merge m:1 交易日期 using 综合日市场回报率文件1990-20230217.dta, nogen keep(1 3) keepusing(考虑现金红利再投资的综合日市场回报率流通市值加权平均法)
gen code=real(证券代码)  //生成数值型证券代码“code”
gen year=real(substr(交易日期, 1, 4))  //生成年份变量“year”
keep code 证券代码 year 交易日期 考虑现金红利再投资的日个股回报率 考虑现金红利再投资的综合日市场回报率流通市值加权平均法
save data.dta, replace


* 2.计算过程
* 数据量较大,分年度进行计算
forv year=2006/2022 {

        use 事件日期.dta, clear
        keep if year==`year'
        joinby code using data.dta

        sort 证券代码 事件日期 交易日期
        by 证券代码 事件日期: gen date_num=_n  //将交易日期转化为连续数字

        gen trade_date=date(交易日期,"YMD")
        format trade_date %td  //生成数值型交易日期变量“trade_date”
        gen event_date=date(事件日期,"YMD")
        format event_date %td  //生成数值型事件日期变量“event_date”

        gen 间隔时间=trade_date-event_date
        replace 间隔时间=. if 间隔时间<0  //剔除 交易日期<事件日期 的数据
       
        * 与交易日期相隔最近的事件日期
        egen min_dif = min(间隔时间),  by(code even
二维码

扫码加我 拉你入群

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

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

关键词:Stata tata replace Desktop SUBSTR

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

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