上市企业摘戴帽数据处理

Reads: 909 Edit

1 问题描述:

在进行企业ST影响因素分析时,通常需要分年度的企业摘戴帽数据。但是从Wind数据库导出的数据不是分年度的,无法直接使用!

例如第2行,企业证券代码为600145,导出数据的时刻,该企业为*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

2 处理步骤

1 打开ST企业的Excel数据,并进行复制(不要复制第一行的变量名称)。

2 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")

}

3 R脚本运行完后,在命令行输入:data,即可得到处理结果

> data
        [,1] [,2] [,3]
   [1,]    1    1    1
   [2,]    0    1    1
   [3,]    0    1    1
   [4,]    1    1    1
   [5,]    1    1    1
   [6,]    0    1    1
   [7,]    0    0    1
   [8,]    0    0    0
   [9,]    0    0    0
  [10,]    1    1    1
  [11,]    0    0    0
  [12,]    0    0    0
  [13,]    0    0    0
  [14,]    1    1    1
  [15,]    0    0    0
  [16,]    0    1    1
  [17,]    0    0    0
  [18,]    0    1    1
  [19,]    0    1    1
  [20,]    0    1    1
  [21,]    0    0    0
  [22,]    0    0    0
  [23,]    0    0    0
  [24,]    1    1    1
  [25,]    0    1    1
  [26,]    0    1    1
  [27,]    0    1    1
  [28,]    0    1    1
  [29,]    0    0    1
  [30,]    1    1    1

说明:其中,[2, ]行的0,1,1表示该企业2018年不是ST企业,2019年和2020年是ST企业。



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


Comments

Make a comment