8月 052019
 

As a company, SAS consistently supports #data4good initiatives designed to help those less fortunate around the world. SAS Press team members recently took some time to reflect on the SAS initiatives that inspired them. We thought this would be a good opportunity to introduce some of the team who work so hard on our SAS Press books.

Sian Roberts, Publisher

I lead the SAS Press team and oversee the publication of our books from start to finish, including manuscript acquisition, book development, production, sales, and promotion.

Having lost both my dad and grandmother to cancer, the work SAS is doing to help improve care for cancer patients by tailoring treatments for individuals particularly resonates with me. For example, the wonderful work that is being done with Amsterdam University Medical Center to use computer vision and predictive analytics to improve care for cancer patients is of particular interest to me. My hope is that by using analytics and AI on data gathered from hospitals, research institutes, pharma and biotech companies, patterns can be identified earlier, and survival rates will increase.

 
 

Suzanne Morgen, Developmental Editor

I work with authors to help them develop and write their books, then go to conferences to sell those books and recruit more authors!

At SAS Global Forum, we heard about a pilot program at the New Hanover County Department of Social Services that uses SAS to alert caseworkers to risks for children in their care. I have been a foster parent for several years, so I am excited about any new resources that would help social workers intervene earlier in kids’ lives and hopefully keep them safer and even reduce the need for foster care. I hope SAS is able to partner with many more social services departments and use analytics to help protect more kids in the state and across the country.

Emily Scheviak-Livesay, Senior Business Operations Specialist

As a SAS employee for 22 years, I have learned to wear many hats. At SAS Press, I keep the business running smoothly and manage the metadata of all our books in all formats. I also work with our partners to ensure our titles are available both in the US and globally.

I love this story about JMP working with the Animal Humane Society! I’m a huge fan of “adopt, don’t shop” and it makes me so proud to work at a company where one of our products was used to assist in furthering the cause. For JMP to be able to take a huge amount of data from various sources and turn it into valuable information for The Animal Humane Society is amazing! Helping to care and save animals is what it’s all about. It truly is a fairy “tail” ending.

 

Missy Hannah, Senior Associate Developmental Editor

I work directly with SAS Press and JMP authors to plan and implement marketing strategies for our books. I grew up with a mother who not only was a Systems Engineer but who taught me all about technology. Looking back, I was always watching her code and work with technology and IT my entire life and seeing her do this meant those things came very easily for me. But often, other young women don’t find mentors in the field of data analytics and technology. Data shows that women account for less than 20% of computer science degrees in the U.S. and hold less than 25% of STEM-related jobs. That is why the Women’s In Tech Network at SAS has been something I have really enjoyed having at my company. SAS creating the Women’s Initiative Network (WIN) and all the other work they are doing to increase women in STEM and data fields is something that really matters.

Catherine Connolly, Developmental Editor

I work with authors to develop books that support SAS’ business initiatives. My main areas of focus are JMP, data management, and IoT.

There are so many SAS initiatives through #data4good that make me proud to be a SAS employee. One initiative I read earlier this year that stuck with me was a partnership between SAS and CAP Science to combat against repeated domestic violence. CAP Science developed wearables to be worn by both the domestic violence victim and the offender. The wearable uses SAS software to continuously collect data and report on the offender’s location in real-time in an effort to stop future attacks.

 
 

We hope you enjoyed this small insight into some of our team. We are all very proud to work for a company that takes the time to improve the lives of those who need it and uses the power of data and analytics to help the world.

What SAS #data4good initiative has been your favorite? Make sure to comment below!

What really matters: SAS #data4good and the SAS Press team was published on SAS Users.

8月 052019
 

As a company, SAS consistently supports #data4good initiatives designed to help those less fortunate around the world. SAS Press team members recently took some time to reflect on the SAS initiatives that inspired them. We thought this would be a good opportunity to introduce some of the team who work so hard on our SAS Press books.

Sian Roberts, Publisher

I lead the SAS Press team and oversee the publication of our books from start to finish, including manuscript acquisition, book development, production, sales, and promotion.

Having lost both my dad and grandmother to cancer, the work SAS is doing to help improve care for cancer patients by tailoring treatments for individuals particularly resonates with me. For example, the wonderful work that is being done with Amsterdam University Medical Center to use computer vision and predictive analytics to improve care for cancer patients is of particular interest to me. My hope is that by using analytics and AI on data gathered from hospitals, research institutes, pharma and biotech companies, patterns can be identified earlier, and survival rates will increase.

 
 

Suzanne Morgen, Developmental Editor

I work with authors to help them develop and write their books, then go to conferences to sell those books and recruit more authors!

At SAS Global Forum, we heard about a pilot program at the New Hanover County Department of Social Services that uses SAS to alert caseworkers to risks for children in their care. I have been a foster parent for several years, so I am excited about any new resources that would help social workers intervene earlier in kids’ lives and hopefully keep them safer and even reduce the need for foster care. I hope SAS is able to partner with many more social services departments and use analytics to help protect more kids in the state and across the country.

Emily Scheviak-Livesay, Senior Business Operations Specialist

As a SAS employee for 22 years, I have learned to wear many hats. At SAS Press, I keep the business running smoothly and manage the metadata of all our books in all formats. I also work with our partners to ensure our titles are available both in the US and globally.

I love this story about JMP working with the Animal Humane Society! I’m a huge fan of “adopt, don’t shop” and it makes me so proud to work at a company where one of our products was used to assist in furthering the cause. For JMP to be able to take a huge amount of data from various sources and turn it into valuable information for The Animal Humane Society is amazing! Helping to care and save animals is what it’s all about. It truly is a fairy “tail” ending.

 

Missy Hannah, Senior Associate Developmental Editor

I work directly with SAS Press and JMP authors to plan and implement marketing strategies for our books. I grew up with a mother who not only was a Systems Engineer but who taught me all about technology. Looking back, I was always watching her code and work with technology and IT my entire life and seeing her do this meant those things came very easily for me. But often, other young women don’t find mentors in the field of data analytics and technology. Data shows that women account for less than 20% of computer science degrees in the U.S. and hold less than 25% of STEM-related jobs. That is why the Women’s In Tech Network at SAS has been something I have really enjoyed having at my company. SAS creating the Women’s Initiative Network (WIN) and all the other work they are doing to increase women in STEM and data fields is something that really matters.

Catherine Connolly, Developmental Editor

I work with authors to develop books that support SAS’ business initiatives. My main areas of focus are JMP, data management, and IoT.

There are so many SAS initiatives through #data4good that make me proud to be a SAS employee. One initiative I read earlier this year that stuck with me was a partnership between SAS and CAP Science to combat against repeated domestic violence. CAP Science developed wearables to be worn by both the domestic violence victim and the offender. The wearable uses SAS software to continuously collect data and report on the offender’s location in real-time in an effort to stop future attacks.

 
 

We hope you enjoyed this small insight into some of our team. We are all very proud to work for a company that takes the time to improve the lives of those who need it and uses the power of data and analytics to help the world.

What SAS #data4good initiative has been your favorite? Make sure to comment below!

What really matters: SAS #data4good and the SAS Press team was published on SAS Users.

8月 052019
 

Marketers and brands have used segmentation as a technique to deliver customer personalization for communications, content, products, and services since the introduction of  customer relationship management (i.e., CRM) and database marketing. Within the context of segmentation, there are a variety of applications, ranging from consumer demographics, psychographics, geography, digital behavioral [...]

SAS Customer Intelligence 360: Automated AI and segmentation [Part 1] was published on Customer Intelligence Blog.

8月 052019
 

Binning transforms a continuous numerical variable into a discrete variable with a small number of values. When you bin univariate data, you define cut point that define discrete groups. I've previously shown how to use PROC FORMAT in SAS to bin numerical variables and give each group a meaningful name such as 'Low,' 'Medium,' and 'High.' This article uses PROC HPBIN to create bins that are assigned numbers. If you bin the data into k groups, the groups have the integer values 1, 2, 3, ..., k. Missing values are put into the zeroth group.

There are two popular ways to choose the cut points. You can use evenly spaced points, or you can use quantiles of the data. If you use evenly spaced cut points (as in a histogram), the number of observations in each bin will usually vary. Using evenly spaced cut points is called the "bucket binning" method. Alternatively, if you use quantiles as cut points (such as tertiles, quartiles, or deciles), the number of observations in each bin tend to be more balanced. This article shows how to use PROC HPBIN in SAS to perform bucket binning and quantile binning. It also shows how to use the CODE statement in PROC HPBIN to create a DATA step that uses the same cut points to bin future observations.

Create sample data

The following statements create sample data from the Sashelp.Heart data. An ID variable is added to the data so that you can identify each observation. A call to PROC MEANS produces descriptive statistics about two variables: Cholesterol and Systolic blood pressure.

data Heart;
format PatientID Z5.;
set Sashelp.Heart(keep=Sex Cholesterol Systolic);
PatientID = 10000 + _N_;
run;
 
proc means data=Heart nolabels N NMISS Min Max Skewness;
   var Cholesterol Systolic;
run;
Desriptive statistics for two variables

The output shows the range of the data for each variable. It also shows that the Cholesterol variable has 152 missing values. If your analysis requires nonmissing observations, you can use PROC HPIMPUTE to replace the missing values. For this article, I will not replace the missing values so that you can see how PROC HPBIN handles missing values.

Each variable has a skewed distribution, as indicated by the values of the skewness statistic. This usually indicates that equal-length binning will result in bins in the tail of the distribution that have only a few observations.

Use PROC HPBIN to bin data into equal-length bins

A histogram divides the range of the data by using k evenly spaced cutpoints. The width of each bin is (Max – Min) / k. PROC HPBIN enables you to create new variables that indicate to which bin each observation belongs. You can use the global NUMBIN= option on the PROC HPBIN statement to set the default number of bins for each variable. You can use the INPUT statement to specify which variables to bin. You can override the default number of bins by using the NUMBIN= option on any INPUT statement.

Suppose that you want to bin the Cholesterol data into five bins and the remaining variables into three bins.

  • The range of the Cholesterol data is [96, 568], so the width of the five bins that contain nonmissing values will be 94.4.
  • The range of the Systolic data is [82, 300], so the width of the three bins will be 72.66.

The following call to PROC HPBIN bins the variables. The output data set, HeartBin, contains the bin numbers for each observation.

/* equally divide the range each variable (bucket binning) */
proc hpbin data=Heart output=HeartBin numbin=3;  /* global NUMBIN= option */
   input Cholesterol / numbin=5;                 /* override global NUMBIN= option */
   input Systolic;                 
   id PatientID Sex;
run;
Cutpoints and frequency of observations for bucket binning using PROC HPBIN in SAS

Part of the output from PROC HPBIN is shown. (You can suppress the output by using the NOPRINT option.) The first table shows that PROC HPBIN used four threads on my PC to compute the results in parallel. The second table summarizes the transformation that bins the data. For each variable, the second column gives the names of the binned variables in the OUTPUT= data set. The third column shows the cutpoints for each bin. The Frequency and Proportion column show the frequency and proportion (respectively) of observations in each bin. As expected for these skewed variables, bins in the tail of each variable contain very few observations (less than 1% of the total).

The OUTPUT= option creates an output data set that contains the indicator variables for the bins. You can use PROC FREQ to enumerate the bin values and (again) count the number of observations in each bin:

proc freq data=HeartBin;
   tables BIN_Cholesterol BIN_Systolic / nocum;
run;
Frequency of observations in each bin for bucket binning using PROC HPBIN in SAS

Notice that the Cholesterol variable was split into six bins even though the syntax specified NUMBIN=5. If a variable contains missing values, a separate bin is created for them. In this case, the zeroth bin contains the 152 missing values for the Cholesterol variable.

Bucket binning divides the range of the variables into equal-width intervals. For long-tailed data, the number of observations in each bin might vary widely, as for these data. The next section shows an alternative binning strategy in which the width of the bins vary and each bin contains approximately the same number of observations.

Use PROC HPBIN to bin data by using quantiles

You can use evenly-spaced quantiles as cutpoints in an attempt to balance the number of observations in the bins. However, if the data are rounded or have duplicate values, the number of observations in each bin can still vary. PROC HPBIN has two ways methods for quantile binning. The slower method (the QUANTILE option) computes cutpoints based on the sample quantiles and then bins the observations. The faster method (the PSEUDO_QUANTILE option) uses approximate quantiles to bin the data. The following call uses the PSEUDO_QUANTILE option to bin the data into approximately equal groups:

/* bin by quantiles of each variable */
proc hpbin data=Heart output=HeartBin numbin=3 pseudo_quantile;
   input Cholesterol / numbin=5;    /* override global NUMBIN= option */
   input Systolic;                  /* use global NUMBIN= option */
   id PatientID Sex;
   code file='C:/Temp/BinCode.sas'; /* generate scoring code */
run;
Cutpoints and frequency of observations in each bin for quantile binning using PROC HPBIN in SAS

The output shows that the number of observations in each bin is more balanced. For the Systolic variable, each bin has between 1,697 and 1,773 observations. For the Cholesterol variable, each bin contains between 975 and 1,056 observations. Although not shown in the table, the BIN_Cholesterol variable also contains a bin for the 152 missing values for the Cholesterol variable.

Use PROC HPBIN to write DATA step code to bin future observations

In the previous section, I used the CODE statement to specify a file that contains SAS DATA step code that can be used to bin future observations. The statements in the BinCode.sas file are shown below:

*****************      BIN_Systolic     ********************;
length BIN_Systolic 8;
if missing(Systolic) then do; BIN_Systolic = 0; end;
else if Systolic < 124.0086 then do; BIN_Systolic =     1; end;
else if 124.0086 <= Systolic < 140.0098 then do; BIN_Systolic =     2; end;
else if 140.0098 <= Systolic then do; BIN_Systolic =     3; end;
 
*****************      BIN_Cholesterol     ********************;
length BIN_Cholesterol 8;
if missing(Cholesterol) then do; BIN_Cholesterol = 0; end;
else if Cholesterol < 190.0224 then do; BIN_Cholesterol =     1; end;
else if 190.0224 <= Cholesterol < 213.0088 then do; BIN_Cholesterol =     2; end;
else if 213.0088 <= Cholesterol < 234.0128 then do; BIN_Cholesterol =     3; end;
else if 234.0128 <= Cholesterol < 263.0408 then do; BIN_Cholesterol =     4; end;
else if 263.0408 <= Cholesterol then do; BIN_Cholesterol =     5; end;

You can see from these statements that the zeroth bin is reserved for missing values. Nonmissing values will be split into bins according to the approximate tertiles (NUMBIN=3) or quintiles (NUMBIN=5) of the training data.

The following statements show how to use the file that was created by the CODE statement. New data is contained in the Patients data set. Simply use the SET statement and the %INCLUDE statement to bin the new data, as follows:

data Patients;
length Sex $6;
input PatientID Sex Systolic Cholesterol;
datalines;
13021 Male    96 . 
13022 Male   148 242 
13023 Female 144 217 
13024 Female 164 376 
13025 Female .   248 
13026 Male   190 238 
13027 Female 158 326 
13028 Female 188 266 
;
 
data MakeBins;
set Patients;
%include 'C:/Temp/BinCode.sas';   /* include the binning statements */
run;
 
/* Note: HPBIN puts missing values into bin 0 */
proc print data=MakeBins;  run;
Binning new observations by using PROC HPBIN in SAS

The input data can contain other variables (PatientID, Sex) that are not binned. However, the data should contain the Systolic and Cholesterol variables because the statements in the BinCode.sas file refer to those variables.

Summary

In summary, you can use PROC HPBIN in SAS to create a new discrete variable by binning a continuous variable. This transformation is common in machine learning algorithms. Two common binning methods include bucket binning (equal-length bins) and quantile binning (unequal-length bins). Missing values are put into their own bin (the zeroth bin). The CODE statement in PROC HPBIN enables you to write DATA step code that you can use to bin future observations.

The post How to use PROC HPBIN to bin numerical variables appeared first on The DO Loop.

8月 052019
 

Binning transforms a continuous numerical variable into a discrete variable with a small number of values. When you bin univariate data, you define cut point that define discrete groups. I've previously shown how to use PROC FORMAT in SAS to bin numerical variables and give each group a meaningful name such as 'Low,' 'Medium,' and 'High.' This article uses PROC HPBIN to create bins that are assigned numbers. If you bin the data into k groups, the groups have the integer values 1, 2, 3, ..., k. Missing values are put into the zeroth group.

There are two popular ways to choose the cut points. You can use evenly spaced points, or you can use quantiles of the data. If you use evenly spaced cut points (as in a histogram), the number of observations in each bin will usually vary. Using evenly spaced cut points is called the "bucket binning" method. Alternatively, if you use quantiles as cut points (such as tertiles, quartiles, or deciles), the number of observations in each bin tend to be more balanced. This article shows how to use PROC HPBIN in SAS to perform bucket binning and quantile binning. It also shows how to use the CODE statement in PROC HPBIN to create a DATA step that uses the same cut points to bin future observations.

Create sample data

The following statements create sample data from the Sashelp.Heart data. An ID variable is added to the data so that you can identify each observation. A call to PROC MEANS produces descriptive statistics about two variables: Cholesterol and Systolic blood pressure.

data Heart;
format PatientID Z5.;
set Sashelp.Heart(keep=Sex Cholesterol Systolic);
PatientID = 10000 + _N_;
run;
 
proc means data=Heart nolabels N NMISS Min Max Skewness;
   var Cholesterol Systolic;
run;
Desriptive statistics for two variables

The output shows the range of the data for each variable. It also shows that the Cholesterol variable has 152 missing values. If your analysis requires nonmissing observations, you can use PROC HPIMPUTE to replace the missing values. For this article, I will not replace the missing values so that you can see how PROC HPBIN handles missing values.

Each variable has a skewed distribution, as indicated by the values of the skewness statistic. This usually indicates that equal-length binning will result in bins in the tail of the distribution that have only a few observations.

Use PROC HPBIN to bin data into equal-length bins

A histogram divides the range of the data by using k evenly spaced cutpoints. The width of each bin is (Max – Min) / k. PROC HPBIN enables you to create new variables that indicate to which bin each observation belongs. You can use the global NUMBIN= option on the PROC HPBIN statement to set the default number of bins for each variable. You can use the INPUT statement to specify which variables to bin. You can override the default number of bins by using the NUMBIN= option on any INPUT statement.

Suppose that you want to bin the Cholesterol data into five bins and the remaining variables into three bins.

  • The range of the Cholesterol data is [96, 568], so the width of the five bins that contain nonmissing values will be 94.4.
  • The range of the Systolic data is [82, 300], so the width of the three bins will be 72.66.

The following call to PROC HPBIN bins the variables. The output data set, HeartBin, contains the bin numbers for each observation.

/* equally divide the range each variable (bucket binning) */
proc hpbin data=Heart output=HeartBin numbin=3;  /* global NUMBIN= option */
   input Cholesterol / numbin=5;                 /* override global NUMBIN= option */
   input Systolic;                 
   id PatientID Sex;
run;
Cutpoints and frequency of observations for bucket binning using PROC HPBIN in SAS

Part of the output from PROC HPBIN is shown. (You can suppress the output by using the NOPRINT option.) The first table shows that PROC HPBIN used four threads on my PC to compute the results in parallel. The second table summarizes the transformation that bins the data. For each variable, the second column gives the names of the binned variables in the OUTPUT= data set. The third column shows the cutpoints for each bin. The Frequency and Proportion column show the frequency and proportion (respectively) of observations in each bin. As expected for these skewed variables, bins in the tail of each variable contain very few observations (less than 1% of the total).

The OUTPUT= option creates an output data set that contains the indicator variables for the bins. You can use PROC FREQ to enumerate the bin values and (again) count the number of observations in each bin:

proc freq data=HeartBin;
   tables BIN_Cholesterol BIN_Systolic / nocum;
run;
Frequency of observations in each bin for bucket binning using PROC HPBIN in SAS

Notice that the Cholesterol variable was split into six bins even though the syntax specified NUMBIN=5. If a variable contains missing values, a separate bin is created for them. In this case, the zeroth bin contains the 152 missing values for the Cholesterol variable.

Bucket binning divides the range of the variables into equal-width intervals. For long-tailed data, the number of observations in each bin might vary widely, as for these data. The next section shows an alternative binning strategy in which the width of the bins vary and each bin contains approximately the same number of observations.

Use PROC HPBIN to bin data by using quantiles

You can use evenly-spaced quantiles as cutpoints in an attempt to balance the number of observations in the bins. However, if the data are rounded or have duplicate values, the number of observations in each bin can still vary. PROC HPBIN has two ways methods for quantile binning. The slower method (the QUANTILE option) computes cutpoints based on the sample quantiles and then bins the observations. The faster method (the PSEUDO_QUANTILE option) uses approximate quantiles to bin the data. The following call uses the PSEUDO_QUANTILE option to bin the data into approximately equal groups:

/* bin by quantiles of each variable */
proc hpbin data=Heart output=HeartBin numbin=3 pseudo_quantile;
   input Cholesterol / numbin=5;    /* override global NUMBIN= option */
   input Systolic;                  /* use global NUMBIN= option */
   id PatientID Sex;
   code file='C:/Temp/BinCode.sas'; /* generate scoring code */
run;
Cutpoints and frequency of observations in each bin for quantile binning using PROC HPBIN in SAS

The output shows that the number of observations in each bin is more balanced. For the Systolic variable, each bin has between 1,697 and 1,773 observations. For the Cholesterol variable, each bin contains between 975 and 1,056 observations. Although not shown in the table, the BIN_Cholesterol variable also contains a bin for the 152 missing values for the Cholesterol variable.

Use PROC HPBIN to write DATA step code to bin future observations

In the previous section, I used the CODE statement to specify a file that contains SAS DATA step code that can be used to bin future observations. The statements in the BinCode.sas file are shown below:

*****************      BIN_Systolic     ********************;
length BIN_Systolic 8;
if missing(Systolic) then do; BIN_Systolic = 0; end;
else if Systolic < 124.0086 then do; BIN_Systolic =     1; end;
else if 124.0086 <= Systolic < 140.0098 then do; BIN_Systolic =     2; end;
else if 140.0098 <= Systolic then do; BIN_Systolic =     3; end;
 
*****************      BIN_Cholesterol     ********************;
length BIN_Cholesterol 8;
if missing(Cholesterol) then do; BIN_Cholesterol = 0; end;
else if Cholesterol < 190.0224 then do; BIN_Cholesterol =     1; end;
else if 190.0224 <= Cholesterol < 213.0088 then do; BIN_Cholesterol =     2; end;
else if 213.0088 <= Cholesterol < 234.0128 then do; BIN_Cholesterol =     3; end;
else if 234.0128 <= Cholesterol < 263.0408 then do; BIN_Cholesterol =     4; end;
else if 263.0408 <= Cholesterol then do; BIN_Cholesterol =     5; end;

You can see from these statements that the zeroth bin is reserved for missing values. Nonmissing values will be split into bins according to the approximate tertiles (NUMBIN=3) or quintiles (NUMBIN=5) of the training data.

The following statements show how to use the file that was created by the CODE statement. New data is contained in the Patients data set. Simply use the SET statement and the %INCLUDE statement to bin the new data, as follows:

data Patients;
length Sex $6;
input PatientID Sex Systolic Cholesterol;
datalines;
13021 Male    96 . 
13022 Male   148 242 
13023 Female 144 217 
13024 Female 164 376 
13025 Female .   248 
13026 Male   190 238 
13027 Female 158 326 
13028 Female 188 266 
;
 
data MakeBins;
set Patients;
%include 'C:/Temp/BinCode.sas';   /* include the binning statements */
run;
 
/* Note: HPBIN puts missing values into bin 0 */
proc print data=MakeBins;  run;
Binning new observations by using PROC HPBIN in SAS

The input data can contain other variables (PatientID, Sex) that are not binned. However, the data should contain the Systolic and Cholesterol variables because the statements in the BinCode.sas file refer to those variables.

Summary

In summary, you can use PROC HPBIN in SAS to create a new discrete variable by binning a continuous variable. This transformation is common in machine learning algorithms. Two common binning methods include bucket binning (equal-length bins) and quantile binning (unequal-length bins). Missing values are put into their own bin (the zeroth bin). The CODE statement in PROC HPBIN enables you to write DATA step code that you can use to bin future observations.

The post How to use PROC HPBIN to bin numerical variables appeared first on The DO Loop.

8月 022019
 

SAS Global Forum is a time for SAS users to come together to share their knowledge. Are you ready and willing to share your SAS knowledge?

Take a look at the proceedings from 2019 for ideas and inspiration. Search for any of the top 10 sessions below to get a feel for what was popular this year:

    1. Cool PROC SQL Tricks
    2. End to End Modeling and Machine Learning in SAS® Viya®
    3. Getting the most out of SAS® Macro Language and SQL
    4. How to be an Effective Statistician
    5. Data Governance: Harder, Better, Faster, Stronger
    6. Tell Me a Data Story: Data Visualization
    7. Let Leonardo da Vinci Inspire Your Next Presentation: Data Visualization
    8. Comparing SAS® Viya® and SAS® 9.4: How Their Features Complement Each Other
    9. From Words to Actions: Using Text Analytics to Drive Business Decisions
    10. A Beginner's Guide to ARRAYs and DO Loops

Remember, accepted abstracts for primary authors get a 50% discount on registration. Call for content closes September 30, 2019.

Still not sure?

What's keeping you from submitting? Maybe you can't seem to come up with a topic, or the thought of writing that abstract and working outline is overwhelming. Don't worry, we've got you covered. We have a great Presenter Mentoring Program that will pair you up with a seasoned expert to guide you through the process. We also have resources to help get you started. We’re here to help you throughout the process.

Award programs

We continue to support new SAS users and international attendees with our New SAS Professional and International Professional Award Programs. Check out the benefits you may be eligible for if you are a SAS professional using SAS for five years or less, or you live outside of the contiguous 48 United States. You can potentially get lodging assistance (and travel assistance for international attendees) if you submit an abstract and working outline that is accepted. Visit the conference website to learn about the many award and scholarship opportunities to help get you to Washington, DC.

SAS Global Forum 2020 is going to be epic! It's our first year holding this event at the Walter E. Washington Convention Center in downtown Washington, D.C. You won't want to miss it, so get your abstract in soon!

SAS Global Forum Call for Content is Open was published on SAS Users.

7月 312019
 

Sometimes a little thing can make a big difference. I am enjoying a new enhancement of SAS/IML 15.1, which enables you to use a numeric vector as the column header or row header when you print a SAS/IML matrix. Prior to SAS/IML 15.1, you had to first use the CHAR or PUTN function to manually apply a format to the numeric values. You could then use the formatted values as column or row headers. Now you can skip the formatting step.

A common situation in which I want to use numeric values as a column header is when I am using the TABULATE function to compute the frequencies for a discrete numerical variable. For example, the Cylinders variable in the Sashelp.Cars data set indicates the number of cylinders in each vehicle. You might want to know how many vehicles in the data are four-cylinder, six-cylinder, eight-cylinder, and so forth. In SAS/IML 15.1, you can use a numeric variable (such as the levels of the Cylinders variable) directly in the COLNAME= option of the PRINT statement, as follows:

proc iml;
use Sashelp.Cars;
read all var "Cylinders" into X;
close;
 
call tabulate(level, freq, X);      /* count number of obs for each level of X */
/* New in SAS/IML 15.1: use numeric values as COLNAME= option to PRINT statement */
print freq[colname=level];

Prior to SAS/IML 15.1, you had to convert numbers to character values by applying a format. This is commonly done by using the CHAR function, which applies a W.D format. This technique is still useful, but optional. You can also use the PUTN function to apply any format you want, such as COMMA., DATE., TIME., and so forth. For example, if you like Roman numerals, you could apply the ROMAN. format!

labels = char(level, 2);         /* apply w.d format */
print freq[colname=labels];
 
labels = putn(level, "ROMAN.");  /* second arg is name of format */
print freq[colname=labels];

You can also use numeric values for the COLNAME= option to obtain row headers in SAS/IML 15.1. Sure, it's a small enhancement, but I like it!

The post Use numeric values for column headers when printing a matrix appeared first on The DO Loop.