How do I remove borders around text lines and put a blank line between text in an automated ODS email? My Code OPTIONS EMAILSYS=SMTP EMAILHOST="SMTP.Company.com"; FILENAME MyMail EMAIL TO=("Sally.Jonas@Company.com") SUBJECT="Testing Proc Report with colors" TYPE="text/html"; ODS ESCAPECHAR='^'; ODS HTML BODY=MYMAil BODY=MyMail STYLE=HTMLBlue; ODS TEXT="^S={FONT_SIZE=12PT} Good Morning:"; ODS TEXT="^S={FONT_SIZE=12PT} "; ODS TEXT="^S={FONT_SIZE=12PT} The Directory Tree for &Companies. &Types. HAS STARTED running."; TITLE; /*Clear TITLE*/ FOOTNOTE; /*Clear Footnote*/ %Report_Summary_Email(Notes) ODS TEXT="^S={FONT_SIZE=12PT} Any questions, please reach out to Joseph.F@e.com or Sally.J@e.com."; ODS TEXT="^S={FONT_SIZE=12PT} "; ODS TEXT="^S={FONT_SIZE=12PT} Thanks,"; ODS TEXT="^S={FONT_SIZE=12PT} "; ODS TEXT="^S={FONT_SIZE=12PT} Sally"; ODS HTML CLOSE; I want a blank line after Good Morning and Thanks. Thank you!
... View more
The Westwood SAS User Group held their first virtual event since the pandemic on Saturday, July 27, 2024, featuring speaker Kirk Paul Lafler. Kirk presented, "A Review of "Free" Massive Open Online Content (MOOC) for SAS Learners".
The topic was a hit with attendees! Thank you, Kirk, for sharing your knowledge with SAS cusotmers.
... View more
It takes all kinds of minds on a team – people with diverse backgrounds and skill levels – to do amazing things. If you are looking to join a team, let’s find you a group. Or maybe your team needs more hackers. If so, please follow these steps:
STEP 1. Reply to this post with your search criteria. Include the follow details:
“I’m looking for a team.” or “I’m looking for a team member.”
Track name
Skills
Your LinkedIn and/or GitHub profile (if applicable)
Here’s an example:
Interest: I’m looking for a team
Track: Energy
Skills: SAS Viya
Social: https://www.linkedin.com/in/christine-brown-47425316/
STEP 2. Create your replies following this order to maintain consistency in the thread.
STEP 3. Contact a potential new teammate using the SAS Support Communities' private messaging feature to discuss if a team or member is a good fit.
STEP 4. You need to be a member of a team in order to Register.
STEP 5: If you have any edits to your team after you Register, send an email to sashackathon@sas.com. The Event Team needs to know about any changes to your team and members. Also, don’t forget to update your team profile on the SAS Hacker's Hub.
Happy hacking!
... View more
Do you ever scroll through social media sites like TikTok or Pinterest, looking for life hacks that will save you time and effort to your already overloaded day? I do! Who doesn’t want to simplify and better their life when it comes to things like cleaning the house or skincare? My whole life I’ve heard my father say, “Work smarter, not harder!” Honestly, he’s said it so much that it probably ranks not far behind his prolific use of “I love you!” Do you know who else cares about us and wants us to have a simpler and better life, and wants to equip us to work smarter, not harder? SAS!
... View more
Hello.
Let's say that I have a data set with many continuous variables (independent variables) and response variable (1/0 Default yes or no).
Let's say that for specific variable X I want to categorize this variable into categories .
I have some criteria:
1-Classify to 4 or 5 categories
2-Category 1 is the worse category (The category with highest bads rate)
3-In each category be at least 50 bads (people with Y=1)
4-There must be cardinally in failure rate between groups
5-Must have at least 1% increasing in bads rate from one category to another category.
6-If there are some possible ways that meet 1-5 then choose the option with highest Information value.
May anyone show a nice code that perform this?
What way would you use to perform the binning based on the criteria's I mentioned?
Here is SAS code that show If the conditions I mentioned were meet.
Here can see also IV and see default rate in each category.
As I said, the magic question is how to binning the categories?
PROC FORMAT ;
VALUE IV_fmt
low-<0.02='Very weak'
0.02 <-0.1 ='Weak'
0.1 <-0.3 ='Intermediate'
0.3 <- HIGH ='Strong'
;
RUN;
%macro inf_value(Raw_Data_tbl,var,Response_VAR);
PROC SUMMARY DATA=&Raw_Data_tbl. (keep= &var. &Response_VAR.);
VAR &Response_VAR.;
OUTPUT OUT=inf0 (DROP=_TYPE_)sum=all_bad;
RUN;
data _null_;
set inf0;
good=_freq_-all_bad;
call symput('all_good',good);
call symput('all_bad',all_bad);
run;
%put &all_good;
%put &all_bad;
PROC SUMMARY DATA=&Raw_Data_tbl. (keep= &var. &Response_VAR.)nway;
class &var.;
VAR &Response_VAR.;
OUTPUT OUT=inf1 (DROP=_TYPE_ rename=(_freq_=Nr_Customers))sum=Nr_bad;
RUN;
data inf2;
set inf1;
Nr_good=Nr_Customers-Nr_bad;
if &all_bad. not in (0,.) then PCT_Bads=Nr_bad/&all_bad.;
if &all_good. not in (0,.) then PCT_Goods=Nr_good/&all_good.;
res_helkey_non=PCT_Bads/PCT_Goods;
woe=log(res_helkey_non);**weight of evidance***;
iv_categ=(PCT_Bads-PCT_Goods)*woe;
run;
PROC SUMMARY DATA= inf2;
VAR iv_categ;
OUTPUT OUT=inf3 (DROP=_TYPE_)sum=inf_val;
RUN;
data _null_;
set inf3;
call symputx('inf_val',inf_val);
run;
%put &inf_val;/***SUM IV over all categories***/
data inf4;
length var $100. categ $100.;
set inf2;
categ=compress(&var.);
drop &var.;
var="&var.";
P_Default=Nr_bad/Nr_Customers;
label iv='information value(iv)';
run;
data inf5;
retain
var
categ
Nr_Customers
Nr_bad
Nr_good
PCT_bad
PCT_Bads
PCT_Goods
P_Default
res_helkey_non
woe
iv_categ
;
set inf4;
format PCT_Bads PCT_Goods res_helkey_non woe iv_categ P_Default percent10.3;
format Nr_Customers Nr_bad Nr_good comma15. ;
run;
PROC SUMMARY DATA= inf5;
VAR Nr_Customers Nr_bad Nr_good PCT_Bads PCT_Goods iv_categ;
OUTPUT OUT=Summary_IV (DROP=_TYPE_ _freq_) sum=;
RUN;
Data Summary_IV_b;
Retain field category ;
set Summary_IV;
VAR="&var.";
P_Default=Nr_bad/Nr_Customers;
format P_Default percent8.2;
Run;
Data Want;
set inf5 Summary_IV_b;
IF missing(categ) then IV_desc=put(iv_categ,IV_fmt.);
else IV_desc='';
Run;
title;
proc print data=Want noobs;Run;
%mend inf_value;
%inf_value(Raw_Data_tbl=ttt,var=X,Response_VAR=Ind_Default)
... View more
Ready to join fellow brilliant minds for the SAS Hackathon?
Build your skills. Make connections. Enjoy creative freedom. Maybe change the world. Registration is now open through August 30th. Visit the SAS Hackathon homepage.
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 16.