BookmarkSubscribeRSS Feed
Prasad
Calcite | Level 5
is there some advice for "code formatter/beautifier", to help line-up the SAS
code, to improve readability in SAS?
7 REPLIES 7
Doc_Duke
Rhodochrosite | Level 12
Upgrade to EGuide 4.3. there is one built in to it. Check the SAS/Dummy blog archives for an article on it.

http://blogs.sas.com/sasdummy/
ChrisHemedinger
Community Manager
Specific topics on the blog:

http://blogs.sas.com/sasdummy/index.php?/archives/188-Hope-for-ugly-programs.html

http://blogs.sas.com/sasdummy/index.php?/archives/233-The-SAS-code-formatter-more-than-a-pretty-face...

Enjoy!

Chris
SAS For Dummies 3rd Edition! Check out the new edition, covering SAS 9.4, SAS Viya, and all of the modern ways to use SAS!
SPR
Quartz | Level 8 SPR
Quartz | Level 8
Hello Chris,

BTW, I found that Ctrl+I does not format proc SQL.

Sincerely,
SPR
ChrisHemedinger
Community Manager
It should format PROC SQL, at least with basic indentation.

For me, it turns this:
[pre]
proc sql;
create table work.out as
select age,
(height/weight) as ratio
from sashelp.class where age>12;
quit;
[/pre]

into this:
[pre]
proc sql;
create table work.out as
select age,
(height/weight) as ratio
from sashelp.class where age>12;
quit;
[/pre]
SAS For Dummies 3rd Edition! Check out the new edition, covering SAS 9.4, SAS Viya, and all of the modern ways to use SAS!
SPR
Quartz | Level 8 SPR
Quartz | Level 8
Hello Chris,

This is a real life example. I've got this code from a macro that produces SQL code in LOG (options mprint):
[pre]
proc SQL;
create view pd as
select
case
when dlq = 1 and iltv=0 and RB < 555 then 100*1+0 when dlq = 1 and iltv=0 and
555 <= RB < 634 then 100*1+1 when dlq = 1 and iltv=0 and 634 <= RB < 672 then 100*1+2 when dlq = 1 and iltv=0 and 672 <= RB then
100*1+3 when dlq = 1 and iltv=1 and RB < 558 then 100*1+50+0 when dlq = 1 and iltv=1 and 558 <= RB < 644 then 100*1+50+1 when dlq =
1 and iltv=1 and 644 <= RB < 707 then 100*1+50+2 when dlq = 1 and iltv=1 and 707 <= RB < 732 then 100*1+50+3 when dlq = 1 and
iltv=1 and 732 <= RB then 100*1+50+4 when dlq = 2 and iltv=0 and RB < 646 then 100*2+0 when dlq = 2 and iltv=0 and 646 <= RB then
100*2+1 when dlq = 2 and iltv=1 and RB < 556 then 100*2+50+0 when dlq = 2 and iltv=1 and 556 <= RB < 631 then 100*2+50+1 when dlq =
2 and iltv=1 and 631 <= RB then 100*2+50+2 when dlq = 3 then 100*dlq when dlq = 4 then 100*dlq when dlq > 4 then 500 else 999
end as pnam label="RC75 RB Pools",
date, SUM(PD*N) as Nb, SUM(N) as N,
SUM(PD*N)/SUM(N)*10000 as bps label="PD, bps" format=6.1,
SUM(Bal) as Bal format 15.0
from _w.ds75_&t
group by date, pnam
order by date, pnam
;quit;
[/pre]
Automatic identation does not help in this case. All Case clauses are messed.
Sincerely,
SPR
ChrisHemedinger
Community Manager
Thanks for the example. No, the formatter doesn't dive deep into these constructs (such as CASE). But I'll pass this on to the development team!

Chris
SAS For Dummies 3rd Edition! Check out the new edition, covering SAS 9.4, SAS Viya, and all of the modern ways to use SAS!
LukeDalton
Calcite | Level 5

Long time, but has anything come of this? Auto-formatting SQL syntax would make the Formatting feature so much more useful. I regularly use Poor SQL - Instant Free and Open-Source T-SQL Formatting to do this task, but the tool does not handle ampersand (macro) references or comments well at all.

hackathon24-white-horiz.png

The 2025 SAS Hackathon has begun!

It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.

Latest Updates

Creating Custom Steps in SAS Studio

Check out this tutorial series to learn how to build your own steps in SAS Studio.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 7 replies
  • 5233 views
  • 0 likes
  • 5 in conversation