在进行企业ST影响因素分析时,通常需要分年度的企业摘戴帽数据。但是从Wind数据库导出的数据不是分年度的。如下所示:
例如第2行,企业证券代码为600145,导出数据的时刻,该企业为*ST,但是该企业连续年份是否是*ST企业的数据则没有直接给出。第3列出了该企业摘戴帽的时间,即2010年5月4日首次*ST;2011年10月28日由*ST变ST,2012年8月29日去ST,2014年5月5日再次*ST。根据此信息,我们可以判断出,证券代码为600145的企业,2010年至2020年连续年份的ST数据(假设不区分*ST和ST):(2010,是)、(2011,是)、(2012,否)、(2013,否)、(2014,是)、(2015,是)、(2016,是)、(2017,是)、(2018,是)、(2019,是)、(2020,是)
这样手动去处理企业年度ST数据非常麻烦,且容易出错!所以我们可以采用R语言,用编程的方式对数据进行批量处理。处理的思路是:1.先把数据读入R软件;2.将字符串进行拆分;3.对于每个年度如果企业是ST则为1,如果不是ST则为0.
-
以下为R语言的代码(假设需要2018至2020年3年的数据):
firmData=read.table('clipboard',sep = "&") install.packages("hash") library(hash) len=length(firmData$V1) data=matrix(data=NA, nrow = len, ncol = 3) for (i in 1:len){ strs=strsplit(firmData$V1[i],"[,:]")[[1]] for(m in 1:length(strs)){ strs[m]=trimws(strs[m]) } firstST=as.numeric(substr(strs[length(strs)],1,4)) temp=hash('2018'=0,'2019'=0,'2020'=0) temp[firstST]=1 flag=TRUE if(length(strs)<=2){ for(j in firstST:2021){ temp[j]=1 } } else{ for(j in (length(strs)/2-1):1){ year=as.numeric(substr(strs[2*j],1,4)) year if (substr(strs[2*j-1],1,1)=="去" & flag==TRUE){ temp[year]=0 if(year-1>=firstST+1){ for (k in firstST+1:year-1){ temp[k]=1 } } flag=FALSE firstST=year } if (substr(strs[2*j-1],1,1)!="去" & flag==FALSE){ temp[year]=1 if(year-1>=firstST+1){ for (k in firstST+1:year-1){ temp[k]=0 } } flag=TRUE firstST=year } if (substr(strs[2*j-1],1,1)!="去" & flag==TRUE){ temp[year]=1 if(year-1>=firstST+1){ for (k in firstST+1:year-1){ temp[k]=1 } } flag=TRUE firstST=year } } if(flag==TRUE){ for(j in firstST:2021){ temp[j]=1 } } if(flag==FALSE){ for(j in firstST:2021){ temp[j]=0 } } } data[i,]=c(temp$"2018", temp$"2019", temp$"2020") } data
R脚本运行完后,在命令行输入:data
,即可得到处理结果
其中,[2,1]行的0,1,1表示该企业2018年不是ST企业,2019年和2020年是ST企业。