If statement 可以/如何创建按接收的数据类型进行区分的if条件语句。SAS

If statement 可以/如何创建按接收的数据类型进行区分的if条件语句。SAS,if-statement,sas,If Statement,Sas,我是SAS的新手,目前在一个相当大的数据集工作。我得到一个类型的错误: 注:第1304行第173列的数字数据“dev”无效 我要创建此类型的%if条件语句: 如果输入数据是数字,则继续 如果格式为0.20,则为else 我将如何做这件事,非常感谢你提前请注意这是我使用SAS的第一个3小时。我有python方面的经验 当前代码如下所示: dateVar=year(&dateVar.)*100+month(&dateVar.);

我是SAS的新手,目前在一个相当大的数据集工作。我得到一个类型的错误:

注:第1304行第173列的数字数据“dev”无效

我要创建此类型的%if条件语句:

如果输入数据是数字,则继续 如果格式为0.20,则为else

我将如何做这件事,非常感谢你提前请注意这是我使用SAS的第一个3小时。我有python方面的经验

当前代码如下所示:

      dateVar=year(&dateVar.)*100+month(&dateVar.);
        
        

        if &devSampleStart.<=dateVar<=&devSampleEnd. then
            sample='dev'; 
            
        else if &baseSampleStart.<=dateVar<=&baseSampleEnd. then 
                   sample='base';
        else if &recSample.=dateVar then 
                   sample='rec ';
        else       sample='    ';
dateVar=年(&dateVar.)*100+月(&dateVar.);

如果&devSampleStart.如果日期变量是带有日期格式的数字(如DDMMYY10),则错误不是来自日期值的测试

所以听起来SAMPLE要么是一个现有的数值变量。或者,数据步骤中的某些早期代码引用了SAMPLE,导致SAS将变量定义为数字

要根据现有变量的类型更改生成的代码,需要在开始生成使用该变量的代码之前进行更改。例如,您可以设置宏可以测试的宏变量,并决定生成什么代码

如果您想将SAMPLE创建为一个新变量,那么您可能只想有条件地删除任何具有该名称的现有变量

data want;
  set have (
%if %varexist(have,sample) %then %do;
    drop=sample 
%end;
  );
  length sample $4 ;
  if &devSampleStart.<=dateVar<=&devSampleEnd. then sample='dev'; 
  else ...
        
需要数据;
集有(
%如果%varexist(have,sample)%,则%do;
滴落=样品
%结束;
);
样本长度4美元;

if&devSampleStart.So错误是由变量SAMPLE被定义为数字而不是字符引起的?“”格式应该比简单的=,更具包容性,因此我认为原始数据可能格式错误,但我不能删除该行。我希望它是字符格式,是的。在SAS数据集上运行PROC内容并检查类型和长度(请注意,SAS中的格式只是如何显示值,而不是如何存储值)。日期变量是数字还是字符?示例变量是数字还是字符(或不存在?)。若要使用宏处理器根据变量的定义方式生成不同的代码,需要在开始定义将使用它的数据步骤之前测试变量定义@Tom Proc说它们是长度为8的数字,格式为ddmmyy10I在表达式中找不到必需的运算符:%varexist您下载并编译链接宏了吗?还有其他方法可以测试变量的存在性,但在尝试这样做之前,请在不使用任何宏逻辑的情况下测试数据步骤的逻辑,以确保您尝试使用宏处理器生成的SAS代码是有效的SAS代码。Tom,您是智者尤达大师。和温杜大师一样强大。
data want;
  set have (
%if %varexist(have,sample) %then %do;
    drop=sample 
%end;
  );
  length sample $4 ;
  if &devSampleStart.<=dateVar<=&devSampleEnd. then sample='dev'; 
  else ...