The COLUMNS= suboption places DATA step variables into columns that are defined in the table definition. Both LAST_NAME and FIRST_NAME go in columns that are defined as NAME in the table definition. GENERIC=ON must be set in both the table definition and the ODS= option in order for you to use a column definition for more than one column. The variable BUSINESS_PHONE is placed in a column that is defined as PHONE in the definition. The DYNAMIC= attribute assigns a value to the variable COLHEADER. This value is passed to the table definition when the output object is created, and the definition uses it for the column header. Thus, even though the variables use the same column definition from the table definition, the columns in the output object have different column headers. The FORMAT= attribute assigns the format PHONENUM. to the column named PHONE.
                columns=
                         (name=last_name
                           (generic=on
                            dynamic=(colheader='Last Name'))
                          name=first_name
                           (generic=on
                            dynamic=(colheader='First Name'))
                          phone=business_phone
                            (format=phonenum.)
                          )
               );