带空格的sas变量

4szc88ey  于 2021-07-29  发布在  Java
关注(0)|答案(3)|浏览(1097)

我试着这样说:

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

但是当我运行代码时,else语句就没有了´不要保留空格。如何创建包含6个空格的变量?

nqwrtyyt

nqwrtyyt1#

在sas中,字符值用空格右填充到变量的length属性。
我猜你在用 LENGTH 函数检查值中的字符数。这个 LENGTH sas中的函数返回值中的字符数,直到值中的最后一个空格为止。使用 LENGTHC 检查变量或结果的长度属性。
字符变量不能是包含0个字符的空字符串,表达式 '' 在数据步长变量求值的上下文中扩展到一个空间。在sas中没有空字符串的概念(例如在c中)。基本sas没有在数据库系统中找到的varchar概念(注意:proc ds2在执行期间不理解varchar)
例子:

  1. data have;
  2. length phone $15.;
  3. phone = '3456789'; output;
  4. phone = '+3467890'; output;
  5. phone = '1234567'; output;
  6. run;
  7. proc sql;
  8. create table want as
  9. select
  10. case
  11. when substr(phone,1,2) = '34' or substr(phone,1,3) = '+34'
  12. then '+34'
  13. else ' '
  14. end as code
  15. from
  16. have
  17. ;
  18. ods listing;
  19. describe table want;
  20. quit;
  21. ----- LOG -----
  22. NOTE: SQL table WORK.WANT was created like:
  23. create table WORK.WANT( bufsize=65536 )
  24. (
  25. code char(6)
  26. );

检查仅由空格组成的字符串的计算方式。对于空白赋值的情况 else 注意标记结果总是 1 不管比较字符串文本中有多少空格。

  1. data check;
  2. set want;
  3. flag1 = (code = '');
  4. flag2 = (code = ' ');
  5. flag3 = (code = ' ');
  6. flag4 = (code = ' ');
  7. flag5 = (code = ' ');
  8. flag6 = (code = ' ');
  9. flag7 = (code = ' ');
  10. format flag: 4.;
  11. run;
  12. proc print data=check; title;
  13. run;
  14. ----- OUTPUT window -----
  15. Obs code flag1 flag2 flag3 flag4 flag5 flag6 flag7
  16. 1 +34 0 0 0 0 0 0 0
  17. 2 +34 0 0 0 0 0 0 0
  18. 3 1 1 1 1 1 1 1
展开查看全部
hec6srdp

hec6srdp2#

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

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

axzmvihb3#

我的第一个想法是:sas数据集长度用空格定义$6列。例如,您可以在这个输出中查看newvariabletest列,您将看到加上“x”append for six“”,但您不需要定义它。因此,可以使用dataset并定义准备好的结果列长度。
例子:

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

相关问题