SAS代码:字符串中制表符的数量

时间:2019-09-23 15:34:55

标签: sas

我正在SAS中导入制表符分隔的文件,但是某些数据行中可能有许多额外的制表符。为了验证所有行是否具有相同数量的制表符分隔符,我想计算每个数据行中制表符的数量。如何在SAS中实现?对于普通字符(例如“;”或“ |”),以下代码可以正常工作,但是我不知道如何引用制表符,因为'09'x在count()函数内部不起作用:< / p>

   DATA output_file;
      drop inrecord;
      INFILE "input_file"
          LRECL=1000
          dlm=';'
      MISSOVER
      DSD
      ;


   length inrecord $1000; 
    input @1 inrecord $1000.;
    dlm_count = count(inrecord,';');
    RUN;

3 个答案:

答案 0 :(得分:1)

使用//version 1 const wrapper = mount(<AppContext.Provider context={{ state: { user: SUPER_USER } }}><ActivityDisplay {...props} /></AppContext.Provider>) instance = wrapper.instance() }) //version 2 wrapper = mount(<HomePage {...props} />, { context: { state: { user: SUPER_USER } }, }) //version 3 wrapper = mount(<HomePage {...props} />, { AppContext: { Consumer: { user: SUPER_USER } } }) afterAll(() => { wrapper.unmount() }) it('should display dashboard when user is SUPER_USER', () => { //do my assertions here })

(注意:在将countc()行转换为Stack Overflow上的空格后,您需要手动将其添加到datalines行的末尾)

data dr_seuss;
    length line $100.;
    infile datalines dlm=',';
    input line$;

    total_tabs = countc(line, '09'x);

    datalines;
one fish    
two fish        
red fish            
blue fish               
;
run;

答案 1 :(得分:1)

CountCountC都应该起作用。 '09'x应该在Count内部工作。

CountC(带有修饰符)对于字符分隔的数据和可能必须同时在ASCII和EBCDIC平台上运行的代码更灵活。

单独使用input;语句将整行读入输入缓冲区,可通过自动变量_infile_访问该行。

filename tabdata '....';
data _null_;
  infile tabdata lrecl=32000;

  input;

  tabcount = count(_infile_, '09'x);
  if tabcount ne lag(tabcount) and _n_ > 1 then put 'tabcount changed! ' _n_= tabcount=;
run;

三个选项卡计数器的示例:

data _null_;
  s = "ABC" || "09"x || "DEF" || "09"x || "GHI" || "0909090909"x;

  tabcount = count(s, "09"x);    * count when tab specified as the substring;
  tabcountc = countc(s, "09"x);  * countc with single character, the ascii tab character;
  tabcountc2 = countc(s,,'h');   * countc with modifier h for counting horizontal tabs;

  put (tabcount:) (=/);
run;
----------------- LOG ------------------
tabcount=7
tabcountc=7
tabcountc2=7

请注意,Count目标是 substring 参数,而CountC单字符目标是在 charlist 参数中。如果有多个定界符,请使用CountC

答案 2 :(得分:0)

COUNT()和COUNTC()都可以使用。

t.wait(10000);

要想真正修复文件,您需要做两件事之一。

首先,多余的制表符可能已经被加了反斜杠的前缀而被转义。只需查看其中一条不良线路,然后确定这是否是他们所做的。您可以使用ntabs1=count(_infile_,'09'x); ntabs2=countc(_infile_,'09'x); 函数将任何反斜杠+制表符更改为其他字符,例如竖线。

TRANWRD()

第二,如果您确定只有一列可以包含多余的选项卡,则只需剥离该列之前和之后的值,剩下的就是该列的值。

如果以上两种情况都不成立,则可能需要使用额外的标签手动编辑行。您可以通过将嵌入式选项卡更改为其他字符或在带有嵌入式选项卡的值周围添加引号来解决此问题。您可以使用COUNTC()函数的结果来判断哪些行需要编辑。例如,如果应该有11个字段(所以有10个标签),则类似这样的程序会将文件分为两部分。

data want;
  infile "input_file" dsd dlm='09'x truncover ;
  input @;
  _infile_=tranwrd(_infile_,'\'||'09'x,'|');
  input .... ;
run;