带有空格的 SAS 变量



我正在尝试这个陈述:

CASE WHEN SUBSTR(NUMERO_TELEFONO,1,2) ='34' OR  SUBSTR(NUMERO_TELEFONO,1,3) 
='+34' THEN '+34'
ELSE '     ' END

但是我运行代码,else 语句不保留空格。 如何创建包含 6 个空格的变量?

在 SAS 中,字符值用空格右填充到变量的长度属性。

我假设您正在使用LENGTH函数来检查值中的字符数。 SAS 中的LENGTH函数返回值中的字符数,直到值中的最后一个空格。 使用LENGTHC检查变量或结果的长度属性。

字符变量不能是包含 0 个字符的空字符串,表达式''在 DATA 步骤变量计算的上下文中扩展到一个空格。 SAS 中没有空字符串的概念(例如在 C 中(。 Base SAS没有在数据库系统中发现的VARCHAR概念。 (注意:Proc DS2 在执行期间确实可以理解 VARCHAR(

例:

data have;
length phone $15.;
phone = '3456789'; output;
phone = '+3467890'; output;
phone = '1234567'; output;
run;
proc sql;
create table want as
select
case 
when substr(phone,1,2) = '34' or substr(phone,1,3) = '+34' 
then '+34'
else '      '
end as code
from 
have
;
ods listing;
describe table want;
quit;
----- LOG -----
NOTE: SQL table WORK.WANT was created like:
create table WORK.WANT( bufsize=65536 )
(
code char(6)
);

检查仅包含空格的字符串的计算方式。对于else中的空白赋值的情况,请注意无论比较字符串文本中的空格数如何,标志结果始终1


data check;
set want;
flag1 = (code = '');
flag2 = (code = ' ');
flag3 = (code = '  ');
flag4 = (code = '   ');
flag5 = (code = '    ');
flag6 = (code = '     ');
flag7 = (code = '      ');
format flag: 4.;
run;
proc print data=check; title;
run;
----- OUTPUT window -----
Obs    code    flag1    flag2    flag3    flag4    flag5    flag6    flag7
1     +34        0        0        0        0        0        0        0
2     +34        0        0        0        0        0        0        0
3                1        1        1        1        1        1        1

SAS 字符变量是固定长度的,并用空格填充。 定义变量时可以使用 LENGTH= 属性来设置长度,无需计算在 ELSE 子句中键入的空格数。

create table want as 
select CASE WHEN SUBSTR(NUMERO_TELEFONO,1,2) ='34'
OR  SUBSTR(NUMERO_TELEFONO,1,3) ='+34' THEN '+34'
ELSE ' ' 
END as prefix length=6
from ...

我的第一个想法:sas 数据集长度用空格定义 $6 列。 例如,您可以查看此输出中的 newVariableTest 列,您将看到加上"X"附加到六个" ",但您不需要定义它。 因此,您可以使用数据集并定义准备就绪的结果列长度。

例:

data test;
NUMERO_TELEFONO="343017236182";output;
NUMERO_TELEFONO="363017236182";output;
run;
data test;
set test;
length newVariable $6;
length newVariabletest $7;
if SUBSTR(NUMERO_TELEFONO,1,2) ='34' OR  SUBSTR(NUMERO_TELEFONO,1,3) ='+34' 
then newVariable='+34';
/*for the test*/
newVariabletest=newVariable||"X";
run;

最新更新