*! version 1.1 20apr2026

Title

isic_to_ff -- Convert ISIC codes to Fama-French industry classifications

Syntax

isic_to_ff
varname
[if] [in]
, generate(newvar) [options]

Required
generate(newvar) name of new variable to create

Optional
scheme(#) industry classification scheme: 5, 10, 12, 17, 30, 38, 48, or 49. The default is 48

revision(string) ISIC revision. The default is 4. Current release supports only revision(4)

labels apply value labels to the new variable

replace overwrite existing variable

diagnostics display ISIC bridge diagnostics

tiegen(newvar) save tie indicator (1 if plurality tie blocked assignment)

unresolvedgen(newvar) save unresolved indicator (1 if no FF assignment)

Description

isic_to_ff maps ISIC codes to Fama-French industries by bridging
ISIC Revision 4 to NAICS 2017 (official U.S. Census concordance), then
mapping to SIC/FF through the existing naics_to_ff/sic_to_ff
stack.

Input normalization is class-level: values are treated as valid Rev.4 classes
only when they normalize to numeric codes 100-9999. Leading-zero class
inputs (e.g., 0111) are accepted and normalized to 111. Group-level
artifacts (e.g., 12, 14) are excluded from assignment.

Fractional numeric ISIC inputs are rejected. If your data store formatted
codes with punctuation or leading zeros, keep them as strings and let the
string-cleaning path normalize them before class-level validation.

This release supports ISIC Revision 4 only. The revision() option
is future-ready, but revision(2), revision(3), and revision(3.1)
return an explicit "planned for future release" message.

When one ISIC code links to NAICS codes in multiple FF industries, isic_to_ff
uses a plurality rule:

1. Assign the FF industry with the largest number of linked NAICS rows.

2. If the top count is tied, leave the result missing and flag the case as ambiguous.

Options

generate(newvar) specifies the name of the new variable to be created.

scheme(#) selects the Fama-French scheme. Valid values are 5, 10, 12, 17,
30, 38, 48, and 49. The default is 48.

revision(string) selects the ISIC revision. This version supports only
revision(4).

labels attaches value labels to the output variable.

replace permits overwriting existing variables.

diagnostics reports bridge outcomes including plurality-resolved cases,
tie-blocked cases, and unresolved cases.

tiegen(newvar) saves a tie indicator. The variable equals 1 when a
plurality tie prevented assignment.

unresolvedgen(newvar) saves an unresolved indicator. The variable equals 1
when no FF assignment is available. This includes plurality ties and classes with
no FF link in the shipped bridge.

Stored results

isic_to_ff stores the following in r():

Scalars

r(N) observations in sample

r(N_isic) observations with valid ISIC code

r(N_ff_mapped) observations mapped to FF industry

r(N_tie) observations unresolved due to plurality tie

r(N_unresolved) observations unresolved overall

r(ff_map_rate) mapping rate among observations with ISIC code (percent)

Macros

r(scheme) FF scheme used

r(revision) ISIC revision used

r(varname) name of generated variable

Remarks

The ISIC bridge dataset is distributed with the package as
isic4_naics17_bridge.dta. The NAICS lookup is distributed as
naics_sic_lookup.dta. Both files must be discoverable on adopath.

isic_to_ff requires sic_to_ff version 1.1 or later. When
labels is requested, naics_to_ff must also be discoverable on
adopath so the command can attach the shipped FF value labels.

Examples

. isic_to_ff isic4, gen(ff48)

. isic_to_ff isic4, gen(ff48) labels diagnostics tiegen(isic_tie) unresolvedgen(isic_unres)

. isic_to_ff isic4, gen(ff17) scheme(17) revision(4)

References

U.S. Census Bureau. Concordances between NAICS and ISIC:
https://www.census.gov/naics/concordances/concordances.html.

Author

Kelvin K.F. Law, Nanyang Business School, Nanyang Technological University, Singapore

klaw@ntu.edu.sg