Publicado el :
Macro CREATION_INTERNE

commaparms - Añadir comas a los parámetros de macro

Este código también está disponible en: Deutsch English Français
Esta macro procesa una cadena de caracteres que contiene parámetros de macro (ej: 'param1=val1 param2=val2') donde se han omitido las comas de separación. El objetivo es evitar tener que proteger toda la cadena con %str() o %nrstr() durante la llamada. La macro utiliza una expresión regular con la función PRXCHANGE para detectar las asignaciones de parámetros e insertar una coma antes de cada una de ellas. El resultado es una cadena de parámetros correctamente formateada (ej: ',param1=val1,param2=val2') y luego se elimina el primer carácter (la coma inicial). El resultado se devuelve sin comillas para que los signos de igualdad no queden ocultos.
Análisis de datos

Type : CREATION_INTERNE


Esta macro no manipula conjuntos de datos. Opera sobre una cadena de caracteres pasada como parámetro para transformarla.

1 Bloque de código
MACRO
Explicación :
Este bloque define la macro `%commaparms`. Toma un argumento `str`. La función `%qsysfunc(prxchange(...))` se utiliza para realizar una sustitución basada en una expresión regular. La expresión `s·\s*(\w+)\s*=\s*·,\1=·` busca los patrones 'palabra=valor' (con espacios opcionales alrededor del signo '=') y los reemplaza por ',palabra=valor'. La función `%qsubstr(..., 2)` elimina la primera coma superflua. Finalmente, `%unquote` asegura que la cadena de caracteres final se devuelva sin que sus caracteres especiales (como '=') queden ocultos, lo que la hace directamente utilizable en una llamada a macro.
¡Copiado!
1/*
2/ Program : commaparms.sas
3/ Version : 1.0
4/ Author : Roland Rashleigh-Berry
5/ Date : 10-Jun-2014
6/ Purpose : Function-style macro to add back commas between macro parameters
7/ where these have been deliberately omitted in a string.
8/ SubMacros : none
9/ Notes : The result will be returned macro UNQUOTED so that equals signs
10/ are not macro quoted.
11/
12/ Where a controlling macro allows the user to run other macros and
13/ supply parameters values then it is common practice to not use
14/ commas to separate the parameter values and to add these
15/ programatically when the called macro is invoked. This is done to
16/ avoid having to macro quote the whole string due to the presence
17/ of commas. This macro adds back the commas to the parameter list
18/ that are needed when the macro is called.
19/
20/ The macro removes spaces either side of the equals sign and
21/ precedes the parameter name with a comma (removing the very first
22/ comma).
23/
24/ Enclose the string for conversion inside %nrbquote() when calling
25/ this macro otherwise the first parameter name in the string will
26/ be interpreted as a macro parameter of the %commaparms macro.
27/
28/ Usage : %let params=%commaparms(%nrbquote(&str));
29/===============================================================================
30/ PARAMETERS:
31/-------name------- -------------------------description------------------------
32/ str (pos) String
33/===============================================================================
34/ AMENDMENT HISTORY:
35/ init --date-- mod-id ----------------------description------------------------
36/ rrb 25Mar13 New (v1.0)
37/ rrb 10Jun14 Header tidy (v1.0)
38/===============================================================================
39/ This is public domain software. No guarantee as to suitability or accuracy is
40/ given or implied. User uses this code entirely at their own risk.
41/=============================================================================*/
42 
43%put MACRO CALLED: commaparms v1.0;
44 
45%macro commaparms(str);
46%unquote(%qsubstr(%qsysfunc(prxchange(%nrbquote(s·\s*(\w+)\s*=\s*·,\1=·),-1,
47%nrbquote(&str))),2))
48%mend commaparms;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
Información de copyright : This is public domain software. No guarantee as to suitability or accuracy is given or implied. User uses this code entirely at their own risk.