2017-02-01 3 views
0

у меня есть: строки с шестнадцатеричными значениями каждые 4 позицийКак преобразовать HEXADECIMAL в DECIMAL в SAS?

00F701C101C900EC01E001D2

мне нужно:

Раздельных эти значения от 4 в 4-х положениях и преобразующий до десятичных чисел следующим образом:

247, 449, 457, 480, 466

Моя колонка может иметь до 1200 шестнадцатеричные позиции

Можете ли вы мне помочь?

Tks !!!

+0

Что вы пытаетесь ? Каким образом это не сработало? – Tom

+0

, пожалуйста, введите код, который вы пробовали. –

+0

Я знаю только EXCEL, я не мог этого сделать по SAS –

ответ

1

Это работает:

data out; 
    hex = "00F701C101C900EC01E001D2"; 
    do while(hex ne ""); 
     valHex = substr(hex, 1, 4); 
     hex = substr(hex, 5); 
     valDec = input(valHex, hex4.); 
     output; 
    end; 
run; 

но вы хотите добавить больше ошибок проверки и т.д. для вашего реального решения.

+0

Thks Chris !! I Я проверю и делюсь результатами !!! –

0

Извините, я должен был поститься. Это синтаксис SQL-сервер, вероятно, не работает для вас, но вы можете получить представление о ...

Попробуй так:

DECLARE @YourString VARCHAR(100)='00F701C101C900EC01E001D2'; 
WITH Separated AS 
(
    SELECT CAST(LEFT(@YourString,4) AS VARCHAR(MAX)) AS SourceString 
      ,CAST(SUBSTRING(@YourString,5,10000) AS VARCHAR(MAX)) AS RestString 
    UNION ALL 
    SELECT LEFT(RestString,4) 
      ,SUBSTRING(RestString,5,10000) 
    FROM Separated 
    WHERE LEN(RestString)>=4 
) 
SELECT * 
     ,CAST(sys.fn_cdc_hexstrtobin(SourceString) AS VARBINARY(2)) 
     ,CAST(CAST(sys.fn_cdc_hexstrtobin(SourceString) AS VARBINARY(2)) AS INT) 
FROM Separated 

Результат

+--------------+----------------------+--------------------+--------------------+ 
| SourceString | RestString   | (Kein Spaltenname) | (Kein Spaltenname) | 
+--------------+----------------------+--------------------+--------------------+ 
| 00F7   | 01C101C900EC01E001D2 | 0x00F7    | 247    | 
+--------------+----------------------+--------------------+--------------------+ 
| 01C1   | 01C900EC01E001D2  | 0x01C1    | 449    | 
+--------------+----------------------+--------------------+--------------------+ 
| 01C9   | 00EC01E001D2   | 0x01C9    | 457    | 
+--------------+----------------------+--------------------+--------------------+ 
| 00EC   | 01E001D2    | 0x00EC    | 236    | 
+--------------+----------------------+--------------------+--------------------+ 
| 01E0   | 01D2     | 0x01E0    | 480    | 
+--------------+----------------------+--------------------+--------------------+ 
| 01D2   |      | 0x01D2    | 466    | 
+--------------+----------------------+--------------------+--------------------+ 
+0

Tks Shnugo! Я проверю и поделись результатами! –

Смежные вопросы