1

I'm reading a bunch of SAS files like so:

demography = pd.read_sas("demography.sas7bdat", encoding = 'latin-1') adverse_event_ds = pd.read_sas("adverse_event_ds.sas7bdat", encoding = 'latin-1') rpt10344 = pd.read_sas("rpt10344.sas7bdat", encoding = 'latin-1') vaccine_administration = pd.read_sas("vaccine_administration.sas7bdat", encoding = 'latin-1') lab_tests_blood_chemistry_ds = pd.read_sas("lab_tests_blood_chemistry_ds.sas7bdat", encoding = 'latin-1') lab_tests_hematology_ds = pd.read_sas("lab_tests_hematology_ds.sas7bdat", encoding = 'latin-1') lab_tests_miscellaneous_ds = pd.read_sas("lab_tests_miscellaneous_ds.sas7bdat", encoding = 'latin-1') vital_signs = pd.read_sas("vital_signs.sas7bdat", encoding = 'latin-1')

I want to be able to replace it with something like this:

datasets = ["demography", "adverse_event_ds", "rpt10344", "vaccine_administration", "lab_tests_blood_chemistry_ds", "lab_tests_hematology_ds", "lab_tests_miscellaneous_ds", "vital_signs"]

for dataset in datasets: dataset = pd.read_sas(dataset+".sas7bdat", encoding = 'latin-1')

But when I do something like: demography.info()

I get: NameError: name 'demography' is not defined

What's happening under the hood and how can I fix this?

1 Answers1

2

this is assigning to dataset on every iteration rather than creating the new variables (e. g. demography, rpt10344, etc).

i'd use a dataset dictionary as follows:

dsd = {}
for dataset in datasets:
    dsd[dataset] = pd.read_sas(dataset+".sas7bdat", encoding = 'latin-1')

or a more pythonic route:

dsd = { d : pd.read_sas(d + ".sas7bdat", encoding = 'latin-1') for d in datasets }

I'd strongly advise against assigning to individual variable names for reasons explained here and here but if you absolutely must you can use

for d in datasets:
    globals()[d] = pd.read_sas(d + ".sas7bdat", encoding = 'latin-1')
tbdees
  • 76
  • 4