我是SAS的新手,目前正在处理一个相当大的数据集。我收到以下类型的错误:
注意:无效的数字数据,'dev‘,第1304行,第173列。
我想创建此类型的%if条件语句:
如果输入数据是数字,则如果是格式,则继续。20。
我该怎么做呢,提前谢谢你,请注意这是我使用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=' ';日志副本:
MPRINT(CALCMIGRATIONMATRIX): dateVar=year(snapshot_date1)*100+month(snapshot_date1);
SYMBOLGEN: Macro variable DEVSAMPLESTART resolves to 200709
SYMBOLGEN: Macro variable DEVSAMPLEEND resolves to 201809
MPRINT(CALCMIGRATIONMATRIX): if 200709<=dateVar<=201809 then sample='dev';
SYMBOLGEN: Macro variable BASESAMPLESTART resolves to 201909
SYMBOLGEN: Macro variable BASESAMPLEEND resolves to 201909
MPRINT(CALCMIGRATIONMATRIX): else if 201909<=dateVar<=201909 then sample='base';
SYMBOLGEN: Macro variable RECSAMPLE resolves to 202009
MPRINT(CALCMIGRATIONMATRIX): else if 202009=dateVar then sample='rec ';
MPRINT(CALCMIGRATIONMATRIX): else sample=' ';
SYMBOLGEN: Macro variable DATEVAR resolves to snapshot_date1
SYMBOLGEN: Macro variable BASESAMPLEEND resolves to 201909
MPRINT(CALCMIGRATIONMATRIX): if mod(month(snapshot_date1),100)=mod(201909,100) then yearlyTimeSlice=1;
MPRINT(CALCMIGRATIONMATRIX): else yearlyTimeSlice=0;
SYMBOLGEN: Macro variable ACCOUNTID resolves to account_id
SYMBOLGEN: Macro variable RATINGVAR resolves to rating
MPRINT(CALCMIGRATIONMATRIX): keep account_id rating dateVar sample yearlyTimeSlice;
MPRINT(CALCMIGRATIONMATRIX): run;
NOTE: Character values have been converted to numeric values at the places given by: (Line):(Column).
1304:173 1304:34 1304:120 1304:159
NOTE: Invalid numeric data, 'dev' , at line 1304 column 173.发布于 2021-04-12 23:02:35
如果您的日期变量确实是带有日期格式的数字(如DDMMYY10)。则错误不是来自日期值的测试。
所以听起来SAMPLE要么是一个现有的数值变量。或者,您的数据步骤中的一些早期代码引用了SAMPLE,这导致SAS将变量定义为数字。
要根据现有变量的类型更改生成的代码,需要在开始生成使用它的代码之前执行test the variable。例如,您可以设置宏可以测试的宏变量,并确定要生成的代码。
如果您想将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 ...https://stackoverflow.com/questions/67057957
复制相似问题