之前写过一个草案,这个工作陆陆续续的花了2年的时间,中间做个2次大的调整,现在还是很不完善,包括框架、命名规范等系列问题。
程序的主要内容有:
1、读取资产负债表、利润表、现金流量表。根据事先设置的模板读取,控制报表模式。主要是read.fs函数。
2、求解IC、NOPLAT,这个是我喜欢的报表分析架构,主要是CreateFS函数。
3、对CreateFS生成的报表的分析,这块现在很简单,主要是我自己感兴趣的一些简单指标,主要是AnalysisFS函数。
后续还有牵扯到ROIC细化分析、报表的图形展现(做了IC结构的分析,这块很难,现在在整个财务分析当中我还没有发现关于报表数据展现的合适方式)、拟向DCF、Owner Earnings分析、Greenwald的分析框架等系列工作。
程序代码如下:
</p>
<p>#-----公共参数设定---------------------------------#<br />
opt <- list(dir = "d:/data/Rwd/financialstatement",unit=8,<br />
des = "financial analysis")</p>
<p>#------读取各种报表:负债表、利润表、现金流量表-------------#<br />
read.fs <- function(file="clipboard",type=c("BS","IS","CF")[1],tol=1,unit=8){<br />
tmp <- read.delim(file,header=FALSE,stringsAsFactors=FALSE)<br />
#假定第一行为报表的日期,将第一行转换为日期格式,并保存为reportDate<br />
reportDate <- as.Date(as.character(tmp[1,-1]),format="%Y-%m-%d")<br />
colOrder <- order(reportDate)</p>
<p> tmp <- tmp[,c(1,(colOrder+1))]<br />
reportDate <- reportDate[colOrder]</p>
<p> #st <- paste("select * from fsinfo where type='",type,"' order by id",sep="")<br />
#fsinfo <- dbGetQuery(con,st) </p>
<p> fsinfo <- read.csv(file.path(opt$dir,paste(type,"info.csv",sep="")),<br />
stringsAsFactors=FALSE)</p>
<p> changedgrep <- function(pattern,x,...){<br />
y <- grep(pattern,x,...)<br />
if (length(y)==0)<br />
y <- NA else {<br />
if (length(y)>1)<br />
y <- 10000<br />
}<br />
return(y)<br />
}</p>
<p> index <- sapply(fsinfo$regex,changedgrep,x=tmp[,1],USE.NAMES=FALSE)<br />
#<br />
x <- as.matrix(tmp[index,-1])<br />
#coln <- colnames(x)<br />
coln <- paste("R",reportDate,sep="")<br />
dims <- dim(x)<br />
x <- as.numeric(gsub(",|--","",x))<br />
dim(x) <- dims<br />
colnames(x) <- coln<br />
rownames(x) <- fsinfo$items<br />
x[is.na(x)] <- 0</p>
<p> #资产负债表的检查<br />
.bscheck <- function(){<br />
group <- fsinfo$group<br />
#流动资产<br />
y <- abs(colSums(x[group=="流动资产",])-x[group=="流动资产-合计",])>tol<br />
if (any(y)){<br />
cat("流动资产合计有误","\n")<br />
cat(as.character(reportDate[y]),"\n")<br />
} else x[group=="流动资产-合计",]=colSums(x[group=="流动资产",])<br />
#非流动资产<br />
y <- abs(colSums(x[group=="非流动资产",])-x[group=="非流动资产-合计",])>tol<br />
if (any(y)){<br />
cat("非流动资产合计有误","\n")<br />
cat(as.character(reportDate[y]),"\n")<br />
} else x[group=="非流动资产-合计",]=colSums(x[group=="非流动资产",])<br />
#左侧资产总计<br />
y <- abs(x[group=="流动资产-合计",]+x[group=="非流动资产-合计",]-x[group=="资产总计",])>tol<br />
if (any(y)){<br />
cat("左侧资产总计有误","\n")<br />
cat(as.character(reportDate[y]),"\n")<br />
} else x[group=="资产总计",]=x[group=="流动资产-合计",]+x[group=="非流动资产-合计",]</p>
<p> #流动负债<br />
y <- abs(colSums(x[group=="流动负债",])-x[group=="流动负债-合计",])>tol<br />
if (any(y)){<br />
cat("流动负债有误","\n")<br />
cat(as.character(reportDate[y]),"\n")<br />
} else x[group=="流动负债-合计",]=colSums(x[group=="流动负债",])</p>
<p> #非流动负债<br />
y <- abs(colSums(x[group=="非流动负债",])-x[group=="非流动负债-合计",])>tol<br />
if (any(y)){<br />
cat("非流动负债有误","\n")<br />
cat(as.character(reportDate[y]),"\n")<br />
} else x[group=="非流动负债-合计",]=colSums(x[group=="非流动负债",])</p>
<p> #负债合计<br />
y <- abs(x[group=="流动负债-合计",]+x[group=="非流动负债-合计",]-x[group=="负债合计",])>tol<br />
if (any(y)){<br />
cat("负债合计","\n")<br />
cat(as.character(reportDate[y]),"\n")<br />
} else x[group=="负债合计",]=x[group=="流动负债-合计",]+x[group=="非流动负债-合计",]</p>
<p> #所有者权益-母公司<br />
y <- abs(colSums(x[group=="所有者权益",])-x[group=="所有者权益-母公司",])>tol<br />
if (any(y)){<br />
cat("所有者权益-母公司有误","\n")<br />
cat(as.character(reportDate[y]),"\n")<br />
} else x[group=="所有者权益-母公司",]=colSums(x[group=="所有者权益",])</p>
<p> #所有者权益合计<br />
y <- abs(x[group=="所有者权益-少数",]+x[group=="所有者权益-母公司",]-x[group=="所有者权益-合计",])>tol<br />
if (any(y)){<br />
cat("所有者权益合计有误","\n")<br />
cat(as.character(reportDate[y]),"\n")<br />
} else x[group=="所有者权益-合计",]=x[group=="所有者权益-少数",]+x[group=="所有者权益-母公司",]</p>
<p> #负债和所有者权益<br />
y <- abs(x[group=="负债合计",]+x[group=="所有者权益-合计",]-x[group=="负债和所有者权益",])>tol<br />
if (any(y)){<br />
cat("负债和所有者权益有误","\n")<br />
cat(as.character(reportDate[y]),"\n")<br />
} else x[group=="负债和所有者权益",]=x[group=="负债合计",]+x[group=="所有者权益-合计",]</p>
<p> #左右平衡<br />
y <- abs(x[group=="资产总计",]-x[group=="负债和所有者权益",])>tol<br />
if (any(y)){<br />
cat("左右平衡有误","\n")<br />
cat(as.character(reportDate[y]),"\n")<br />
} </p>
<p> }</p>
<p> #利润表的检查<br />
.ischeck <- function(){<br />
group <- fsinfo$group<br />
#营业总收入<br />
y <- abs(x[group=="营业总收入",]-x[group=="营业总收入合计",])>tol<br />
if (any(y)){<br />
cat("营业总收入合计有误","\n")<br />
cat(as.character(reportDate[y]),"\n")<br />
} else x[group=="营业总收入合计",]=x[group=="营业总收入",]</p>
<p> #营业总成本<br />
y <- abs(colSums(x[group=="营业总成本",])-x[group=="营业总成本合计",])>tol<br />
if (any(y)){<br />
cat("营业总成本合计有误","\n")<br />
cat(as.character(reportDate[y]),"\n")<br />
} else x[group=="营业总成本合计",]=colSums(x[group=="营业总成本",])</p>
<p> #营业利润<br />
y <- abs(x[group=="营业总收入合计",]-x[group=="营业总成本合计",]+colSums(x[group=="其他经营收益",])-x[group=="营业利润",])>tol<br />
if (any(y)){<br />
cat("营业利润合计有误","\n")<br />
cat(as.character(reportDate[y]),"\n")<br />
} else x[group=="营业利润",]=x[group=="营业总收入合计",]-x[group=="营业总成本合计",]+colSums(x[group=="其他经营收益",])</p>
<p> #利润总额<br />
y <- abs(x[group=="营业利润",]+x[group=="营业外收入",]-x[group=="营业外支出",]-x[group=="利润总额",])>tol<br />
if (any(y)){<br />
cat("利润总额有误","\n")<br />
cat(as.character(reportDate[y]),"\n")<br />
} else x[group=="利润总额",]=x[group=="营业利润",]+x[group=="营业外收入",]-x[group=="营业外支出",]</p>
<p> #净利润<br />
y <- abs(x[group=="利润总额",]-x[group=="所得税",]-x[group=="净利润",])>tol<br />
if (any(y)){<br />
cat("净利润有误","\n")<br />
cat(as.character(reportDate[y]),"\n")<br />
} else x[group=="净利润",]=x[group=="利润总额",]-x[group=="所得税",]</p>
<p> #归属于母公司所有者的净利润<br />
y <- abs(x[group=="净利润",]-x[group=="少数股东损益",]-x[group=="归属于母公司所有者的净利润",])>tol<br />
if (any(y)){<br />
cat("归属于母公司所有者的净利润有误","\n")<br />
cat(as.character(reportDate[y]),"\n")<br />
} else x[group=="归属于母公司所有者的净利润",]=x[group=="净利润",]-x[group=="少数股东损益",]</p>
<p> }<br />
#现金流量表的检查<br />
.cfcheck <- function(){<br />
group <- fsinfo$group<br />
#--------------------------经营活动------------------------------------#<br />
#经营活动现金流入<br />
y <- abs(colSums(x[group=="经营活动现金流入",])-x[group=="经营活动现金流入小计",])>tol<br />
if (any(y)){<br />
cat("经营活动现金流入小计有误","\n")<br />
cat(as.character(reportDate[y]),"\n")<br />
} else x[group=="经营活动现金流入小计",]=colSums(x[group=="经营活动现金流入",])</p>
<p> #经营活动现金流出小计<br />
y <- abs(colSums(x[group=="经营活动现金流出",])-x[group=="经营活动现金流出小计",])>tol<br />
if (any(y)){<br />
cat("经营活动现金流出小计有误","\n")<br />
cat(as.character(reportDate[y]),"\n")<br />
} else x[group=="经营活动现金流出小计",]=colSums(x[group=="经营活动现金流出",])</p>
<p> #经营活动产生的现金流量净额<br />
y <- abs(x[group=="经营活动现金流入小计",]-x[group=="经营活动现金流出小计",]-x[group=="经营活动产生的现金流量净额",])>tol<br />
if (any(y)){<br />
cat("经营活动产生的现金流量净额有误","\n")<br />
cat(as.character(reportDate[y]),"\n")<br />
} else x[group=="经营活动产生的现金流量净额",]=x[group=="经营活动现金流入小计",]-x[group=="经营活动现金流出小计",]<br />
#--------------------------投资活动------------------------------------#<br />
#投资活动现金流入小计<br />
y <- abs(colSums(x[group=="投资活动现金流入",])-x[group=="投资活动现金流入小计",])>tol<br />
if (any(y)){<br />
cat("投资活动现金流入小计有误","\n")<br />
cat(as.character(reportDate[y]),"\n")<br />
} else x[group=="投资活动现金流入小计",]=colSums(x[group=="投资活动现金流入",])</p>
<p> #投资活动现金流出小计<br />
y <- abs(colSums(x[group=="投资活动现金流出",])-x[group=="投资活动现金流出小计",])>tol<br />
if (any(y)){<br />
cat("投资活动现金流出小计有误","\n")<br />
cat(as.character(reportDate[y]),"\n")<br />
} else x[group=="投资活动现金流出小计",]=colSums(x[group=="投资活动现金流出",])</p>
<p> #投资活动产生的现金流量净额<br />
y <- abs(x[group=="投资活动现金流入小计",]-x[group=="投资活动现金流出小计",]-x[group=="投资活动产生的现金流量净额",])>tol<br />
if (any(y)){<br />
cat("经营活动产生的现金流量净额有误","\n")<br />
cat(as.character(reportDate[y]),"\n")<br />
} else x[group=="投资活动产生的现金流量净额",]=x[group=="投资活动现金流入小计",]-x[group=="投资活动现金流出小计",]</p>
<p> #--------------------------筹资活动------------------------------------#<br />
#筹资活动现金流入小计<br />
y <- abs(colSums(x[group=="筹资活动现金流入",])-x[group=="筹资活动现金流入小计",])>tol<br />
if (any(y)){<br />
cat("筹资活动现金流入小计有误","\n")<br />
cat(as.character(reportDate[y]),"\n")<br />
} else x[group=="筹资活动现金流入小计",]=colSums(x[group=="筹资活动现金流入",])</p>
<p> #筹资活动现金流出小计<br />
y <- abs(colSums(x[group=="筹资活动现金流出",])-x[group=="筹资活动现金流出小计",])>tol<br />
if (any(y)){<br />
cat("筹资活动现金流出小计有误","\n")<br />
cat(as.character(reportDate[y]),"\n")<br />
} else x[group=="筹资活动现金流出小计",]=colSums(x[group=="筹资活动现金流出",])<br />
#筹资活动产生的现金流量净额<br />
y <- abs(x[group=="筹资活动现金流入小计",]-x[group=="筹资活动现金流出小计",]-x[group=="筹资活动产生的现金流量净额",])>tol<br />
if (any(y)){<br />
cat("筹资活动产生的现金流量净额有误","\n")<br />
cat(as.character(reportDate[y]),"\n")<br />
} else x[group=="筹资活动产生的现金流量净额",]=x[group=="筹资活动现金流入小计",]-x[group=="筹资活动现金流出小计",]</p>
<p> #------------------------------------------------------#<br />
#现金及现金等价物净增加额<br />
y <- abs(x[group=="经营活动产生的现金流量净额",]+x[group=="投资活动产生的现金流量净额",]+x[group=="筹资活动产生的现金流量净额",]+<br />
x[group=="汇率变动对现金及现金等价物的影响",]-x[group=="现金及现金等价物净增加额",])>tol<br />
if (any(y)){<br />
cat("现金及现金等价物净增加额有误","\n")<br />
cat(as.character(reportDate[y]),"\n")<br />
} else {x[group=="现金及现金等价物净增加额",]=x[group=="经营活动产生的现金流量净额",]+x[group=="投资活动产生的现金流量净额",]+<br />
x[group=="筹资活动产生的现金流量净额",]+x[group=="汇率变动对现金及现金等价物的影响",]}</p>
<p> #期末现金及现金等价物余额<br />
y <- abs(x[group=="现金及现金等价物净增加额",]+x[group=="期初现金及现金等价物余额",]-x[group=="期末现金及现金等价物余额",])>tol<br />
if (any(y)){<br />
cat("期末现金及现金等价物余额有误","\n")<br />
cat(as.character(reportDate[y]),"\n")<br />
} else x[group=="期末现金及现金等价物余额",]=x[group=="现金及现金等价物净增加额",]+x[group=="期初现金及现金等价物余额",]</p>
<p> #--------------------------补充------------------------------------#<br />
#补充<br />
y <- abs(colSums(x[group=="补充",])-x[group=="经营活动产生的现金流量净额2",])>tol<br />
if (any(y)){<br />
cat("补充有误","\n")<br />
cat(as.character(reportDate[y]),"\n")<br />
} else x[group=="经营活动产生的现金流量净额2",]=colSums(x[group=="补充",])</p>
<p> #经营活动产生的现金流量净额 2者比较<br />
y <- abs(x[group=="经营活动产生的现金流量净额",]-x[group=="经营活动产生的现金流量净额2",])>tol<br />
if (any(y)){<br />
cat("经营活动产生的现金流量净额2者不同","\n")<br />
cat(as.character(reportDate[y]),"\n")<br />
} </p>
<p> }</p>
<p> switch(type,BS=.bscheck(),IS=.ischeck(),CF=.cfcheck())</p>
<p> colnames(x) <- NULL<br />
#将报表数据转换成 相应的单位.<br />
x <- x/10^(unit)<br />
output <- list(date=reportDate,main=x)<br />
#attr(output, "type") <- type<br />
output<br />
} </p>
<p>#内部函数,将bs、is、cf三张表合成在一起<br />
.fs <- function(bs,is,cf){</p>
<p> if (identical(bs$date,is$date)&identical(bs$date,cf$date)) {<br />
x <- list(date=bs$date,bs=bs$main,is=is$main,cf=cf$main)<br />
#attr(x, "class") <- "fs"<br />
x<br />
} else {<br />
stop("各个报表的时间不一致,请检查。")<br />
}</p>
<p>} #fs=.fs(bs,is,cf)</p>
<p>#求解IC<br />
.ic <- function(fs,percent=0.10,tol=1e-4){<br />
MData <- fs$bs<br />
fsinfo <- read.csv(file.path(opt$dir,"ICinfo.csv"),<br />
stringsAsFactors=FALSE)<br />
index <- pmatch(fsinfo$regex,rownames(MData))<br />
x <- MData[index,]<br />
rownames(x) <- fsinfo$items<br />
x[is.na(x)] <- 0</p>
<p> #假定经营现金为营业收的percent,percent初始值=10%,<br />
zong <- x["经营资金",]<br />
xuyao <- fs$is["营业收入",]*percent<br />
jiading <- xuyao*(xuyao<=zong)+zong*(xuyao>zong)<br />
x["经营资金",] <- jiading<br />
x["富裕资金",] <- (zong-jiading)</p>
<p> #------------------------------填充IC表的空白数据及核对数据</p>
<p> group <- fsinfo$group<br />
reportDate <- fs$date<br />
#--------</p>
<p> x["流动性经营资产合计",]=colSums(x[group=="流动性经营资产",])<br />
x["流动性经营负债合计",]=colSums(x[group=="流动性经营负债",])<br />
x["流动性经营资金合计",]=x[group=="流动性经营资产合计",]-x[group=="流动性经营负债合计",]<br />
x[group=="非流动性经营资产合计",]=colSums(x[group=="非流动性经营资产",])<br />
x[group=="投入资本1",]=x[group=="流动性经营资金合计",]+x[group=="非流动性经营资产合计",]<br />
x[group=="投入资本2",]=x[group=="投入资本1",]+x[group=="商誉",]<br />
x[group=="非经营资产合计",]=colSums(x[group=="非经营资产",])<br />
x[group=="总投入资金合计1",]=x[group=="投入资本2",]+x[group=="非经营资产合计",]<br />
x[group=="金融负债合计",]=colSums(x[group=="金融负债",])<br />
#递延所得税负债合计<br />
x["递延所得税负债合计",] <- x["递延所得税负债",]-x["递延所得税资产",]<br />
#所有者权益-母公司<br />
y <- abs(colSums(x[group=="所有者权益",])-x[group=="所有者权益-母公司",])>tol<br />
if (any(y)){<br />
cat("所有者权益-母公司有误","\n")<br />
cat(as.character(reportDate[y]),"\n")<br />
} else x[group=="所有者权益-母公司",]=colSums(x[group=="所有者权益",])<br />
#所有者权益合计<br />
y <- abs(x[group=="所有者权益-母公司",]+x[group=="所有者权益-少数",]-x[group=="所有者权益合计",])>tol<br />
if (any(y)){<br />
cat("所有者权益-母公司有误","\n")<br />
cat(as.character(reportDate[y]),"\n")<br />
} else x[group=="所有者权益合计",]=x[group=="所有者权益-母公司",]+x[group=="所有者权益-少数",]</p>
<p> x[group=="总投入资金合计2",]=x[group=="金融负债合计",]+x[group=="所有者权益合计",]+<br />
colSums(x[group=="所有者权益等价物",])<br />
#总投入资金合计1、2比较<br />
y <- abs(x[group=="总投入资金合计2",]-x[group=="总投入资金合计1",])>tol<br />
if (any(y)){<br />
cat("总投入资金合计1、2比较有误","\n")<br />
cat(as.character(reportDate[y]),"\n")<br />
}<br />
x<br />
}</p>
<p>.delta <- function(x){<br />
y <- c(NA,diff(x))<br />
y<br />
}</p>
<p>#求解NOPLAT 2011-9-2<br />
.noplat <- function(fs,rate,tol=1e-8){<br />
MData <- fs$is<br />
fsinfo <- read.csv(file.path(opt$dir,"NOPLATinfo.csv"),<br />
stringsAsFactors=FALSE)<br />
index <- pmatch(fsinfo$regex,rownames(MData))<br />
x <- MData[index,]</p>
<p> rownames(x) <- fsinfo$items<br />
x[is.na(x)] <- 0</p>
<p> #--------------------------------------------<br />
group <- fsinfo$group</p>
<p> reportDate <- fs$date<br />
x[group=="EBIT",]=x[group=="营业总收入合计",]-colSums(x[group=="营业成本",])<br />
x[group=="所得税税率",]=rate<br />
x[c("所得税-投资净收益","所得税-汇兑净收益","所得税-营业外收入","所得税-营业外支出","利息税盾"),] <-<br />
MData[c("投资净收益","汇兑净收益","加:营业外收入","减:营业外支出","财务费用"),]*<br />
(matrix(x["所得税税率",],nrow=5,ncol=length(reportDate))*c(-1,-1,-1,1,1))<br />
x["经营税",] <- colSums(x[group=="所得税",])</p>
<p> x["递延所得税减少",] = -(.delta((fs$bs["递延所得税负债",]-fs$bs["递延所得税资产",])))<br />
x["经营现金税",] <- x["经营税",] +x["递延所得税减少",]<br />
x["NOPLAT",] <- x["EBIT",]-x["经营现金税",] </p>
<p> #attr(newTemp, "type") <- "noplat"<br />
x<br />
} #a <- .noplat(fs)</p>
<p>CreateFS <- function(bs,is,cf,percent=0.10,rate){</p>
<p> fs <- .fs(bs,is,cf)<br />
tedic <- .ic(fs,percent=percent)<br />
tednoplat <- .noplat(fs,rate)<br />
output <- list(date=fs$date,ic=tedic,noplat=tednoplat,bs=bs$main,is=is$main,cf=cf$main)<br />
attr(output, "class") <- "fs"<br />
output<br />
}</p>
<p>.center <- function(x){<br />
y <- c(NA,(x[-length(x)]+x[-1])/2)<br />
y<br />
}</p>
<p>.GetNOPLAT2 <- function(fs){<br />
x <- fs$cf["经营活动产生的现金流量净额",]-<br />
(fs$is["加:营业外收入",]-fs$is["减:营业外支出",])*(1-fs$noplat["所得税税率",])+<br />
fs$is["投资净收益",]*fs$noplat["所得税税率",]-<br />
fs$is["汇兑净收益",]*(1-fs$noplat["所得税税率",])-<br />
fs$noplat["利息税盾",]-<br />
fs$cf["存货的减少(增加以“-”号填列)",]-<br />
fs$cf["经营性应收项目的减少(增加以“-”号填列)",]-<br />
fs$cf["经营性应付项目的增加(减少以“-”号填列)",]-<br />
x</p>
<p>}</p>
<p>.GetFCF2 <- function(fs){<br />
x <- fs$cf["经营活动产生的现金流量净额",]-<br />
(fs$is["加:营业外收入",]-fs$is["减:营业外支出",])*(1-fs$noplat["所得税税率",])+<br />
fs$is["投资净收益",]*fs$noplat["所得税税率",]-<br />
fs$is["汇兑净收益",]*(1-fs$noplat["所得税税率",])-<br />
fs$noplat["利息税盾",]+<br />
.delta(fs$bs["其他应收款",])-<br />
.delta(fs$bs["其他应付款",])-<br />
fs$cf["购建固定资产、无形资产和其他长期资产支付的现金",]</p>
<p> x</p>
<p>}<br />
.GetNOPLAT2 <- function(fs){<br />
x <- fs$cf["净利润",]-<br />
(fs$is["加:营业外收入",]-fs$is["减:营业外支出",])*(1-fs$noplat["所得税税率",])+<br />
fs$is["投资净收益",]*fs$noplat["所得税税率",]-<br />
fs$is["汇兑净收益",]*(1-fs$noplat["所得税税率",])-<br />
fs$noplat["利息税盾",]-<br />
fs$cf["存货的减少(增加以“-”号填列)",]-<br />
fs$cf["经营性应收项目的减少(增加以“-”号填列)",]-<br />
fs$cf["经营性应付项目的增加(减少以“-”号填列)",]-<br />
x</p>
<p>}<br />
AnalysisFS <- function(fs,digits=2){<br />
IC1 <- fs$ic["投入资本1",]<br />
IC2 <- fs$ic["投入资本2",]<br />
EBIT <- fs$noplat["EBIT",]<br />
NOPLAT <- fs$noplat["NOPLAT",]<br />
#NOPLAT2 <- .GetNOPLAT2(fs)<br />
FCF <- NOPLAT-.delta(IC2)<br />
FCF2 <- .GetFCF2(fs)<br />
ROICPre <- EBIT/.center(IC2)<br />
ROIC <- NOPLAT/.center(IC2)<br />
#CROIC:Cash Return on Invested Capital<br />
CROIC <- FCF/.center(IC2)<br />
Sales <- fs$noplat["营业收入",]<br />
Receiv_S <- fs$ic["应收账款",]/Sales*100 #应收账款/收入<br />
Invent_S <- fs$ic["存货",]/Sales*100 #存货/收入<br />
D_E <- fs$bs["负债合计",]/fs$bs["所有者权益合计",]*100<br />
main=t(as.matrix(data.frame(IC1,IC2,EBIT,NOPLAT,FCF,FCF2,ROICPre,ROIC,CROIC,<br />
Sales,Receiv_S,Invent_S,D_E)))<br />
colnames(main) <- format(fs$date,"%Y")<br />
main <- round(main,digits)<br />
output <- list(date=fs$date,main=main)<br />
output<br />
}</p>
<p>
</p>