Sas 格式化变量,然后重新编码

Sas 格式化变量,然后重新编码,sas,Sas,我开始使用PROC格式格式化变量。后来,我发现我必须更改数据集中的一些变量。我想保持我最初创建的格式,但如果我重新编码,我想我无法做到这一点。我的假设正确吗?我想我必须改变一些格式以适应新的变量,但是有没有办法我不太确定我是否理解你的问题,但是我想我仍然可以通过让你理解在SAS中重新编码变量和使用格式化值之间的区别来回答你的问题 如果最初创建了格式,则在运行分析时,该格式将应用于SAS数据集中的值。因此,如果在数据集中的字符变量中有块a的值,并且有将块a映射为格式化值1的格式化值,那么如果进入并

我开始使用PROC格式格式化变量。后来,我发现我必须更改数据集中的一些变量。我想保持我最初创建的格式,但如果我重新编码,我想我无法做到这一点。我的假设正确吗?我想我必须改变一些格式以适应新的变量,但是有没有办法

我不太确定我是否理解你的问题,但是我想我仍然可以通过让你理解在SAS中重新编码变量和使用格式化值之间的区别来回答你的问题

如果最初创建了格式,则在运行分析时,该格式将应用于SAS数据集中的值。因此,如果在数据集中的字符变量中有块a的值,并且有将块a映射为格式化值1的格式化值,那么如果进入并稍后将块a的值更改为其他值并重新运行分析,块A将不再作为格式化值打印在输出中或在分析中使用。格式独立于数据集中的基础值工作。运行分析时,SAS基本上会在运行时查看数据集,并将每个值映射到proc format语句中指定的格式化值,然后使用格式化值执行分析

如果要保留原始格式,可以使用两种不同的格式:一种用于旧格式,另一种用于新格式,并根据何时要使用哪种格式在过程中调用适当的格式

您还可以在datastep中使用put语句来转换先前格式化的值,并将格式化的值硬编码为数据集中的实际值。例如,如果您有一个名为blockno的格式用于名为block的变量,则可以使用旧格式创建名为blockno_old的变量,并使用以下命令将其设置为旧格式值:

block_old=put(block, $blockno.).
然后可以使用新值修改块。然后,您必须在数据集中添加变量:block_old(包含变量的原始值)和block(更改后包含新值)。

Proc Format不是Format语句 使用proc format,您可以创建格式,而不将其分配给变量。例如,您可以使用format语句来执行此操作

变量的格式不是其内部长度 SAS变量只能有两种类型:非SAS程序员称之为double的数值型或非SAS程序员称之为固定长度字符的chracter。然而,它可以有数百种不同的格式。格式只决定变量在报表中的表示方式

您可以完全更改变量的格式,而无需更改其长度。 试试这个:

proc format;
    value myFormat 
        0-10 = 'small' 
        10-20 ='medium' 
        20-100='large' ;
run;

data test1;
    infile datalines;
    length myVar 8.;
    input myVar;
    format myVar 6.2;
    datalines;
1
2.1
9.12
10.123
15.1234
22.12345
50.123456
;

data test2;
    set test1;
    format myVar myFormat.;

data test3;
    set test2;
    format myVar 12.6;
run;

title 'In test1, myVar has format 6.2';     
proc print data=test1;
run;

title 'In test2, myVar has format myFormat';    
proc print data=test2;
run;

title 'In test3, myVar has format 12.6';    
proc print data=test3;
run;

您可以在格式目录中创建格式,并将其存储以供将来参考。数据集总是有新的变量和使用新数据更新的变量。因此,有一个格式目录来容纳新的和旧的更改实际上将有助于维护原始值和当前值的历史记录