For loop in RIC screener search string

Hello, I would like to screen for companies through a for loop. I would like to iterate on industry code, but I cannot get the iterators to work with the proper package syntax. Looking through the below code, can you tell me where I am going wrong? (Note, the need for the loop arises because my full search, and below is just a shortened sample, is hitting download limits, so I am trying to break it up.)

import eikon as rd
import pandas as pd
from datetime import date

rd.set_app_key('8__________1')

indcode = [52,53,54,57]
syntax = f"SCREEN(U(IN(Equity(active,public,primary)))," \
"IN(TR.HQCountryCode,GB)," \
"IN(TR.TRBCEconSectorCode,{i}),CURN=USD)"
CATfields = ["TR.CommonName", "TR.HeadquartersCountry"]

df1 = []
for i in indcode:
data1, err = rd.get_data(syntax, CATfields)
df1.append(data1)
df1 = pd.concat(data1)

print(df1)

Best Answer

  • pf
    pf
    Answer ✓

    Hi @LRE42 ,

    The issue is coming from 'syntax' formatted string with i:

    1. in Python, formatted string doesn't support splitted multiline with '\'
    2. it need to be evaluated for each i value in the loop.

    Your issue can be fixed with following update:

    import eikon as rd
    import pandas as pd
    from datetime import date

    rd.set_app_key('8__________1')

    indcode = [52,53,54,57]
    CATfields = ["TR.CommonName", "TR.HeadquartersCountry"]
    syntax = "SCREEN(U(IN(Equity(active,public,primary)))," \
    "IN(TR.HQCountryCode,GB),"
    df1 = []
    for i in indcode:
    data1, err = rd.get_data(
    syntax + f"IN(TR.TRBCEconSectorCode,{i}),CURN=USD)",
    CATfields)
    df1.append(data1)
    df1 = pd.concat(data1)

    print(df1)


Answers

  • Just an update !

    For splitted multiline string, formatted string can be used with this way (only third line is formatted with i parameter):

    syntax = "SCREEN(U(IN(Equity(active,public,primary)))," \
    "IN(TR.HQCountryCode,GB)," \
    f"IN(TR.TRBCEconSectorCode,{i}),CURN=USD)"

    But it still need to be evaluated in the loop for each indcode value.

  • Hi -- thank you for this. It almost resolved my problem, except I had to make one more edit in the names of my tables in the foor loop. Here is the code I used to get this working:

    import eikon as rd
    import pandas as pd

    rd.set_app_key('8_________1')

    indcode = [52, 53, 54, 57]
    CATfields = ["TR.CommonName", "TR.HeadquartersCountry"]
    syntax = "SCREEN(U(IN(Equity(active,public,primary)))," \
    "IN(TR.HQCountryCode,GB),"
    data2 = []
    for i in indcode:
    data1, err = rd.get_data(
    syntax + f"IN(TR.TRBCEconSectorCode,{i}),CURN=USD)",
    CATfields)
    data2.append(data1)
    df1 = pd.concat(data2)

    print(df1)