ST企业截面数据处理为年度数据

admin / 博文 / ... / Reads: 2347

在进行企业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.

bw-20

  • 以下为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企业。

bw-21



获取案例数据,请关注微信公众号并回复:bw_dt2

Comments

Make a comment

Author: admin

Publish at: ...

关注公众号: