簡體   English   中英

SAS 變量帶空格

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM