我试着这样说:
CASE WHEN SUBSTR(NUMERO_TELEFONO,1,2) ='34' OR SUBSTR(NUMERO_TELEFONO,1,3) ='+34' THEN '+34' ELSE ' ' END
CASE WHEN SUBSTR(NUMERO_TELEFONO,1,2) ='34' OR SUBSTR(NUMERO_TELEFONO,1,3)
='+34' THEN '+34'
ELSE ' ' END
但是当我运行代码时,else语句就没有了´不要保留空格。如何创建包含6个空格的变量?
nqwrtyyt1#
在sas中,字符值用空格右填充到变量的length属性。我猜你在用 LENGTH 函数检查值中的字符数。这个 LENGTH sas中的函数返回值中的字符数,直到值中的最后一个空格为止。使用 LENGTHC 检查变量或结果的长度属性。字符变量不能是包含0个字符的空字符串,表达式 '' 在数据步长变量求值的上下文中扩展到一个空间。在sas中没有空字符串的概念(例如在c中)。基本sas没有在数据库系统中找到的varchar概念(注意:proc ds2在执行期间不理解varchar)例子:
LENGTH
LENGTHC
''
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) );
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 不管比较字符串文本中有多少空格。
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
data check;
set want;
flag1 = (code = '');
flag2 = (code = ' ');
flag3 = (code = ' ');
flag4 = (code = ' ');
flag5 = (code = ' ');
flag6 = (code = ' ');
flag7 = (code = ' ');
format flag: 4.;
proc print data=check; title;
----- 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
hec6srdp2#
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=6from ...
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 ...
axzmvihb3#
我的第一个想法是:sas数据集长度用空格定义$6列。例如,您可以在这个输出中查看newvariabletest列,您将看到加上“x”append for six“”,但您不需要定义它。因此,可以使用dataset并定义准备好的结果列长度。例子:
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;
data test;
NUMERO_TELEFONO="343017236182";output;
NUMERO_TELEFONO="363017236182";output;
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";
3条答案
按热度按时间nqwrtyyt1#
在sas中,字符值用空格右填充到变量的length属性。
我猜你在用
LENGTH
函数检查值中的字符数。这个LENGTH
sas中的函数返回值中的字符数,直到值中的最后一个空格为止。使用LENGTHC
检查变量或结果的长度属性。字符变量不能是包含0个字符的空字符串,表达式
''
在数据步长变量求值的上下文中扩展到一个空间。在sas中没有空字符串的概念(例如在c中)。基本sas没有在数据库系统中找到的varchar概念(注意:proc ds2在执行期间不理解varchar)例子:
检查仅由空格组成的字符串的计算方式。对于空白赋值的情况
else
注意标记结果总是1
不管比较字符串文本中有多少空格。hec6srdp2#
sas字符变量的长度是固定的,并用空格填充。定义变量时可以使用length=属性来设置长度,不需要计算在else子句中键入的空格数。
axzmvihb3#
我的第一个想法是:sas数据集长度用空格定义$6列。例如,您可以在这个输出中查看newvariabletest列,您将看到加上“x”append for six“”,但您不需要定义它。因此,可以使用dataset并定义准备好的结果列长度。
例子: