NuminorBeta

One company, many securities: why A-share company counts come out too high

Short answer: a company's facts attach to each of its listed securities, so a company with two listings shows up twice in every period. Group on the company key and not the ticker. The error does not raise an exception, it just makes every company-level total slightly too large, weighted toward exactly the large dual-listed names that move an index.

Group on the company, not the security

About 4,800 companies have more than one listed security. Company-level analysis must group on csfid or company_id, or a multi-listed company is counted several times. (ChinaScope Reference, as described in the July 2026 profile, measured across the full security master of roughly 40,100 securities issued by roughly 32,700 companies.)

Within SAM's A-share segment coverage the figure is about 301 companies with more than one listing, whose segment facts attach to each of their listed securities and so appear multiple times per period. Aggregate or dedupe on company_id2, the company key, and not on secu. (Data cut 2026-02-26.)

The two counts are measured over different populations, which is worth knowing before you reconcile them against each other. Neither is the other's error.

The same key, by a different name, in every dataset

datasetgroup onnot on
ChinaScope Referencecsfid / company_idthe security's own id
SAMcompany_id2secu
Affiliatecompany_idsecu
C2C Disclosedcompany_idsecu
SmarTagcompanyidstockcode

In Affiliate, structure attaches to each listed security. In C2C Disclosed, a company's disclosures attach to each of its listed securities. The instruction is identical in both profiles: aggregate or dedupe on company_id, not on secu, for company-level work. (Both data cut 2026-05-16.)

The security ID is not a company ID

To go from a security to its company, join base_stock.csfid to base_company.company_id. The security's own id, the S-prefixed one, identifies the instrument rather than the company. Using it as a company key does not fail loudly. It simply produces one "company" per instrument. (ChinaScope Reference, July 2026 profile.)

Most companies in the news have no ticker at all

SmarTag tags 1,914,479 distinct companies and most of them are private or unlisted. Of the listed side, 27,537 distinct securities appear, spanning A-shares and a large body of foreign and Hong Kong listings. Companies with no listing carry a csf placeholder in stockcode.

So join on companyid to reach all companies, and filter stockcode to real exchange codes when you want listed names only, dropping the csf placeholder. A-share codes there match SAM's secu. (Data cut 2026-09-16.)

If you go the other way and start from tickers, you are not sampling the company universe. You are sampling the listed sliver of it.

One more place the count inflates

In Fundamentals, the line-item fact carries no dates and no entity. You join it to filing on report_id to attach publish_date, report_date, company_id, secu, currency and the schedule. A standardized line appearing under two schedules has two report_id values with possibly different figures, and keying on report_id is what keeps them apart. Collapse them and you have merged two real disclosures. (Data cut 2026-04-14.)

Datasets this page draws on

Related questions