一家公司,多只证券:为什么 A 股公司数量会偏高
简短回答: 公司的事实会挂到它的每一只上市证券上,因此一家有两个上市地的公司在每个期间都会出现两次。请按公司主键分组,不要按股票代码。这个错误不会抛异常,它只是让每一个公司层面的合计都略微偏大,而且偏差集中在恰好能牵动指数的那些大型多地上市公司身上。
按公司分组,不要按证券
约有 4,800 家公司拥有不止一只上市证券。公司层面的分析必须按 csfid 或 company_id 分组,否则一家多地上市的公司会被重复计算多次。(数库参考数据,见 2026 年 7 月版数据档案,统计口径为完整证券主数据,约 40,100 只证券、由约 32,700 家公司发行。)
在 SAM 的 A 股分部覆盖范围内,这个数字是约 301 家拥有不止一个上市地的公司,它们的分部事实挂在各自的每一只上市证券上,因此在每个期间出现多次。请按公司主键 company_id2 汇总或去重,而不是按 secu。(数据截止 2026-02-26。)
这两个数字统计的是不同的总体,在你拿它们互相对账之前值得先知道这一点。它们谁也不是谁的错误。
同一把主键,在每个数据集里换了名字
| 数据集 | 按这个分组 | 不要按这个 |
|---|---|---|
| 数库参考数据 | csfid / company_id | 证券自身的 id |
| SAM | company_id2 | secu |
| 股权关系 | company_id | secu |
| C2C 披露数据 | company_id | secu |
| SmarTag | companyid | stockcode |
在股权关系数据中,股权结构挂在每一只上市证券上。在 C2C 披露数据中,公司的披露挂在它的每一只上市证券上。两份数据档案里的指示完全一致:做公司层面的工作时,请按 company_id 汇总或去重,而不是按 secu。(两者数据截止均为 2026-05-16。)
证券 ID 不是公司 ID
要从一只证券走到它的公司,请用 base_stock.csfid 关联到 base_company.company_id。证券自身的 id,也就是以 S 开头的那一个,标识的是工具而不是公司。把它当作公司主键不会报错,它只会让每一个工具都变成一家「公司」。(数库参考数据,2026 年 7 月版数据档案。)
新闻里的大多数公司根本没有股票代码
SmarTag 打标的公司共有 1,914,479 家,其中大多数是非上市或私营企业。在上市这一侧,共出现 27,537 只去重后的证券,覆盖 A 股以及大量境外与香港上市主体。没有上市地的公司在 stockcode 中带有 csf 占位符。
所以要覆盖全部公司请按 companyid 关联,只要上市主体时请把 stockcode 过滤到真实的交易所代码,并剔除 csf 占位符。其中的 A 股代码与 SAM 的 secu 一致。(数据截止 2026-09-16。)
反过来,如果你从股票代码出发,你抽样的就不是公司全集,而只是它已上市的那一薄层。
还有一处会让数量虚增
在基本面数据中,明细科目事实表既不带日期也不带实体。你要按 report_id 把它关联到 filing 表,这一步才会带上 publish_date、report_date、company_id、secu、currency 与报表附注归属。同一个标准化科目若出现在两张报表附注下,就会有两个 report_id,数值也可能不同,按 report_id 做主键正是把它们区分开的方法。把它们合并,你就把两条真实的披露并成了一条。(数据截止 2026-04-14。)