Welcome to DEVIL (Developer's Ideas Library)!
Share your devils (any ideas at any stage) for trial, inspiring, showing-off, recruiting members for further development by showing POC, or even joking(for fun). You can see in description.sas of devil package that author is "Any Developers". Devil package is completely different from the other packages in PharmaForest with its highly collaborative nature to welcome any ideas from anyone regardless of usefulness(we would rather prefer playful ones😁). Let's take a break, knock the door of devil!
Devil package is said to be an ancient SAS package that has existed for 400 years. Within it dwell unseen devils, ready to threaten the world. It is said to have the power to summon them—or even lock up your own devils. (Just kidding!)
A macro (%hanabi()) uses %color_swatch() in misc package, please install misc to use devil.
%installPackage(misc, mirror=pharmaforest)Chat application in SAS DMS(Display Manager System) for those who cannot afford Viya Copilot😂
This is available only for DMS. You need your API key for openAI or google to use the app.
Sample code:
%chatDMS(
provider=google, /* AI provider(openAI / Google / Anthropic available) */
model=gemini-1.5-flash, /* Model information */
apikey=xxxxxxxxxxxxxxx, /* API key */
max_tokens=512) /* Max token */Author: Ryo Nakaya
Date: 2025-08-01
Version: 0.3
text2morse is a function that converts text to Morse code.

Sample code:
data test;
length x $200.;
x = "I M WITH YOU ";output;/*Captain America: The First Avenger*/
x = "STAY";output; /*Interstellar*/
x = "SO HOPING";output; /*Parasite*/
run;
data a;
set test;
y = text2morse(x);
run;
Author: Yutaka Morioka
Date: 2025-07-22
Version: 0.1

Simulates Conway's Game of Life in SAS and generates an animated GIF output. Uses a grid of cells initialized randomly or from an input dataset, applies the life game rules iteratively, and visualizes the process as a heatmap animation.
Parameters :
outpath - File path to save the output GIF.
outfilename - Name of the output GIF file (default: lifegame).
seed - Random seed for initial cell generation (default: 777).
loop - Number of iterations (animation frames) to simulate (default: 50).
xwide - Width of the grid (default: 50).
ywide - Height of the grid (default: 50).
ds - Optional input dataset to use as the initial grid. If not provided,
a random grid will be generated.
Sample code:
%life_game(outpath=D:\Users\Example\Output, outfilename=mygame, loop=100, xwide=60, ywide=60);Author: Yutaka Morioka
Date: 2025-07-23
Version: 0.1
Sudoku solver is finally in SAS!
Parameters :
puzzle= : the Sudoku puzzle converted into a SAS dataset (Refer to the following 'prerequisites' section!)
outputpath= : the directory where the results are output (LOG file or RTF file when rtfYN=Y)
rtfYN= : Default is N. If you change this parameter to Y, an RTF output will be created in 'outputpath'.
Sample code :
%sudoku_solver(
puzzle=__sudoku__,
outputpath=/home/XXXXX/sudoku/,
rtfYN=Y
)
/*example data*/
data sudoku1;
input c1-c9 8.;
cards;
0 0 2 3 0 0 5 0 0
4 0 0 0 8 0 0 1 0
0 0 9 0 0 4 0 0 6
0 2 0 0 7 0 1 0 8
6 0 0 5 0 9 0 0 3
1 0 3 0 4 0 0 7 0
9 0 0 8 0 0 2 0 0
0 8 0 0 6 0 0 0 9
0 0 7 0 0 1 3 0 0
;- "Sudoku" is a registered trademark of Nikoli. (https://www.nikoli.co.jp/ja/puzzles/sudoku/)
- The maximum number of backtracks is set to 50,000.
- This is because most Sudoku puzzles can be solved within 50,000 backtracks.
- If there is a request to specify the number of backtracks in the macro parameter, I will consider it:)
Author: Miyuki Aso
Date: 2025-07-25
Version: 0.1
To celebrate someone or something with fireworks(hanabi).
The macro uses %color_swatch() in misc package, please install misc to use this.
Sample code:
%hanabi(
giffile=C:\temp\hanabi.gif, /*path for gif file*/
ite=10) /*iteration(1-151)*/Author: Akira Matsuzawa,Yutaka Morioka, Ryo Nakaya
Date: 2025-08-05
Version: 0.1
0.0.7(5August2025) : Added %hanabi()
0.0.6(1August2025) : Added Anthropic(Claude) in %chatDMS()
0.0.5(31July2025) : modified code of extracting response in json for %chatDMS()
0.0.4(25July2025) : Added %sudoku_solver()
0.0.3(23July2025) : Added %life_game()
0.0.2(22July2025) : Added text2morse function
0.0.1(21July2025) : Initial version
The package is built on top of SAS Packages Framework(SPF) developed by Bartosz Jablonski.
For more information about the framework, see SAS Packages Framework.
You can also find more SAS Packages (SASPacs) in the SAS Packages Archive(SASPAC).
First, create a directory for your packages and assign a packages fileref to it.
filename packages "\path\to\your\packages";Secondly, enable the SAS Packages Framework. (If you don't have SAS Packages Framework installed, follow the instruction in SPF documentation to install SAS Packages Framework.)
%include packages(SPFinit.sas)Install SAS package you want to use with the SPF's %installPackage() macro.
-
For packages located in SAS Packages Archive(SASPAC) run:
%installPackage(packageName)
-
For packages located in PharmaForest run:
%installPackage(packageName, mirror=PharmaForest)
-
For packages located at some network location run:
%installPackage(packageName, sourcePath=https://some/internet/location/for/packages)
(e.g.
%installPackage(ABC, sourcePath=https://github.com/SomeRepo/ABC/raw/main/))
Load SAS package you want to use with the SPF's %loadPackage() macro.
%loadPackage(packageName)



