BookmarkSubscribeRSS Feed
VCucu
Obsidian | Level 7

Hello,

 

I have the following code for a proc report:

 

title1 "Table1"; 
proc report data=r12 nowd list headline headskip spacing=2 split='~' contents='';
column  (num_mandant value dax_Generation, (metric_sum Dev1 dev2 dev3 dev4));
define num_mandant / group 'Mandant Code';
define value / group 'Basel COREP Exposure Class';
define dax_generation / across 'Time Period';
define metric_sum / sum  f=comma20. 'Exposure Book Value Amount';
define dev1 / computed nozero f=percent9.1 style=[backgroundcolor=color.]  'vs M-1.~(%)';
define dev2 / computed nozero format=comma20.1 'vs. M-1~(EUR mn.)';
define dev3 / computed nozero f=percent9.1 style=[backgroundcolor=color.]  'vs. M-2~(%)';
define dev4 / computed nozero format=comma20.1 'vs. M-2~(EUR mn.)';
compute dev1;
_c14_=_c13_/_c8_-1;
endcomp;
compute dev2;
_c15_=(_c13_-_c8_)/1000000;
endcomp;
compute dev3;
_c16_=_c13_/_c3_-1;
endcomp;
compute dev4;
_c17_=(_c13_-_c3_)/1000000;
endcomp;
compute value;
call define(_col_,'url',"M:\OE0979\SPR\reporta_&md._analysis12_"||trim(value)||".html"); 
endcomp;
rbreak after / summarize style=[font_weight=bold];
run;

This basically produces a hyperlink in the 2nd column as seen below.

 

VCucu_0-1619692914061.png

I would like to produce the hyperlink only if _col13_>10.000.000 and abs(_col14_)>0.1

I tried to use the following code but it stil creates hyperlinks for all values:

compute value;
if _C13_>10000000 abs(_c14_)>0.1 then call define(_col_,'url',"M:\OE0979\SPR\reporta_&md._analysis12_"||trim(value)||".html"); 
endcomp;

What should i change ?

5 REPLIES 5
PaigeMiller
Diamond | Level 26

Start by using proper syntax in your IF 

 

if _C13_>10000000 and abs(_c14_)>0.1 then call define(_col_,'url',"M:\OE0979\SPR\reporta_&md._analysis12_"||trim(value)||".html"); 

 

 

--
Paige Miller
VCucu
Obsidian | Level 7
i dont get any error using the syntax above. 🙂 what do you mean ?
Kurt_Bremser
Super User

I seriously doubt that. Code in a COMPUTE has to be valid DATA step code:

 73         data _null_;
 74         _c13_ = 1000000000000;
 75         _c14_ = 1;
 76         if _C13_>10000000 abs(_c14_)>0.1 then put "Yes";
                              ___
                              22
 ERROR 22-322: Syntaxfehler, erwartet wird eines der folgenden: !, !!, &, *, **, +, -, /, ;, <, <=, <>, =, >, ><, >=, AND, EQ, GE, 
               GT, LE, LT, MAX, MIN, NE, NG, NL, OR, ^=, |, ||, ~=.  

There must be and AND or OR where the ERROR indicator points to.

VCucu
Obsidian | Level 7

Hi guys,

 

Sorry for all that. Now i get it, i will always include a small code example. Please see below example code.

DATA report;
 INPUT mandant generation metric$ customer$ sum;
CARDS;
196 202104 sales AAA 100
196 202104 sales BBB 95
196 202104 sales CCC 80
196 202103 sales AAA 90
196 202103 sales BBB 90
196 202103 sales CCC 90
196 202102 sales AAA 90
196 202102 sales BBB 90
196 202102 sales CCC 90
;
RUN; 

proc format;
   value color -10-<-0.1='red' -0.1-<-0.05='yellow' -0.05-<0.05='green' 0.05-<0.1='yellow' 0.1-<10='red';
           

proc report data=report nowd list headline headskip spacing=2 split='~' contents='';
column  (mandant customer Generation, (sum Dev1 dev2 dev3 dev4));
define mandant / group 'Mandant Code';
define customer / group 'Customer';
define generation / across 'Time Period';
define sum / sum  f=comma20. 'Amount';
define dev1 / computed nozero f=percent9.1 style=[backgroundcolor=color.]  'vs M-1.~(%)';
define dev2 / computed nozero format=comma20.1 'vs. M-1~ (Amount)';
define dev3 / computed nozero f=percent9.1 style=[backgroundcolor=color.]  'vs. M-2~(%)';
define dev4 / computed nozero format=comma20.1 'vs. M-2~ (Amount)';
compute dev1;
_c14_=_c13_/_c8_-1;
endcomp;
compute dev2;
_c15_=(_c13_-_c8_);
endcomp;
compute dev3;
_c16_=_c13_/_c3_-1;
endcomp;
compute dev4;
_c17_=(_c13_-_c3_);
endcomp;
compute customer;
if abs(_c15_)>5 then call define(_col_,'url',"M:\OE0979\SPR\test_"||trim(customer)||".html"); 
endcomp;
rbreak after / summarize style=[font_weight=bold];
run;

I would like same as above to create this hyperlink only if for example abs(_c15_)>5 . If i use the code above it does not work... all the hyperlinks are dead.

What am I doing wrong ? 😛

Thank you,

PaigeMiller
Diamond | Level 26

@VCucu wrote:
i dont get any error using the syntax above. 🙂 what do you mean ?

I mean use the EXACT code I provided.

 

But, if you don't get a syntax error and @Kurt_Bremser does using the code you provided, then it would seem that you are not running the exact code you showed us. That makes it difficult (if not impossible) for us to help. 

--
Paige Miller

SAS Innovate 2025: Call for Content

Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!

Submit your idea!

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 5 replies
  • 601 views
  • 2 likes
  • 3 in conversation