Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SAS countc函数_Sas - Fatal编程技术网

SAS countc函数

SAS countc函数,sas,Sas,我使用的是SAS 9.0版 对于函数countc(字符串、字符表、修饰符)我使用AD作为修饰符,其中a用于添加字母表,D用于添加数字 虽然D工作正常,但A根本不工作。我正在申请一个代码,用于检查前3个字母是否为字母或数字。下面是代码 countc(scan(compress(code),1, "."), ,'AD') 示例: code= V23.34 Output = it just give blank. Expected Output= 3 code= Vy.78 Output = b

我使用的是SAS 9.0版

对于函数
countc(字符串、字符表、修饰符)
我使用
AD
作为修饰符,其中
a
用于添加字母表,
D
用于添加数字

虽然
D
工作正常,但
A
根本不工作。我正在申请一个代码,用于检查前3个字母是否为字母或数字。下面是代码

countc(scan(compress(code),1, "."), ,'AD')
示例:

code= V23.34 
Output = it just give blank.
Expected Output= 3

code= Vy.78
Output = blank
Expected output= 2

code= 568.789
Output = 3
expected output = 3

我不确定
A
是否适用于此版本的SAS,因为文档中有它。

我在我的SAS9.3环境中用双引号尝试了相同的值,结果得到了3

代码1,无卡:

data _null_;
code= "V23.34";
countc=countc(scan(compress(code),1, "."), ,'AD') ; 
put _all_;
run;
代码2,带卡:

data input;
input code $ 1-8;
cards;
V23.34
;
run;

data _null_;
set input;
countc=countc(scan(compress(code),1, "."), ,'AD') ; 
put _all_;
run;
输出:

code=V23.34 countc=3 _ERROR_=0 _N_=1

您的压缩和扫描逻辑也适用于我,prx函数将使其更通用,下面的代码显示了两者的示例

`
    data want;
    IF _N_ =1 THEN PATTERN = PRXPARSE ("/(^[A-Za-z0-9]{3})/");
    retain pattern;
     code= "V23.34" ;
     code= "V23134" ;
     if countc(scan(compress(code),1, "."), ,'AD') = 3 then flag= 'Y';
     else flag ='N';
     IF prxmatch(pattern, code) then flag1 ='Y'; else flag1 = 'N' ;
     run;

`

您的预期输出是什么?您可能没有使用SAS 9.0,更可能使用SAS 9.04?也许是SAS 9。4@Reeza是的,你是对的,版本实际上是9.04。我不知道它和9是一样的。4@Rushikumar编辑了带有预期输出的问题是否可能是因为SAS9.3和SAS9.04之间存在差异?我也试过使用单引号和双引号,但对我不起作用。还有一件事我是通过“卡片”(从程序本身)获取输入的。这有什么区别吗?如果像下面的代码那样声明您的卡,代码应该可以工作:数据为空;设置输入;countc=countc(扫描(压缩(代码),1,“.”,'AD');把所有的;跑当我在程序本身中声明“代码”(输入)时,它起作用。但当我使用卡片输入法时,它不起作用。虽然我使用了双引号,但它可能不会将其作为字符串。无论如何,谢谢