[英]SAS variable with blank spaces
我正在尝试这种说法:
CASE WHEN SUBSTR(NUMERO_TELEFONO,1,2) ='34' OR SUBSTR(NUMERO_TELEFONO,1,3)
='+34' THEN '+34'
ELSE ' ' END
但是我运行代码时,else 语句不会保留空格。 如何创建包含 6 个空格的变量?
在 SAS 中,字符值用空格右填充到变量的长度属性。
我假设您正在使用LENGTH
function 来检查值中的字符数。 SAS 中的LENGTH
function 返回值中的字符数,直到值中的最后一个空格。 使用LENGTHC
检查变量或结果的长度属性。
字符变量不能是 0 个字符的空字符串,表达式''
在 DATA 步变量评估的上下文中扩展为一个空格。 SAS 中没有 null 字符串(如 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 列。 例如,您可以查看此 output 中的 newVariableTest 列,您将看到加上“X” append 为六个“”,但您不需要定义它。 因此,您使用数据集并定义您准备好的结果列长度。
例子:
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.