Could you provide a more specific example that fails? Just copy like one line with at least one occurence of what you are attempting to replace. At first glance, it looks like %str or %nrstr paired with appropriate use of the following examples that can be found in %nrstr documentation
| Notation | Description | Example | Quoted Value Stored |
|---|
| %' | unmatched single quotation mark | %let myvar=%str(a%'); | a' |
| %" | unmatched double quotation mark | %let myvar=%str(title %"first); | title "first |
| %( | unmatched open parenthesis | %let myvar=%str (log%(12); | log(12 |
| %) | unmatched close parenthesis | %let myvar=%str (345%)); | 345) |
Should achieve your desired results without needing to modify the macro defined by Dr Zhu.
Something like
%let old_str=%str(Mike said:%"Hey);
%let new_str=%str(Mike whispered:%"Halt);
Should appropriately prevent the unbalanced quote error when dereferencing old_str/new_str in the macro
Vincent