When RF processes the line:
Run Keyword If ${Portfolio_ste}=='PASS' Go To Edit Portfolio
this is what happens:
${Portfolio_ste} is replaced by the value of variable Portfolio_ste, becoming:
Run Keyword If AdvisorPortfolio_334=='PASS' Go To Edit Portfolio
RF attempts to evaluate your condition. Since your argument AdvisorPortfolio_334=='PASS' is a string, the Run Keyword If evaluates it using the Python function eval() - this behavior is described in the documentation for keyword Should Be True. This is as if you typed AdvisorPortfolio_334=='PASS' into the Python interpreter.
What you want to do have an empty string (${EMPTY}) assigned to ${Portfolio_ste} by default.
Then you can do:
Run Keyword Unless '${Portfolio_ste}'=='' Go To Edit Portfolio
Note that ${Portfolio_ste} is wrapped in quotes. This approach will fail if an unescaped quotation mark appears inside the variable value that is the same mark as used to enclose it. The following will fail:
${value}= Set Variable John's Store
Run Keyword If '${value}'=='Test Store' Some Keyword
If you are checking for a non-empty value, you can also do this:
${length}= Get Length ${Portfolio_ste}
Run Keyword If ${length} Go To Edit Portfolio
Since Get Length returns an integer, Run Keyword If will evaluate the keyword passed to it as long as ${length} is non-zero (since it is an integer). In other words if ${Portfolio_ste} is not an empty string. This is a more robust check that does not have problems with embedded quotes. Note that Get Length works on other things too.
Kevin