- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Posted 11-25-2020 04:55 AM
(1047 views)
NO | AAA | AAA_L1 | AAA_L2 | AAA_L3 | BBB | BBB_L1 | BBB_L2 | BBB_L3 | AAA_I | BBB_I |
1 | 0.1 | -0.1 | 1 | 1 | ||||||
2 | -0.1 | 0.1 | 0 | 0 | ||||||
3 | -1 | -0.1 | 0 | 1 |
data want; set test; if AAA > 0 OR AAA_L1>0 OR AAA_L2>0 OR AAA_L3>0 THEN AAA_I = 1;ELSE AAA_I = 0; If BBB < 0 OR BBB_L1<0 OR BBB_L2<0 OR BBB_L3<0 THEN BBB_I = 0;ELSE BBB_I = 1; run;
Is there any way that could cut short the code as i have more than 50 similar variables as shown above.
Thank you for your help.
3 REPLIES 3
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Try this
data have;
infile datalines dlm=',' dsd;
input NO AAA AAA_L1 AAA_L2 AAA_L3 BBB BBB_L1 BBB_L2 BBB_L3;
datalines;
1,0.1,,,,,-0.1,,
2,,-0.1,,,,,0.1,
3,,,-1,,-0.1,,,
;
data want;
set have;
array a {*} a:;
array b {*} b:;
AAA_I = max(of a[*]) gt 0;
BBB_I = min(of b[*]) lt 0;
run;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Is it possible to use OR instead of Max for the array?
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
First shorten the statement to
aaa_i = (sum(AAA,AAA_L1,AAA_L2,AAA_L3) > 0);
then you can use arrays to run it in a loop.